diff --git a/README.md b/README.md index 99f8dc54b..d8d4335fe 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,8 @@ You can use the link to the explorer to check the status of your transaction. aligned verify-proof-onchain \ --aligned-verification-data ~/.aligned/aligned_verification_data/*.json \ --rpc_url https://ethereum-holesky-rpc.publicnode.com \ ---chain holesky +--chain holesky \ +--payment_service_addr 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ``` This is reading the result of the verification of the proof in Ethereum. @@ -179,4 +180,4 @@ For submitting proofs generated by your own project to the network via CLI, see ## Integrating Aligned into your Project -If you are developing applications using Aligned, we offer a [Rust-SDK](docs/3_guides/1_SDK_how_to.md) for submitting proofs directly to the network within your applications. +If you are developing applications using Aligned, we offer a [Rust-SDK](docs/guides/1_SDK.md) for submitting proofs directly to the network within your applications. diff --git a/aggregator/cmd/main.go b/aggregator/cmd/main.go index abeead972..77b3115ff 100644 --- a/aggregator/cmd/main.go +++ b/aggregator/cmd/main.go @@ -51,7 +51,7 @@ func aggregatorMain(ctx *cli.Context) error { return err } - // Listen for new task created in the ServiceManager contract in a separate goroutine + // Listen for new task created in the ServiceManager contract in a separate goroutine, both V1 and V2 subscriptions: go func() { listenErr := aggregator.SubscribeToNewTasks() if listenErr != nil { diff --git a/aggregator/internal/pkg/aggregator.go b/aggregator/internal/pkg/aggregator.go index 35403ebdd..610b84feb 100644 --- a/aggregator/internal/pkg/aggregator.go +++ b/aggregator/internal/pkg/aggregator.go @@ -42,7 +42,8 @@ type BatchData struct { type Aggregator struct { AggregatorConfig *config.AggregatorConfig - NewBatchChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 + NewBatchChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch + NewBatchChanV2 chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 avsReader *chainio.AvsReader avsSubscriber *chainio.AvsSubscriber avsWriter *chainio.AvsWriter @@ -91,7 +92,8 @@ type Aggregator struct { } func NewAggregator(aggregatorConfig config.AggregatorConfig) (*Aggregator, error) { - newBatchChan := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) + newBatchChan := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) + newBatchChanV2 := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) avsReader, err := chainio.NewAvsReaderFromConfig(aggregatorConfig.BaseConfig, aggregatorConfig.EcdsaConfig) if err != nil { @@ -162,6 +164,7 @@ func NewAggregator(aggregatorConfig config.AggregatorConfig) (*Aggregator, error avsSubscriber: avsSubscriber, avsWriter: avsWriter, NewBatchChan: newBatchChan, + NewBatchChanV2: newBatchChanV2, batchesIdentifierHashByIdx: batchesIdentifierHashByIdx, batchesIdxByIdentifierHash: batchesIdxByIdentifierHash, @@ -215,6 +218,8 @@ func (agg *Aggregator) Start(ctx context.Context) error { const MaxSentTxRetries = 5 +var switchBlockNumber = uint64(2_268_375) // 2_268_375 is the block at sep 3th 15:00 + func (agg *Aggregator) handleBlsAggServiceResponse(blsAggServiceResp blsagg.BlsAggregationServiceResponse) { if blsAggServiceResp.Err != nil { agg.taskMutex.Lock() @@ -276,21 +281,38 @@ func (agg *Aggregator) handleBlsAggServiceResponse(blsAggServiceResp blsagg.BlsA agg.logger.Info("Sending aggregated response onchain", "taskIndex", blsAggServiceResp.TaskIndex, "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) - + current_task_block := agg.batchCreatedBlockByIdx[blsAggServiceResp.TaskIndex] for i := 0; i < MaxSentTxRetries; i++ { - receipt, err := agg.sendAggregatedResponse(batchData.BatchMerkleRoot, batchData.SenderAddress, nonSignerStakesAndSignature) - if err == nil { - agg.logger.Info("Gas cost used to send aggregated response", "gasUsed", receipt.GasUsed) - - agg.logger.Info("Aggregator successfully responded to task", - "taskIndex", blsAggServiceResp.TaskIndex, - "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) - - return + if current_task_block < switchBlockNumber { + agg.logger.Info("agg if V1") + receipt, err := agg.sendAggregatedResponse(batchData.BatchMerkleRoot, nonSignerStakesAndSignature) + if err == nil { + agg.logger.Info("Gas cost used to send aggregated response", "gasUsed", receipt.GasUsed) + agg.logger.Info("Aggregator successfully responded to task", + "taskIndex", blsAggServiceResp.TaskIndex, + "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) + + return + } + + // Sleep for a bit before retrying + time.Sleep(2 * time.Second) + + } else { + agg.logger.Info("agg if V2") + _, err = agg.sendAggregatedResponseV2(batchData.BatchMerkleRoot, batchData.SenderAddress, nonSignerStakesAndSignature) + if err == nil { + agg.logger.Info("Aggregator successfully responded to task", + "taskIndex", blsAggServiceResp.TaskIndex, + "batchIdentifierHash", "0x"+hex.EncodeToString(batchIdentifierHash[:])) + + return + } + + // Sleep for a bit before retrying + time.Sleep(2 * time.Second) } - // Sleep for a bit before retrying - time.Sleep(2 * time.Second) } agg.logger.Error("Aggregator failed to respond to task, this batch will be lost", @@ -303,7 +325,32 @@ func (agg *Aggregator) handleBlsAggServiceResponse(blsAggServiceResp blsagg.BlsA // / Sends response to contract and waits for transaction receipt // / Returns error if it fails to send tx or receipt is not found -func (agg *Aggregator) sendAggregatedResponse(batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*gethtypes.Receipt, error) { +func (agg *Aggregator) sendAggregatedResponse(batchMerkleRoot [32]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*gethtypes.Receipt, error) { + agg.walletMutex.Lock() + agg.logger.Infof("- Locked Wallet Resources: Sending aggregated response for batch", + "merkleRoot", hex.EncodeToString(batchMerkleRoot[:])) + + txHash, err := agg.avsWriter.SendAggregatedResponse(batchMerkleRoot, nonSignerStakesAndSignature) + if err != nil { + agg.walletMutex.Unlock() + agg.logger.Infof("- Unlocked Wallet Resources: Error sending aggregated response for batch %s. Error: %s", hex.EncodeToString(batchMerkleRoot[:]), err) + return nil, err + } + + agg.walletMutex.Unlock() + agg.logger.Infof("- Unlocked Wallet Resources: Sending aggregated response for batch %s", hex.EncodeToString(batchMerkleRoot[:])) + + receipt, err := utils.WaitForTransactionReceipt( + agg.AggregatorConfig.BaseConfig.EthRpcClient, context.Background(), *txHash) + if err != nil { + return nil, err + } + + agg.metrics.IncAggregatedResponses() + + return receipt, nil +} +func (agg *Aggregator) sendAggregatedResponseV2(batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*gethtypes.Receipt, error) { batchIdentifier := append(batchMerkleRoot[:], senderAddress[:]...) var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) @@ -313,7 +360,7 @@ func (agg *Aggregator) sendAggregatedResponse(batchMerkleRoot [32]byte, senderAd "senderAddress", hex.EncodeToString(senderAddress[:]), "batchIdentifierHash", hex.EncodeToString(batchIdentifierHash[:])) - txHash, err := agg.avsWriter.SendAggregatedResponse(batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) + txHash, err := agg.avsWriter.SendAggregatedResponseV2(batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) if err != nil { agg.walletMutex.Unlock() agg.logger.Infof("- Unlocked Wallet Resources: Error sending aggregated response for batch %s. Error: %s", hex.EncodeToString(batchIdentifierHash[:]), err) @@ -334,7 +381,53 @@ func (agg *Aggregator) sendAggregatedResponse(batchMerkleRoot [32]byte, senderAd return receipt, nil } -func (agg *Aggregator) AddNewTask(batchMerkleRoot [32]byte, senderAddress [20]byte, taskCreatedBlock uint32) { +func (agg *Aggregator) AddNewTask(batchMerkleRoot [32]byte, taskCreatedBlock uint32) { + agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task", + "Batch merkle root", "0x"+hex.EncodeToString(batchMerkleRoot[:])) + + agg.taskMutex.Lock() + agg.AggregatorConfig.BaseConfig.Logger.Info("- Locked Resources: Adding new task") + + // --- UPDATE BATCH - INDEX CACHES --- + batchIndex := agg.nextBatchIndex + if _, ok := agg.batchesIdxByIdentifierHash[batchMerkleRoot]; ok { + agg.logger.Warn("Batch already exists", "batchIndex", batchIndex, "batchIdentifierHash (actually batchMerkleRoot)", batchMerkleRoot) + agg.taskMutex.Unlock() + agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Adding new task") + return + } + + // This shouldn't happen, since both maps are updated together + if _, ok := agg.batchesIdentifierHashByIdx[batchIndex]; ok { + agg.logger.Warn("Batch already exists", "batchIndex", batchIndex, "batchIdentifierHash (actually batchMerkleRoot)", batchMerkleRoot) + agg.taskMutex.Unlock() + agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Adding new task") + return + } + + agg.batchesIdxByIdentifierHash[batchMerkleRoot] = batchIndex + agg.batchCreatedBlockByIdx[batchIndex] = uint64(taskCreatedBlock) + agg.batchesIdentifierHashByIdx[batchIndex] = batchMerkleRoot + agg.batchDataByIdentifierHash[batchMerkleRoot] = BatchData{ + BatchMerkleRoot: batchMerkleRoot, + SenderAddress: [20]byte{}, + } + agg.nextBatchIndex += 1 + + quorumNums := eigentypes.QuorumNums{eigentypes.QuorumNum(QUORUM_NUMBER)} + quorumThresholdPercentages := eigentypes.QuorumThresholdPercentages{eigentypes.QuorumThresholdPercentage(QUORUM_THRESHOLD)} + + err := agg.blsAggregationService.InitializeNewTask(batchIndex, taskCreatedBlock, quorumNums, quorumThresholdPercentages, 100*time.Second) + // FIXME(marian): When this errors, should we retry initializing new task? Logging fatal for now. + if err != nil { + agg.logger.Fatalf("BLS aggregation service error when initializing new task: %s", err) + } + + agg.taskMutex.Unlock() + agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Adding new task") + agg.logger.Info("New task added", "batchIndex", batchIndex, "batchIdentifierHash (actually batchMerkleRoot)", "0x"+hex.EncodeToString(batchMerkleRoot[:])) +} +func (agg *Aggregator) AddNewTaskV2(batchMerkleRoot [32]byte, senderAddress [20]byte, taskCreatedBlock uint32) { batchIdentifier := append(batchMerkleRoot[:], senderAddress[:]...) var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) diff --git a/aggregator/internal/pkg/server.go b/aggregator/internal/pkg/server.go index ec7f4fa85..b8a992fee 100644 --- a/aggregator/internal/pkg/server.go +++ b/aggregator/internal/pkg/server.go @@ -48,7 +48,98 @@ func (agg *Aggregator) ServeOperators() error { // Returns: // - 0: Success // - 1: Error -func (agg *Aggregator) ProcessOperatorSignedTaskResponseV2(signedTaskResponse *types.SignedTaskResponse, reply *uint8) error { +func (agg *Aggregator) ProcessOperatorSignedTaskResponse(signedTaskResponse *types.SignedTaskResponse, reply *uint8) error { + agg.AggregatorConfig.BaseConfig.Logger.Info("New task response", + "BatchMerkleRoot", "0x"+hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), + "operatorId", hex.EncodeToString(signedTaskResponse.OperatorId[:])) + + taskIndex := uint32(0) + ok := false + + for i := 0; i < waitForEventRetries; i++ { + agg.taskMutex.Lock() + agg.AggregatorConfig.BaseConfig.Logger.Info("- Locked Resources: Starting processing of Response") + taskIndex, ok = agg.batchesIdxByIdentifierHash[signedTaskResponse.BatchMerkleRoot] + if !ok { + agg.taskMutex.Unlock() + agg.logger.Info("- Unlocked Resources: Task not found in the internal map") + time.Sleep(waitForEventSleepSeconds) + } else { + break + } + } + + if !ok { + agg.logger.Warn("Task not found in the internal map, operator signature will be lost. Batch may not reach quorum") + *reply = 1 + return nil + } + + // Note: we already have lock here + agg.logger.Debug("- Checking if operator already responded") + batchResponses, ok := agg.operatorRespondedBatch[taskIndex] + if !ok { + batchResponses = make(map[eigentypes.Bytes32]struct{}) + agg.operatorRespondedBatch[taskIndex] = batchResponses + } + + if _, ok := batchResponses[signedTaskResponse.OperatorId]; ok { + *reply = 0 + agg.logger.Warn("Operator already responded, ignoring", + "operatorId", hex.EncodeToString(signedTaskResponse.OperatorId[:]), + "taskIndex", taskIndex, "batchMerkleRoot", hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:])) + + agg.taskMutex.Unlock() + return nil + } + + batchResponses[signedTaskResponse.OperatorId] = struct{}{} + + // Don't wait infinitely if it can't answer + // Create a context with a timeout of 5 seconds + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() // Ensure the cancel function is called to release resources + + // Create a channel to signal when the task is done + done := make(chan struct{}) + + agg.logger.Info("Starting bls signature process") + go func() { + err := agg.blsAggregationService.ProcessNewSignature( + context.Background(), taskIndex, signedTaskResponse.BatchMerkleRoot, + &signedTaskResponse.BlsSignature, signedTaskResponse.OperatorId, + ) + + if err != nil { + agg.logger.Warnf("BLS aggregation service error: %s", err) + // remove operator from the list of operators that responded + // so that it can try again + delete(batchResponses, signedTaskResponse.OperatorId) + } else { + agg.logger.Info("BLS process succeeded") + } + + close(done) + }() + + *reply = 1 + // Wait for either the context to be done or the task to complete + select { + case <-ctx.Done(): + // The context's deadline was exceeded or it was canceled + agg.logger.Info("Bls process timed out, operator signature will be lost. Batch may not reach quorum") + case <-done: + // The task completed successfully + agg.logger.Info("Bls context finished correctly") + *reply = 0 + } + + agg.AggregatorConfig.BaseConfig.Logger.Info("- Unlocked Resources: Task response processing finished") + agg.taskMutex.Unlock() + + return nil +} +func (agg *Aggregator) ProcessOperatorSignedTaskResponseV2(signedTaskResponse *types.SignedTaskResponseV2, reply *uint8) error { agg.AggregatorConfig.BaseConfig.Logger.Info("New task response", "BatchMerkleRoot", "0x"+hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), "SenderAddress", "0x"+hex.EncodeToString(signedTaskResponse.SenderAddress[:]), diff --git a/aggregator/internal/pkg/subscriber.go b/aggregator/internal/pkg/subscriber.go index f1eddbdbd..3ae5998e6 100644 --- a/aggregator/internal/pkg/subscriber.go +++ b/aggregator/internal/pkg/subscriber.go @@ -5,18 +5,37 @@ func (agg *Aggregator) SubscribeToNewTasks() error { if err != nil { return err } + err = agg.subscribeToNewTasksV2() + if err != nil { + return err + } + + var switchBlockNumber = uint32(2_268_375) // 2_268_375 is the block at sep 3th 15:00 for { select { case err := <-agg.taskSubscriber: agg.AggregatorConfig.BaseConfig.Logger.Info("Failed to subscribe to new tasks", "err", err) + + // TODO not sure if this is the best way, but no way to calculate blocknumber from here err = agg.subscribeToNewTasks() + errV2 := agg.subscribeToNewTasksV2() if err != nil { return err } + if errV2 != nil { + return err + } case newBatch := <-agg.NewBatchChan: - agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task") - agg.AddNewTask(newBatch.BatchMerkleRoot, newBatch.SenderAddress, newBatch.TaskCreatedBlock) + if newBatch.TaskCreatedBlock < switchBlockNumber { + agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task, V1") + agg.AddNewTask(newBatch.BatchMerkleRoot, newBatch.TaskCreatedBlock) + } + case newBatchV2 := <-agg.NewBatchChanV2: + if newBatchV2.TaskCreatedBlock >= switchBlockNumber { + agg.AggregatorConfig.BaseConfig.Logger.Info("Adding new task, V2") + agg.AddNewTaskV2(newBatchV2.BatchMerkleRoot, newBatchV2.SenderAddress, newBatchV2.TaskCreatedBlock) + } } } } @@ -32,3 +51,14 @@ func (agg *Aggregator) subscribeToNewTasks() error { return err } +func (agg *Aggregator) subscribeToNewTasksV2() error { + var err error + + agg.taskSubscriber, err = agg.avsSubscriber.SubscribeToNewTasksV2(agg.NewBatchChanV2) + + if err != nil { + agg.AggregatorConfig.BaseConfig.Logger.Info("Failed to create task subscriber", "err", err) + } + + return err +} diff --git a/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json b/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json index a0d0bed3a..d619ea7a4 100644 --- a/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json +++ b/batcher/aligned-sdk/abi/AlignedLayerServiceManager.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"__avsDirectory","type":"address","internalType":"contract IAVSDirectory"},{"name":"__rewardsCoordinator","type":"address","internalType":"contract IRewardsCoordinator"},{"name":"__registryCoordinator","type":"address","internalType":"contract IRegistryCoordinator"},{"name":"__stakeRegistry","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"avsDirectory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchesState","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"taskCreatedBlock","type":"uint32","internalType":"uint32"},{"name":"responded","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"blsApkRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBLSApkRegistry"}],"stateMutability":"view"},{"type":"function","name":"checkPublicInput","inputs":[{"name":"publicInput","type":"bytes","internalType":"bytes"},{"name":"hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"checkSignatures","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"referenceBlockNumber","type":"uint32","internalType":"uint32"},{"name":"params","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","components":[{"name":"signedStakeForQuorum","type":"uint96[]","internalType":"uint96[]"},{"name":"totalStakeForQuorum","type":"uint96[]","internalType":"uint96[]"}]},{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createAVSRewardsSubmission","inputs":[{"name":"rewardsSubmissions","type":"tuple[]","internalType":"struct IRewardsCoordinator.RewardsSubmission[]","components":[{"name":"strategiesAndMultipliers","type":"tuple[]","internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","components":[{"name":"strategy","type":"address","internalType":"contract IStrategy"},{"name":"multiplier","type":"uint96","internalType":"uint96"}]},{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startTimestamp","type":"uint32","internalType":"uint32"},{"name":"duration","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IDelegationManager"}],"stateMutability":"view"},{"type":"function","name":"depositToBatcher","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deregisterOperatorFromAVS","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getOperatorRestakedStrategies","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRestakeableStrategies","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initialOwner","type":"address","internalType":"address"},{"name":"_rewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperatorToAVS","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"operatorSignature","type":"tuple","internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registryCoordinator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRegistryCoordinator"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"senderAddress","type":"address","internalType":"address"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardsInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setRewardsInitiator","inputs":[{"name":"newRewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaleStakesForbidden","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"view"},{"type":"function","name":"staleStakesForbidden","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trySignatureAndApkVerification","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"apk","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"pairingSuccessful","type":"bool","internalType":"bool"},{"name":"siganatureIsValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateAVSMetadataURI","inputs":[{"name":"_metadataURI","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"},{"name":"senderAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BatchVerified","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BatcherBalanceUpdated","inputs":[{"name":"batcher","type":"address","indexed":true,"internalType":"address"},{"name":"newBalance","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NewBatch","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RewardsInitiatorUpdated","inputs":[{"name":"prevRewardsInitiator","type":"address","indexed":false,"internalType":"address"},{"name":"newRewardsInitiator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaleStakesForbiddenUpdate","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"error","name":"BatchAlreadyResponded","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatchAlreadySubmitted","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatchDoesNotExist","inputs":[{"name":"batchIdentifierHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"BatcherBalanceIsEmpty","inputs":[{"name":"batcher","type":"address","internalType":"address"}]},{"type":"error","name":"BatcherHasNoBalance","inputs":[{"name":"batcher","type":"address","internalType":"address"}]},{"type":"error","name":"InsufficientFunds","inputs":[{"name":"batcher","type":"address","internalType":"address"},{"name":"required","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDepositAmount","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidQuorumThreshold","inputs":[{"name":"signedStake","type":"uint256","internalType":"uint256"},{"name":"requiredStake","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x6101806040523480156200001257600080fd5b50604051620052cb380380620052cb8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051614e4962000482600039600081816105cf015261181001526000818161035b0152611a230152600081816103a701528181611c100152611e0001526000818161040e01528181610f23015281816114cc0152818161167301526118c4015260008181610c3801528181610d9301528181610e2a015281816128bd01528181612a400152612adf015260008181610a5f01528181610aee01528181610b6e015281816122920152818161235e015281816127fb015261299b015260008181612e0d01528181612ec90152612fb50152600081816103d8015281816122e6015281816123ba01526127c00152614e496000f3fe6080604052600436106101c65760003560e01c806370a08231116100f7578063a98fb35511610095578063e481af9d11610064578063e481af9d146105f1578063f2fde38b14610606578063fc299dee14610626578063fce36c7d1461064657600080fd5b8063a98fb35514610527578063b099627e14610547578063b98d0908146105a3578063df5cf723146105bd57600080fd5b806395c6d604116100d157806395c6d604146104a75780639926ee7d146104c7578063a364f4da146104e7578063a5a3fab11461050757600080fd5b806370a0823114610430578063715018a6146104745780638da5cb5b1461048957600080fd5b8063485cc955116101645780635df459461161013e5780635df459461461034957806368304835146103955780636b3aa72e146103c95780636d14a987146103fc57600080fd5b8063485cc955146102e85780634ae07c37146103085780635c0089941461033657600080fd5b806333cfb7b7116101a057806333cfb7b7146102685780633bc28c8c14610295578063416c7e5e146102b55780634223d551146102d557600080fd5b806306045a91146101dc578063171f1d5b146102115780632e1a7d4d1461024857600080fd5b366101d7576101d53334610666565b005b600080fd5b3480156101e857600080fd5b506101fc6101f7366004613f2a565b6106f8565b60405190151581526020015b60405180910390f35b34801561021d57600080fd5b5061023161022c36600461408b565b6107d8565b604080519215158352901515602083015201610208565b34801561025457600080fd5b506101d56102633660046140dc565b610962565b34801561027457600080fd5b506102886102833660046140f5565b610a3a565b6040516102089190614112565b3480156102a157600080fd5b506101d56102b03660046140f5565b610f0d565b3480156102c157600080fd5b506101d56102d036600461416d565b610f21565b6101d56102e33660046140f5565b611058565b3480156102f457600080fd5b506101d561030336600461418a565b611062565b34801561031457600080fd5b50610328610323366004614479565b611177565b604051610208929190614513565b6101d56103443660046145a4565b6120ca565b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610208565b3480156103a157600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037d565b34801561040857600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b5061046661044b3660046140f5565b6001600160a01b0316600090815260ca602052604090205490565b604051908152602001610208565b34801561048057600080fd5b506101d561224e565b34801561049557600080fd5b506033546001600160a01b031661037d565b3480156104b357600080fd5b506101fc6104c23660046145ef565b612262565b3480156104d357600080fd5b506101d56104e236600461463a565b612287565b3480156104f357600080fd5b506101d56105023660046140f5565b612353565b34801561051357600080fd5b506101d56105223660046146e5565b61241a565b34801561053357600080fd5b506101d561054236600461470c565b6127a1565b34801561055357600080fd5b506105876105623660046140dc565b60c96020526000908152604090205463ffffffff811690640100000000900460ff1682565b6040805163ffffffff9093168352901515602083015201610208565b3480156105af57600080fd5b506097546101fc9060ff1681565b3480156105c957600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105fd57600080fd5b506102886127f5565b34801561061257600080fd5b506101d56106213660046140f5565b612bbe565b34801561063257600080fd5b5060655461037d906001600160a01b031681565b34801561065257600080fd5b506101d561066136600461475c565b612c34565b8061068c57604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906106b49084906147e6565b90915550506001600160a01b038216600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a25050565b600080858360405160200161070e9291906147fe565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661074a5760009150506107cc565b600081815260c96020526040902054640100000000900460ff166107725760009150506107cc565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506107c687848389612fec565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061082057610820614819565b60200201518951600160200201518a6020015160006002811061084557610845614819565b60200201518b6020015160016002811061086157610861614819565b602090810291909101518c518d8301516040516108be9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108e1919061482f565b90506109546108fa6108f38884613004565b869061309b565b61090261312f565b61094a61093b85610935604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613004565b6109448c6131ef565b9061309b565b886201d4c061327f565b909890975095505050505050565b33600090815260ca60205260409020548111156109b35733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610683565b33600090815260ca6020526040812080548392906109d2908490614851565b909155505033600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610a36573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190614868565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b599190614881565b90506001600160c01b0381161580610bf357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee91906148aa565b60ff16155b15610c135760408051600080825260208201909252905b50949350505050565b6000610c27826001600160c01b03166134a3565b90506000805b8251811015610cfd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610c7757610c77614819565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190614868565b610ce990836147e6565b915080610cf5816148cd565b915050610c2d565b506000816001600160401b03811115610d1857610d18613e06565b604051908082528060200260200182016040528015610d41578160200160208202803683370190505b5090506000805b8451811015610f00576000858281518110610d6557610d65614819565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190614868565b905060005b81811015610eea576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9c91906148fd565b60000151868681518110610eb257610eb2614819565b6001600160a01b039092166020928302919091019091015284610ed4816148cd565b9550508080610ee2906148cd565b915050610e03565b5050508080610ef8906148cd565b915050610d48565b5090979650505050505050565b610f15613565565b610f1e816135bf565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa3919061493e565b6001600160a01b0316336001600160a01b03161461104f5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610683565b610f1e81613628565b610f1e8134610666565b600054610100900460ff16158080156110825750600054600160ff909116105b8061109c5750303b15801561109c575060005460ff166001145b6110ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610683565b6000805460ff191660011790558015611122576000805461ff0019166101001790555b61112c838361366f565b8015611172576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111d357508260a0015151604051806040016040528060018152602001600081525051145b80156111fa57508260c0015151604051806040016040528060018152602001600081525051145b801561122157508260e0015151604051806040016040528060018152602001600081525051145b61128b5760405162461bcd60e51b81526020600482015260416024820152600080516020614df483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610683565b825151602084015151146113035760405162461bcd60e51b815260206004820152604460248201819052600080516020614df4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610683565b4363ffffffff168463ffffffff16106113725760405162461bcd60e51b815260206004820152603c6024820152600080516020614df483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610683565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561143357611433613e06565b60405190808252806020026020018201604052801561145c578160200160208202803683370190505b5081526020860151516001600160401b0381111561147c5761147c613e06565b6040519080825280602002602001820160405280156114a5578160200160208202803683370190505b508160200181905250600061155160405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906148aa565b6136ec565b905060005b8760200151518110156117ec5761159b8860200151828151811061157c5761157c614819565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106115b1576115b1614819565b602090810291909101015280156116715760208301516115d2600183614851565b815181106115e2576115e2614819565b602002602001015160001c8360200151828151811061160357611603614819565b602002602001015160001c11611671576040805162461bcd60e51b8152602060048201526024810191909152600080516020614df483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610683565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec6351846020015183815181106116b6576116b6614819565b60200260200101518b8b6000015185815181106116d5576116d5614819565b60200260200101516040518463ffffffff1660e01b81526004016117129392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190614881565b6001600160c01b03168360000151828151811061177257611772614819565b6020026020010181815250506117d86108f36117ac848660000151858151811061179e5761179e614819565b60200260200101511661377f565b8a6020015184815181106117c2576117c2614819565b60200260200101516137aa90919063ffffffff16565b9450806117e4816148cd565b915050611556565b50506117f78361388e565b60975490935060ff1660008161180e576000611890565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190614868565b905060005b604051806040016040528060018152602001600081525051811015611f9b578215611a21578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c426040518060400160405280600181526020016000815250858151811061191957611919614819565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190614868565b61198b91906147e6565b11611a215760405162461bcd60e51b81526020600482015260666024820152600080516020614df483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610683565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a7857611a78614819565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a9d57611a9d614819565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1d919061495b565b6001600160401b031916611b408a60400151838151811061157c5761157c614819565b67ffffffffffffffff191614611bdc5760405162461bcd60e51b81526020600482015260616024820152600080516020614df483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610683565b611c0c89604001518281518110611bf557611bf5614819565b60200260200101518761309b90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c6557611c65614819565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c8a57611c8a614819565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190614986565b85602001518281518110611d2057611d20614819565b6001600160601b03909216602092830291909101820152850151805182908110611d4c57611d4c614819565b602002602001015185600001518281518110611d6a57611d6a614819565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f8657611df986600001518281518110611db457611db4614819565b602002602001015160405180604001604052806001815260200160008152508581518110611de457611de4614819565b016020015160f81c60ff161c60019081161490565b15611f74577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e5557611e55614819565b602001015160f81c60f81b60f81c8e89602001518581518110611e7a57611e7a614819565b60200260200101518f60e001518881518110611e9857611e98614819565b60200260200101518781518110611eb157611eb1614819565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f399190614986565b8751805185908110611f4d57611f4d614819565b60200260200101818151611f6191906149a3565b6001600160601b03169052506001909101905b80611f7e816148cd565b915050611d8e565b50508080611f93906148cd565b915050611895565b505050600080611fb58a868a606001518b608001516107d8565b91509150816120265760405162461bcd60e51b81526020600482015260436024820152600080516020614df483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610683565b806120875760405162461bcd60e51b81526020600482015260396024820152600080516020614df483398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610683565b505060008782602001516040516020016120a29291906149cb565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600083336040516020016120df9291906147fe565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561212e57604051630c40bc4360e21b815260048101829052602401610683565b341561218b5733600090815260ca6020526040812080543492906121539084906147e6565b909155505033600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a25b33600090815260ca60205260409020546121ba57604051632059498b60e11b8152336004820152602401610683565b6040805180820182526000602080830182815263ffffffff43818116865287855260c99093529285902084518154925115156401000000000264ffffffffff19909316941693909317179091559151909186917fb6e138aac002b2914d032511acfdde1f6b38615cd3520c18ea5b8a89fd80327a9161223f9133919089908990614a13565b60405180910390a25050505050565b612256613565565b6122606000613929565b565b6000818484604051612275929190614a60565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146122cf5760405162461bcd60e51b815260040161068390614a70565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061231d9085908590600401614b35565b600060405180830381600087803b15801561233757600080fd5b505af115801561234b573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461239b5760405162461bcd60e51b815260040161068390614a70565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156123ff57600080fd5b505af1158015612413573d6000803e3d6000fd5b5050505050565b60005a9050600084846040516020016124349291906147fe565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16612482576040516311cb69a760e11b815260048101829052602401610683565b600081815260c96020526040902054640100000000900460ff16156124bd57604051634e78d7f960e11b815260048101829052602401610683565b6001600160a01b038416600090815260ca60205260409020546124fe5760405163245bc73560e11b81526001600160a01b0385166004820152602401610683565b600081815260c960205260408120805464ff000000001981166401000000001790915561253390839063ffffffff1686611177565b509050604360ff16816020015160008151811061255257612552614819565b60200260200101516125649190614b80565b6001600160601b03166064826000015160008151811061258657612586614819565b60200260200101516001600160601b03166125a19190614baf565b101561263457606481600001516000815181106125c0576125c0614819565b60200260200101516001600160601b03166125db9190614baf565b604360ff1682602001516000815181106125f7576125f7614819565b60200260200101516126099190614b80565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610683565b6040516001600160a01b038616815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a6126848387614851565b61269190620111706147e6565b61269b9190614baf565b6001600160a01b038816600090815260ca6020526040902054909150811115612701576001600160a01b038716600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610683565b6001600160a01b038716600090815260ca602052604081208054839290612729908490614851565b90915550506001600160a01b038716600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612796573d6000803e3d6000fd5b505050505050505050565b6127a9613565565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906123e5908490600401614bce565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287b91906148aa565b60ff1690508061289957505060408051600081526020810190915290565b6000805b8281101561294e57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa15801561290c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129309190614868565b61293a90836147e6565b915080612946816148cd565b91505061289d565b506000816001600160401b0381111561296957612969613e06565b604051908082528060200260200182016040528015612992578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b91906148aa565b60ff16811015612bb457604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab39190614868565b905060005b81811015612b9f576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5191906148fd565b60000151858581518110612b6757612b67614819565b6001600160a01b039092166020928302919091019091015283612b89816148cd565b9450508080612b97906148cd565b915050612ab8565b50508080612bac906148cd565b915050612999565b5090949350505050565b612bc6613565565b6001600160a01b038116612c2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610683565b610f1e81613929565b6065546001600160a01b03163314612cc95760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610683565b60005b81811015612f9d57828282818110612ce657612ce6614819565b9050602002810190612cf89190614be1565b612d099060408101906020016140f5565b6001600160a01b03166323b872dd3330868686818110612d2b57612d2b614819565b9050602002810190612d3d9190614be1565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db89190614c0c565b506000838383818110612dcd57612dcd614819565b9050602002810190612ddf9190614be1565b612df09060408101906020016140f5565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190614868565b9050838383818110612e9657612e96614819565b9050602002810190612ea89190614be1565b612eb99060408101906020016140f5565b6001600160a01b031663095ea7b37f000000000000000000000000000000000000000000000000000000000000000083878787818110612efb57612efb614819565b9050602002810190612f0d9190614be1565b60400135612f1b91906147e6565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a9190614c0c565b505080612f96906148cd565b9050612ccc565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d9061231d9085908590600401614c84565b600083612ffa86858561397b565b1495945050505050565b6040805180820190915260008082526020820152613020613d2c565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561305357613055565bfe5b50806130935760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610683565b505092915050565b60408051808201909152600080825260208201526130b7613d4a565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156130535750806130935760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610683565b613137613d68565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061321f600080516020614db48339815191528661482f565b90505b61322b81613a75565b9093509150600080516020614db4833981519152828309831415613265576040805180820190915290815260208101919091529392505050565b600080516020614db4833981519152600182089050613222565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906132b1613d8d565b60005b60028110156134765760006132ca826006614baf565b90508482600281106132de576132de614819565b602002015151836132f08360006147e6565b600c811061330057613300614819565b602002015284826002811061331757613317614819565b6020020151602001518382600161332e91906147e6565b600c811061333e5761333e614819565b602002015283826002811061335557613355614819565b60200201515151836133688360026147e6565b600c811061337857613378614819565b602002015283826002811061338f5761338f614819565b60200201515160016020020151836133a88360036147e6565b600c81106133b8576133b8614819565b60200201528382600281106133cf576133cf614819565b6020020151602001516000600281106133ea576133ea614819565b6020020151836133fb8360046147e6565b600c811061340b5761340b614819565b602002015283826002811061342257613422614819565b60200201516020015160016002811061343d5761343d614819565b60200201518361344e8360056147e6565b600c811061345e5761345e614819565b6020020152508061346e816148cd565b9150506132b4565b5061347f613dac565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806134b18461377f565b61ffff166001600160401b038111156134cc576134cc613e06565b6040519080825280601f01601f1916602001820160405280156134f6576020820181803683370190505b5090506000805b82518210801561350e575061010081105b15612bb4576001811b935085841615613555578060f81b83838151811061353757613537614819565b60200101906001600160f81b031916908160001a9053508160010191505b61355e816148cd565b90506134fd565b6033546001600160a01b031633146122605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610683565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166136da5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610683565b6136e382613929565b610a36816135bf565b6000806136f884613af7565b9050808360ff166001901b116137765760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610683565b90505b92915050565b6000805b821561377957613794600184614851565b90921691806137a281614d91565b915050613783565b60408051808201909152600080825260208201526102008261ffff16106138065760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610683565b8161ffff166001141561381a575081613779565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061388357600161ffff871660ff83161c8116141561386657613863848461309b565b93505b613870838461309b565b92506201fffe600192831b169101613836565b509195945050505050565b604080518082019091526000808252602082015281511580156138b357506020820151155b156138d1575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614db48339815191528460200151613904919061482f565b61391c90600080516020614db4833981519152614851565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020845161398b919061482f565b15613a125760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610683565b8260205b85518111610c0a57613a2960028561482f565b613a4a57816000528086015160205260406000209150600284049350613a63565b8086015160005281602052604060002091506002840493505b613a6e6020826147e6565b9050613a16565b60008080600080516020614db48339815191526003600080516020614db483398151915286600080516020614db4833981519152888909090890506000613aeb827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614db4833981519152613c84565b91959194509092505050565b600061010082511115613b805760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610683565b8151613b8e57506000919050565b60008083600081518110613ba457613ba4614819565b0160200151600160f89190911c81901b92505b8451811015613c7b57848181518110613bd257613bd2614819565b0160200151600160f89190911c1b9150828211613c675760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610683565b91811791613c74816148cd565b9050613bb7565b50909392505050565b600080613c8f613dac565b613c97613dca565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613053575082613d215760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610683565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613d7b613de8565b8152602001613d88613de8565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613e3e57613e3e613e06565b60405290565b60405161010081016001600160401b0381118282101715613e3e57613e3e613e06565b604051601f8201601f191681016001600160401b0381118282101715613e8f57613e8f613e06565b604052919050565b60006001600160401b03831115613eb057613eb0613e06565b613ec3601f8401601f1916602001613e67565b9050828152838383011115613ed757600080fd5b828260208301376000602084830101529392505050565b600082601f830112613eff57600080fd5b613f0e83833560208501613e97565b9392505050565b6001600160a01b0381168114610f1e57600080fd5b600080600080600080600080610100898b031215613f4757600080fd5b88359750602089013596506040890135955060608901356001600160601b031981168114613f7457600080fd5b94506080890135935060a08901356001600160401b03811115613f9657600080fd5b613fa28b828c01613eee565b93505060c0890135915060e0890135613fba81613f15565b809150509295985092959890939650565b600060408284031215613fdd57600080fd5b613fe5613e1c565b9050813581526020820135602082015292915050565b600082601f83011261400c57600080fd5b614014613e1c565b80604084018581111561402657600080fd5b845b81811015614040578035845260209384019301614028565b509095945050505050565b60006080828403121561405d57600080fd5b614065613e1c565b90506140718383613ffb565b81526140808360408401613ffb565b602082015292915050565b60008060008061012085870312156140a257600080fd5b843593506140b38660208701613fcb565b92506140c2866060870161404b565b91506140d18660e08701613fcb565b905092959194509250565b6000602082840312156140ee57600080fd5b5035919050565b60006020828403121561410757600080fd5b813561377681613f15565b6020808252825182820181905260009190848201906040850190845b818110156141535783516001600160a01b03168352928401929184019160010161412e565b50909695505050505050565b8015158114610f1e57600080fd5b60006020828403121561417f57600080fd5b81356137768161415f565b6000806040838503121561419d57600080fd5b82356141a881613f15565b915060208301356141b881613f15565b809150509250929050565b803563ffffffff8116811461392457600080fd5b60006001600160401b038211156141f0576141f0613e06565b5060051b60200190565b600082601f83011261420b57600080fd5b8135602061422061421b836141d7565b613e67565b82815260059290921b8401810191818101908684111561423f57600080fd5b8286015b8481101561426157614254816141c3565b8352918301918301614243565b509695505050505050565b600082601f83011261427d57600080fd5b8135602061428d61421b836141d7565b82815260069290921b840181019181810190868411156142ac57600080fd5b8286015b84811015614261576142c28882613fcb565b8352918301916040016142b0565b600082601f8301126142e157600080fd5b813560206142f161421b836141d7565b82815260059290921b8401810191818101908684111561431057600080fd5b8286015b848110156142615780356001600160401b038111156143335760008081fd5b6143418986838b01016141fa565b845250918301918301614314565b6000610180828403121561436257600080fd5b61436a613e44565b905081356001600160401b038082111561438357600080fd5b61438f858386016141fa565b835260208401359150808211156143a557600080fd5b6143b18583860161426c565b602084015260408401359150808211156143ca57600080fd5b6143d68583860161426c565b60408401526143e8856060860161404b565b60608401526143fa8560e08601613fcb565b608084015261012084013591508082111561441457600080fd5b614420858386016141fa565b60a084015261014084013591508082111561443a57600080fd5b614446858386016141fa565b60c084015261016084013591508082111561446057600080fd5b5061446d848285016142d0565b60e08301525092915050565b60008060006060848603121561448e57600080fd5b8335925061449e602085016141c3565b915060408401356001600160401b038111156144b957600080fd5b6144c58682870161434f565b9150509250925092565b600081518084526020808501945080840160005b838110156145085781516001600160601b0316875295820195908201906001016144e3565b509495945050505050565b604081526000835160408084015261452e60808401826144cf565b90506020850151603f1984830301606085015261454b82826144cf565b925050508260208301529392505050565b60008083601f84011261456e57600080fd5b5081356001600160401b0381111561458557600080fd5b60208301915083602082850101111561459d57600080fd5b9250929050565b6000806000604084860312156145b957600080fd5b8335925060208401356001600160401b038111156145d657600080fd5b6145e28682870161455c565b9497909650939450505050565b60008060006040848603121561460457600080fd5b83356001600160401b0381111561461a57600080fd5b6146268682870161455c565b909790965060209590950135949350505050565b6000806040838503121561464d57600080fd5b823561465881613f15565b915060208301356001600160401b038082111561467457600080fd5b908401906060828703121561468857600080fd5b6040516060810181811083821117156146a3576146a3613e06565b6040528235828111156146b557600080fd5b6146c188828601613eee565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806000606084860312156146fa57600080fd5b83359250602084013561449e81613f15565b60006020828403121561471e57600080fd5b81356001600160401b0381111561473457600080fd5b8201601f8101841361474557600080fd5b61475484823560208401613e97565b949350505050565b6000806020838503121561476f57600080fd5b82356001600160401b038082111561478657600080fd5b818501915085601f83011261479a57600080fd5b8135818111156147a957600080fd5b8660208260051b85010111156147be57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156147f9576147f96147d0565b500190565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b60008261484c57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015614863576148636147d0565b500390565b60006020828403121561487a57600080fd5b5051919050565b60006020828403121561489357600080fd5b81516001600160c01b038116811461377657600080fd5b6000602082840312156148bc57600080fd5b815160ff8116811461377657600080fd5b60006000198214156148e1576148e16147d0565b5060010190565b6001600160601b0381168114610f1e57600080fd5b60006040828403121561490f57600080fd5b614917613e1c565b825161492281613f15565b81526020830151614932816148e8565b60208201529392505050565b60006020828403121561495057600080fd5b815161377681613f15565b60006020828403121561496d57600080fd5b815167ffffffffffffffff198116811461377657600080fd5b60006020828403121561499857600080fd5b8151613776816148e8565b60006001600160601b03838116908316818110156149c3576149c36147d0565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614a06578151855293820193908201906001016149ea565b5092979650505050505050565b6001600160a01b038516815263ffffffff841660208201526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614b0e57602081850181015186830182015201614af2565b81811115614b20576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614b5f60a0840182614ae8565b90506020840151606084015260408401516080840152809150509392505050565b60006001600160601b0380831681851681830481118215151615614ba657614ba66147d0565b02949350505050565b6000816000190483118215151615614bc957614bc96147d0565b500290565b602081526000613f0e6020830184614ae8565b60008235609e19833603018112614bf757600080fd5b9190910192915050565b803561392481613f15565b600060208284031215614c1e57600080fd5b81516137768161415f565b8183526000602080850194508260005b85811015614508578135614c4c81613f15565b6001600160a01b0316875281830135614c64816148e8565b6001600160601b0316878401526040968701969190910190600101614c39565b60208082528181018390526000906040808401600586901b8501820187855b88811015614d8357878303603f190184528135368b9003609e19018112614cc957600080fd5b8a0160a0813536839003601e19018112614ce257600080fd5b820180356001600160401b03811115614cfa57600080fd5b8060061b3603841315614d0c57600080fd5b828752614d1e838801828c8501614c29565b92505050614d2d888301614c01565b6001600160a01b03168886015281870135878601526060614d4f8184016141c3565b63ffffffff16908601526080614d668382016141c3565b63ffffffff16950194909452509285019290850190600101614ca3565b509098975050505050505050565b600061ffff80831681811415614da957614da96147d0565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212200fb96b59125efc5c549bfb80b80c31363d891b017d33df821fac39ba6da1264e64736f6c634300080c0033","sourceMap":"847:7450:122:-:0;;;1134:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1590:30:80;;;;;1630:42;;;;;1682:44;;;;;1736:32;;;;1360:21:122;1423:14;1451:20;1360:21;1520:15;2276:22:79::1;:20;:22::i;:::-;1894:411:::0;;;;1793:20:73;-1:-1:-1;;;;;1771:42:73;;;-1:-1:-1;;;;;1771:42:73;;;;;1839:20;-1:-1:-1;;;;;1839:34:73;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1823:52:73;;;-1:-1:-1;;;;;1823:52:73;;;;;1902:20;-1:-1:-1;;;;;1902:35:73;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1885:54:73;;;-1:-1:-1;;;;;1885:54:73;;;;;1962:13;;-1:-1:-1;;;;;1962:24:73;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1949:39:73;;;-1:-1:-1;1560:22:122::2;:20;:22::i;:::-;1134:455:::0;;;;847:7450;;5388:279:43;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:43;;2079:2:126;5447:66:43;;;2061:21:126;2118:2;2098:18;;;2091:30;2157:34;2137:18;;;2130:62;-1:-1:-1;;;2208:18:126;;;2201:37;2255:19;;5447:66:43;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:43;5588:15;5573:30;;;;;;5622:28;;2427:36:126;;;5622:28:43;;2415:2:126;2400:18;5622:28:43;;;;;;;5523:138;5388:279::o;14:146:126:-;-1:-1:-1;;;;;104:31:126;;94:42;;84:70;;150:1;147;140:12;84:70;14:146;:::o;165:818::-;366:6;374;382;390;443:3;431:9;422:7;418:23;414:33;411:53;;;460:1;457;450:12;411:53;492:9;486:16;511:46;551:5;511:46;:::i;:::-;626:2;611:18;;605:25;576:5;;-1:-1:-1;639:48:126;605:25;639:48;:::i;:::-;758:2;743:18;;737:25;706:7;;-1:-1:-1;771:48:126;737:25;771:48;:::i;:::-;890:2;875:18;;869:25;838:7;;-1:-1:-1;903:48:126;869:25;903:48;:::i;:::-;165:818;;;;-1:-1:-1;165:818:126;;-1:-1:-1;;165:818:126:o;988:290::-;1082:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:52;;;1151:1;1148;1141:12;1103:52;1183:9;1177:16;1202:46;1242:5;1202:46;:::i;:::-;1267:5;988:290;-1:-1:-1;;;988:290:126:o;2285:184::-;847:7450:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101c65760003560e01c806370a08231116100f7578063a98fb35511610095578063e481af9d11610064578063e481af9d146105f1578063f2fde38b14610606578063fc299dee14610626578063fce36c7d1461064657600080fd5b8063a98fb35514610527578063b099627e14610547578063b98d0908146105a3578063df5cf723146105bd57600080fd5b806395c6d604116100d157806395c6d604146104a75780639926ee7d146104c7578063a364f4da146104e7578063a5a3fab11461050757600080fd5b806370a0823114610430578063715018a6146104745780638da5cb5b1461048957600080fd5b8063485cc955116101645780635df459461161013e5780635df459461461034957806368304835146103955780636b3aa72e146103c95780636d14a987146103fc57600080fd5b8063485cc955146102e85780634ae07c37146103085780635c0089941461033657600080fd5b806333cfb7b7116101a057806333cfb7b7146102685780633bc28c8c14610295578063416c7e5e146102b55780634223d551146102d557600080fd5b806306045a91146101dc578063171f1d5b146102115780632e1a7d4d1461024857600080fd5b366101d7576101d53334610666565b005b600080fd5b3480156101e857600080fd5b506101fc6101f7366004613f2a565b6106f8565b60405190151581526020015b60405180910390f35b34801561021d57600080fd5b5061023161022c36600461408b565b6107d8565b604080519215158352901515602083015201610208565b34801561025457600080fd5b506101d56102633660046140dc565b610962565b34801561027457600080fd5b506102886102833660046140f5565b610a3a565b6040516102089190614112565b3480156102a157600080fd5b506101d56102b03660046140f5565b610f0d565b3480156102c157600080fd5b506101d56102d036600461416d565b610f21565b6101d56102e33660046140f5565b611058565b3480156102f457600080fd5b506101d561030336600461418a565b611062565b34801561031457600080fd5b50610328610323366004614479565b611177565b604051610208929190614513565b6101d56103443660046145a4565b6120ca565b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610208565b3480156103a157600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037d565b34801561040857600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b5061046661044b3660046140f5565b6001600160a01b0316600090815260ca602052604090205490565b604051908152602001610208565b34801561048057600080fd5b506101d561224e565b34801561049557600080fd5b506033546001600160a01b031661037d565b3480156104b357600080fd5b506101fc6104c23660046145ef565b612262565b3480156104d357600080fd5b506101d56104e236600461463a565b612287565b3480156104f357600080fd5b506101d56105023660046140f5565b612353565b34801561051357600080fd5b506101d56105223660046146e5565b61241a565b34801561053357600080fd5b506101d561054236600461470c565b6127a1565b34801561055357600080fd5b506105876105623660046140dc565b60c96020526000908152604090205463ffffffff811690640100000000900460ff1682565b6040805163ffffffff9093168352901515602083015201610208565b3480156105af57600080fd5b506097546101fc9060ff1681565b3480156105c957600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105fd57600080fd5b506102886127f5565b34801561061257600080fd5b506101d56106213660046140f5565b612bbe565b34801561063257600080fd5b5060655461037d906001600160a01b031681565b34801561065257600080fd5b506101d561066136600461475c565b612c34565b8061068c57604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca6020526040812080548392906106b49084906147e6565b90915550506001600160a01b038216600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a25050565b600080858360405160200161070e9291906147fe565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661074a5760009150506107cc565b600081815260c96020526040902054640100000000900460ff166107725760009150506107cc565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506107c687848389612fec565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061082057610820614819565b60200201518951600160200201518a6020015160006002811061084557610845614819565b60200201518b6020015160016002811061086157610861614819565b602090810291909101518c518d8301516040516108be9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108e1919061482f565b90506109546108fa6108f38884613004565b869061309b565b61090261312f565b61094a61093b85610935604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613004565b6109448c6131ef565b9061309b565b886201d4c061327f565b909890975095505050505050565b33600090815260ca60205260409020548111156109b35733600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610683565b33600090815260ca6020526040812080548392906109d2908490614851565b909155505033600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610a36573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190614868565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b599190614881565b90506001600160c01b0381161580610bf357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee91906148aa565b60ff16155b15610c135760408051600080825260208201909252905b50949350505050565b6000610c27826001600160c01b03166134a3565b90506000805b8251811015610cfd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610c7757610c77614819565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190614868565b610ce990836147e6565b915080610cf5816148cd565b915050610c2d565b506000816001600160401b03811115610d1857610d18613e06565b604051908082528060200260200182016040528015610d41578160200160208202803683370190505b5090506000805b8451811015610f00576000858281518110610d6557610d65614819565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190614868565b905060005b81811015610eea576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9c91906148fd565b60000151868681518110610eb257610eb2614819565b6001600160a01b039092166020928302919091019091015284610ed4816148cd565b9550508080610ee2906148cd565b915050610e03565b5050508080610ef8906148cd565b915050610d48565b5090979650505050505050565b610f15613565565b610f1e816135bf565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa3919061493e565b6001600160a01b0316336001600160a01b03161461104f5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610683565b610f1e81613628565b610f1e8134610666565b600054610100900460ff16158080156110825750600054600160ff909116105b8061109c5750303b15801561109c575060005460ff166001145b6110ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610683565b6000805460ff191660011790558015611122576000805461ff0019166101001790555b61112c838361366f565b8015611172576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080518082019091526060808252602082015260008260400151516040518060400160405280600181526020016000815250511480156111d357508260a0015151604051806040016040528060018152602001600081525051145b80156111fa57508260c0015151604051806040016040528060018152602001600081525051145b801561122157508260e0015151604051806040016040528060018152602001600081525051145b61128b5760405162461bcd60e51b81526020600482015260416024820152600080516020614df483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610683565b825151602084015151146113035760405162461bcd60e51b815260206004820152604460248201819052600080516020614df4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610683565b4363ffffffff168463ffffffff16106113725760405162461bcd60e51b815260206004820152603c6024820152600080516020614df483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610683565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b0381111561143357611433613e06565b60405190808252806020026020018201604052801561145c578160200160208202803683370190505b5081526020860151516001600160401b0381111561147c5761147c613e06565b6040519080825280602002602001820160405280156114a5578160200160208202803683370190505b508160200181905250600061155160405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906148aa565b6136ec565b905060005b8760200151518110156117ec5761159b8860200151828151811061157c5761157c614819565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106115b1576115b1614819565b602090810291909101015280156116715760208301516115d2600183614851565b815181106115e2576115e2614819565b602002602001015160001c8360200151828151811061160357611603614819565b602002602001015160001c11611671576040805162461bcd60e51b8152602060048201526024810191909152600080516020614df483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610683565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec6351846020015183815181106116b6576116b6614819565b60200260200101518b8b6000015185815181106116d5576116d5614819565b60200260200101516040518463ffffffff1660e01b81526004016117129392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190614881565b6001600160c01b03168360000151828151811061177257611772614819565b6020026020010181815250506117d86108f36117ac848660000151858151811061179e5761179e614819565b60200260200101511661377f565b8a6020015184815181106117c2576117c2614819565b60200260200101516137aa90919063ffffffff16565b9450806117e4816148cd565b915050611556565b50506117f78361388e565b60975490935060ff1660008161180e576000611890565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190614868565b905060005b604051806040016040528060018152602001600081525051811015611f9b578215611a21578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c426040518060400160405280600181526020016000815250858151811061191957611919614819565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa15801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190614868565b61198b91906147e6565b11611a215760405162461bcd60e51b81526020600482015260666024820152600080516020614df483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610683565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a7857611a78614819565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a9d57611a9d614819565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1d919061495b565b6001600160401b031916611b408a60400151838151811061157c5761157c614819565b67ffffffffffffffff191614611bdc5760405162461bcd60e51b81526020600482015260616024820152600080516020614df483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610683565b611c0c89604001518281518110611bf557611bf5614819565b60200260200101518761309b90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c6557611c65614819565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c8a57611c8a614819565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190614986565b85602001518281518110611d2057611d20614819565b6001600160601b03909216602092830291909101820152850151805182908110611d4c57611d4c614819565b602002602001015185600001518281518110611d6a57611d6a614819565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f8657611df986600001518281518110611db457611db4614819565b602002602001015160405180604001604052806001815260200160008152508581518110611de457611de4614819565b016020015160f81c60ff161c60019081161490565b15611f74577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e5557611e55614819565b602001015160f81c60f81b60f81c8e89602001518581518110611e7a57611e7a614819565b60200260200101518f60e001518881518110611e9857611e98614819565b60200260200101518781518110611eb157611eb1614819565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f399190614986565b8751805185908110611f4d57611f4d614819565b60200260200101818151611f6191906149a3565b6001600160601b03169052506001909101905b80611f7e816148cd565b915050611d8e565b50508080611f93906148cd565b915050611895565b505050600080611fb58a868a606001518b608001516107d8565b91509150816120265760405162461bcd60e51b81526020600482015260436024820152600080516020614df483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610683565b806120875760405162461bcd60e51b81526020600482015260396024820152600080516020614df483398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610683565b505060008782602001516040516020016120a29291906149cb565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600083336040516020016120df9291906147fe565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff161561212e57604051630c40bc4360e21b815260048101829052602401610683565b341561218b5733600090815260ca6020526040812080543492906121539084906147e6565b909155505033600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a25b33600090815260ca60205260409020546121ba57604051632059498b60e11b8152336004820152602401610683565b6040805180820182526000602080830182815263ffffffff43818116865287855260c99093529285902084518154925115156401000000000264ffffffffff19909316941693909317179091559151909186917fb6e138aac002b2914d032511acfdde1f6b38615cd3520c18ea5b8a89fd80327a9161223f9133919089908990614a13565b60405180910390a25050505050565b612256613565565b6122606000613929565b565b6000818484604051612275929190614a60565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146122cf5760405162461bcd60e51b815260040161068390614a70565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061231d9085908590600401614b35565b600060405180830381600087803b15801561233757600080fd5b505af115801561234b573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461239b5760405162461bcd60e51b815260040161068390614a70565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b1580156123ff57600080fd5b505af1158015612413573d6000803e3d6000fd5b5050505050565b60005a9050600084846040516020016124349291906147fe565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16612482576040516311cb69a760e11b815260048101829052602401610683565b600081815260c96020526040902054640100000000900460ff16156124bd57604051634e78d7f960e11b815260048101829052602401610683565b6001600160a01b038416600090815260ca60205260409020546124fe5760405163245bc73560e11b81526001600160a01b0385166004820152602401610683565b600081815260c960205260408120805464ff000000001981166401000000001790915561253390839063ffffffff1686611177565b509050604360ff16816020015160008151811061255257612552614819565b60200260200101516125649190614b80565b6001600160601b03166064826000015160008151811061258657612586614819565b60200260200101516001600160601b03166125a19190614baf565b101561263457606481600001516000815181106125c0576125c0614819565b60200260200101516001600160601b03166125db9190614baf565b604360ff1682602001516000815181106125f7576125f7614819565b60200260200101516126099190614b80565b60405163530f5c4560e11b815260048101929092526001600160601b03166024820152604401610683565b6040516001600160a01b038616815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a6126848387614851565b61269190620111706147e6565b61269b9190614baf565b6001600160a01b038816600090815260ca6020526040902054909150811115612701576001600160a01b038716600081815260ca602052604090819020549051632e2a182f60e11b81526004810192909252602482018390526044820152606401610683565b6001600160a01b038716600090815260ca602052604081208054839290612729908490614851565b90915550506001600160a01b038716600081815260ca6020908152604091829020549151918252600080516020614dd4833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612796573d6000803e3d6000fd5b505050505050505050565b6127a9613565565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906123e5908490600401614bce565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287b91906148aa565b60ff1690508061289957505060408051600081526020810190915290565b6000805b8281101561294e57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa15801561290c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129309190614868565b61293a90836147e6565b915080612946816148cd565b91505061289d565b506000816001600160401b0381111561296957612969613e06565b604051908082528060200260200182016040528015612992578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b91906148aa565b60ff16811015612bb457604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab39190614868565b905060005b81811015612b9f576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5191906148fd565b60000151858581518110612b6757612b67614819565b6001600160a01b039092166020928302919091019091015283612b89816148cd565b9450508080612b97906148cd565b915050612ab8565b50508080612bac906148cd565b915050612999565b5090949350505050565b612bc6613565565b6001600160a01b038116612c2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610683565b610f1e81613929565b6065546001600160a01b03163314612cc95760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a401610683565b60005b81811015612f9d57828282818110612ce657612ce6614819565b9050602002810190612cf89190614be1565b612d099060408101906020016140f5565b6001600160a01b03166323b872dd3330868686818110612d2b57612d2b614819565b9050602002810190612d3d9190614be1565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db89190614c0c565b506000838383818110612dcd57612dcd614819565b9050602002810190612ddf9190614be1565b612df09060408101906020016140f5565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190614868565b9050838383818110612e9657612e96614819565b9050602002810190612ea89190614be1565b612eb99060408101906020016140f5565b6001600160a01b031663095ea7b37f000000000000000000000000000000000000000000000000000000000000000083878787818110612efb57612efb614819565b9050602002810190612f0d9190614be1565b60400135612f1b91906147e6565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a9190614c0c565b505080612f96906148cd565b9050612ccc565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d9061231d9085908590600401614c84565b600083612ffa86858561397b565b1495945050505050565b6040805180820190915260008082526020820152613020613d2c565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561305357613055565bfe5b50806130935760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610683565b505092915050565b60408051808201909152600080825260208201526130b7613d4a565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156130535750806130935760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610683565b613137613d68565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061321f600080516020614db48339815191528661482f565b90505b61322b81613a75565b9093509150600080516020614db4833981519152828309831415613265576040805180820190915290815260208101919091529392505050565b600080516020614db4833981519152600182089050613222565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906132b1613d8d565b60005b60028110156134765760006132ca826006614baf565b90508482600281106132de576132de614819565b602002015151836132f08360006147e6565b600c811061330057613300614819565b602002015284826002811061331757613317614819565b6020020151602001518382600161332e91906147e6565b600c811061333e5761333e614819565b602002015283826002811061335557613355614819565b60200201515151836133688360026147e6565b600c811061337857613378614819565b602002015283826002811061338f5761338f614819565b60200201515160016020020151836133a88360036147e6565b600c81106133b8576133b8614819565b60200201528382600281106133cf576133cf614819565b6020020151602001516000600281106133ea576133ea614819565b6020020151836133fb8360046147e6565b600c811061340b5761340b614819565b602002015283826002811061342257613422614819565b60200201516020015160016002811061343d5761343d614819565b60200201518361344e8360056147e6565b600c811061345e5761345e614819565b6020020152508061346e816148cd565b9150506132b4565b5061347f613dac565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806134b18461377f565b61ffff166001600160401b038111156134cc576134cc613e06565b6040519080825280601f01601f1916602001820160405280156134f6576020820181803683370190505b5090506000805b82518210801561350e575061010081105b15612bb4576001811b935085841615613555578060f81b83838151811061353757613537614819565b60200101906001600160f81b031916908160001a9053508160010191505b61355e816148cd565b90506134fd565b6033546001600160a01b031633146122605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610683565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166136da5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610683565b6136e382613929565b610a36816135bf565b6000806136f884613af7565b9050808360ff166001901b116137765760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610683565b90505b92915050565b6000805b821561377957613794600184614851565b90921691806137a281614d91565b915050613783565b60408051808201909152600080825260208201526102008261ffff16106138065760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610683565b8161ffff166001141561381a575081613779565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061388357600161ffff871660ff83161c8116141561386657613863848461309b565b93505b613870838461309b565b92506201fffe600192831b169101613836565b509195945050505050565b604080518082019091526000808252602082015281511580156138b357506020820151155b156138d1575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614db48339815191528460200151613904919061482f565b61391c90600080516020614db4833981519152614851565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020845161398b919061482f565b15613a125760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610683565b8260205b85518111610c0a57613a2960028561482f565b613a4a57816000528086015160205260406000209150600284049350613a63565b8086015160005281602052604060002091506002840493505b613a6e6020826147e6565b9050613a16565b60008080600080516020614db48339815191526003600080516020614db483398151915286600080516020614db4833981519152888909090890506000613aeb827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614db4833981519152613c84565b91959194509092505050565b600061010082511115613b805760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610683565b8151613b8e57506000919050565b60008083600081518110613ba457613ba4614819565b0160200151600160f89190911c81901b92505b8451811015613c7b57848181518110613bd257613bd2614819565b0160200151600160f89190911c1b9150828211613c675760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610683565b91811791613c74816148cd565b9050613bb7565b50909392505050565b600080613c8f613dac565b613c97613dca565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613053575082613d215760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610683565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613d7b613de8565b8152602001613d88613de8565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613e3e57613e3e613e06565b60405290565b60405161010081016001600160401b0381118282101715613e3e57613e3e613e06565b604051601f8201601f191681016001600160401b0381118282101715613e8f57613e8f613e06565b604052919050565b60006001600160401b03831115613eb057613eb0613e06565b613ec3601f8401601f1916602001613e67565b9050828152838383011115613ed757600080fd5b828260208301376000602084830101529392505050565b600082601f830112613eff57600080fd5b613f0e83833560208501613e97565b9392505050565b6001600160a01b0381168114610f1e57600080fd5b600080600080600080600080610100898b031215613f4757600080fd5b88359750602089013596506040890135955060608901356001600160601b031981168114613f7457600080fd5b94506080890135935060a08901356001600160401b03811115613f9657600080fd5b613fa28b828c01613eee565b93505060c0890135915060e0890135613fba81613f15565b809150509295985092959890939650565b600060408284031215613fdd57600080fd5b613fe5613e1c565b9050813581526020820135602082015292915050565b600082601f83011261400c57600080fd5b614014613e1c565b80604084018581111561402657600080fd5b845b81811015614040578035845260209384019301614028565b509095945050505050565b60006080828403121561405d57600080fd5b614065613e1c565b90506140718383613ffb565b81526140808360408401613ffb565b602082015292915050565b60008060008061012085870312156140a257600080fd5b843593506140b38660208701613fcb565b92506140c2866060870161404b565b91506140d18660e08701613fcb565b905092959194509250565b6000602082840312156140ee57600080fd5b5035919050565b60006020828403121561410757600080fd5b813561377681613f15565b6020808252825182820181905260009190848201906040850190845b818110156141535783516001600160a01b03168352928401929184019160010161412e565b50909695505050505050565b8015158114610f1e57600080fd5b60006020828403121561417f57600080fd5b81356137768161415f565b6000806040838503121561419d57600080fd5b82356141a881613f15565b915060208301356141b881613f15565b809150509250929050565b803563ffffffff8116811461392457600080fd5b60006001600160401b038211156141f0576141f0613e06565b5060051b60200190565b600082601f83011261420b57600080fd5b8135602061422061421b836141d7565b613e67565b82815260059290921b8401810191818101908684111561423f57600080fd5b8286015b8481101561426157614254816141c3565b8352918301918301614243565b509695505050505050565b600082601f83011261427d57600080fd5b8135602061428d61421b836141d7565b82815260069290921b840181019181810190868411156142ac57600080fd5b8286015b84811015614261576142c28882613fcb565b8352918301916040016142b0565b600082601f8301126142e157600080fd5b813560206142f161421b836141d7565b82815260059290921b8401810191818101908684111561431057600080fd5b8286015b848110156142615780356001600160401b038111156143335760008081fd5b6143418986838b01016141fa565b845250918301918301614314565b6000610180828403121561436257600080fd5b61436a613e44565b905081356001600160401b038082111561438357600080fd5b61438f858386016141fa565b835260208401359150808211156143a557600080fd5b6143b18583860161426c565b602084015260408401359150808211156143ca57600080fd5b6143d68583860161426c565b60408401526143e8856060860161404b565b60608401526143fa8560e08601613fcb565b608084015261012084013591508082111561441457600080fd5b614420858386016141fa565b60a084015261014084013591508082111561443a57600080fd5b614446858386016141fa565b60c084015261016084013591508082111561446057600080fd5b5061446d848285016142d0565b60e08301525092915050565b60008060006060848603121561448e57600080fd5b8335925061449e602085016141c3565b915060408401356001600160401b038111156144b957600080fd5b6144c58682870161434f565b9150509250925092565b600081518084526020808501945080840160005b838110156145085781516001600160601b0316875295820195908201906001016144e3565b509495945050505050565b604081526000835160408084015261452e60808401826144cf565b90506020850151603f1984830301606085015261454b82826144cf565b925050508260208301529392505050565b60008083601f84011261456e57600080fd5b5081356001600160401b0381111561458557600080fd5b60208301915083602082850101111561459d57600080fd5b9250929050565b6000806000604084860312156145b957600080fd5b8335925060208401356001600160401b038111156145d657600080fd5b6145e28682870161455c565b9497909650939450505050565b60008060006040848603121561460457600080fd5b83356001600160401b0381111561461a57600080fd5b6146268682870161455c565b909790965060209590950135949350505050565b6000806040838503121561464d57600080fd5b823561465881613f15565b915060208301356001600160401b038082111561467457600080fd5b908401906060828703121561468857600080fd5b6040516060810181811083821117156146a3576146a3613e06565b6040528235828111156146b557600080fd5b6146c188828601613eee565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806000606084860312156146fa57600080fd5b83359250602084013561449e81613f15565b60006020828403121561471e57600080fd5b81356001600160401b0381111561473457600080fd5b8201601f8101841361474557600080fd5b61475484823560208401613e97565b949350505050565b6000806020838503121561476f57600080fd5b82356001600160401b038082111561478657600080fd5b818501915085601f83011261479a57600080fd5b8135818111156147a957600080fd5b8660208260051b85010111156147be57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156147f9576147f96147d0565b500190565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b60008261484c57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015614863576148636147d0565b500390565b60006020828403121561487a57600080fd5b5051919050565b60006020828403121561489357600080fd5b81516001600160c01b038116811461377657600080fd5b6000602082840312156148bc57600080fd5b815160ff8116811461377657600080fd5b60006000198214156148e1576148e16147d0565b5060010190565b6001600160601b0381168114610f1e57600080fd5b60006040828403121561490f57600080fd5b614917613e1c565b825161492281613f15565b81526020830151614932816148e8565b60208201529392505050565b60006020828403121561495057600080fd5b815161377681613f15565b60006020828403121561496d57600080fd5b815167ffffffffffffffff198116811461377657600080fd5b60006020828403121561499857600080fd5b8151613776816148e8565b60006001600160601b03838116908316818110156149c3576149c36147d0565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614a06578151855293820193908201906001016149ea565b5092979650505050505050565b6001600160a01b038516815263ffffffff841660208201526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614b0e57602081850181015186830182015201614af2565b81811115614b20576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614b5f60a0840182614ae8565b90506020840151606084015260408401516080840152809150509392505050565b60006001600160601b0380831681851681830481118215151615614ba657614ba66147d0565b02949350505050565b6000816000190483118215151615614bc957614bc96147d0565b500290565b602081526000613f0e6020830184614ae8565b60008235609e19833603018112614bf757600080fd5b9190910192915050565b803561392481613f15565b600060208284031215614c1e57600080fd5b81516137768161415f565b8183526000602080850194508260005b85811015614508578135614c4c81613f15565b6001600160a01b0316875281830135614c64816148e8565b6001600160601b0316878401526040968701969190910190600101614c39565b60208082528181018390526000906040808401600586901b8501820187855b88811015614d8357878303603f190184528135368b9003609e19018112614cc957600080fd5b8a0160a0813536839003601e19018112614ce257600080fd5b820180356001600160401b03811115614cfa57600080fd5b8060061b3603841315614d0c57600080fd5b828752614d1e838801828c8501614c29565b92505050614d2d888301614c01565b6001600160a01b03168886015281870135878601526060614d4f8184016141c3565b63ffffffff16908601526080614d668382016141c3565b63ffffffff16950194909452509285019290850190600101614ca3565b509098975050505050505050565b600061ffff80831681811415614da957614da96147d0565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212200fb96b59125efc5c549bfb80b80c31363d891b017d33df821fac39ba6da1264e64736f6c634300080c0033","sourceMap":"847:7450:122:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:40;8089:10;8101:9;8071:17;:40::i;:::-;847:7450;;;;;5915:1144;;;;;;;;;;-1:-1:-1;5915:1144:122;;;;;:::i;:::-;;:::i;:::-;;;3138:14:126;;3131:22;3113:41;;3101:2;3086:18;5915:1144:122;;;;;;;;14547:1081:73;;;;;;;;;;-1:-1:-1;14547:1081:73;;;;;:::i;:::-;;:::i;:::-;;;;4988:14:126;;4981:22;4963:41;;5047:14;;5040:22;5035:2;5020:18;;5013:50;4936:18;14547:1081:73;4801:268:126;7065:437:122;;;;;;;;;;-1:-1:-1;7065:437:122;;;;;:::i;:::-;;:::i;7697:1470:79:-;;;;;;;;;;-1:-1:-1;7697:1470:79;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5599:135::-;;;;;;;;;;-1:-1:-1;5599:135:79;;;;;:::i;:::-;;:::i;2232:123:73:-;;;;;;;;;;-1:-1:-1;2232:123:73;;;;;:::i;:::-;;:::i;7629:114:122:-;;;;;;:::i;:::-;;:::i;1691:187::-;;;;;;;;;;-1:-1:-1;1691:187:122;;;;;:::i;:::-;;:::i;4387:9678:73:-;;;;;;;;;;-1:-1:-1;4387:9678:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1884:1074:122:-;;;;;;:::i;:::-;;:::i;1183:47:73:-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13942:32:126;;;13924:51;;13912:2;13897:18;1183:47:73;13753:228:126;1132:45:73;;;;;;;;;;;;;;;9235:111:79;;;;;;;;;;-1:-1:-1;9325:13:79;9235:111;;1069:57:73;;;;;;;;;;;;;;;7508:115:122;;;;;;;;;;-1:-1:-1;7508:115:122;;;;;:::i;:::-;-1:-1:-1;;;;;7591:25:122;7565:7;7591:25;;;:16;:25;;;;;;;7508:115;;;;14810:25:126;;;14798:2;14783:18;7508:115:122;14664:177:126;2071:101:39;;;;;;;;;;;;;:::i;1441:85::-;;;;;;;;;;-1:-1:-1;1513:6:39;;-1:-1:-1;;;;;1513:6:39;1441:85;;8124:171:122;;;;;;;;;;-1:-1:-1;8124:171:122;;;;;:::i;:::-;;:::i;4797:260:79:-;;;;;;;;;;-1:-1:-1;4797:260:79;;;;;:::i;:::-;;:::i;5262:158::-;;;;;;;;;;-1:-1:-1;5262:158:79;;;;;:::i;:::-;;:::i;2964:2945:122:-;;;;;;;;;;-1:-1:-1;2964:2945:122;;;;;:::i;:::-;;:::i;2721:148:79:-;;;;;;;;;;-1:-1:-1;2721:148:79;;;;;:::i;:::-;;:::i;245:50:123:-;;;;;;;;;;-1:-1:-1;245:50:123;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17889:10:126;17877:23;;;17859:42;;17944:14;;17937:22;17932:2;17917:18;;17910:50;17832:18;245:50:123;17693:273:126;1421:32:73;;;;;;;;;;-1:-1:-1;1421:32:73;;;;;;;;1236:46;;;;;;;;;;;;;;;6262:951:79;;;;;;;;;;;;;:::i;2321:198:39:-;;;;;;;;;;-1:-1:-1;2321:198:39;;;;;:::i;:::-;;:::i;1212:31:80:-;;;;;;;;;;-1:-1:-1;1212:31:80;;;;-1:-1:-1;;;;;1212:31:80;;;3631:872:79;;;;;;;;;;-1:-1:-1;3631:872:79;;;;;:::i;:::-;;:::i;7749:279:122:-;7832:11;7828:77;;7866:28;;-1:-1:-1;;;7866:28:122;;;;;14810:25:126;;;14783:18;;7866:28:122;;;;;;;;7828:77;-1:-1:-1;;;;;7914:25:122;;;;;;:16;:25;;;;;:35;;7943:6;;7914:25;:35;;7943:6;;7914:35;:::i;:::-;;;;-1:-1:-1;;;;;;;7964:57:122;;7995:25;;;;:16;:25;;;;;;;;;;7964:57;;14810:25:126;;;-1:-1:-1;;;;;;;;;;;7964:57:122;14783:18:126;7964:57:122;;;;;;;7749:279;;:::o;5915:1144::-;6269:4;6285:27;6355:15;6372:13;6338:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6338:48:122;;;;;;;;;6315:81;;6338:48;6315:81;;;;6411:33;;;;:12;:33;;;;;:50;6315:81;;-1:-1:-1;6411:50:122;;6407:98;;6489:5;6482:12;;;;;6407:98;6520:33;;;;:12;:33;;;;;:43;;;;;;6515:87;;6586:5;6579:12;;;;;6515:87;6632:163;;;;;;19640:19:126;;;19675:12;;;19668:28;;;19712:12;;;19705:28;;;-1:-1:-1;;;;;;19763:44:126;;19749:12;;;19742:66;6612:17:122;;19824:13:126;;6632:163:122;;;-1:-1:-1;;6632:163:122;;;;;;;;;6827:15;;6632:163;6827:15;;;6632:163;;-1:-1:-1;6872:180:122;6918:11;6947:19;6827:15;7012:26;6872:28;:180::i;:::-;6853:199;;;;;5915:1144;;;;;;;;;;;:::o;14547:1081:73:-;14745:22;14769;14878:13;2037:77:94;14980:7:73;15009:3;:5;;;15036:3;:5;;;15063;:7;;;15071:1;15063:10;;;;;;;:::i;:::-;;;;;15095:7;;15103:1;15095:10;;;;15127:5;:7;;;15135:1;15127:10;;;;;;;:::i;:::-;;;;;15159:5;:7;;;15167:1;15159:10;;;;;;;:::i;:::-;;;;;;;;;;15191:7;;15220;;;;14942:303;;;;;;;;;;;20333:19:126;;;20377:2;20368:12;;20361:28;;;;20414:2;20405:12;;20398:28;;;;20451:2;20442:12;;20435:28;;;;20488:3;20479:13;;20472:29;;;;20526:3;20517:13;;20510:29;20564:3;20555:13;;20548:29;20602:3;20593:13;;20586:29;20640:3;20631:13;;20624:29;20678:3;20669:13;;19980:708;14942:303:73;;;;;;;;;;;;;14915:344;;;;;;14894:375;;:394;;;;:::i;:::-;14878:410;-1:-1:-1;15371:250:73;15402:33;15413:21;:3;14878:410;15413:14;:21::i;:::-;15402:5;;:10;:33::i;:::-;15449:22;:20;:22::i;:::-;15485:67;15514:37;15545:5;15514:19;-1:-1:-1;;;;;;;;;;;;;;;;;2392:13:94;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99;15514:19:73;:30;;:37::i;:::-;15485:23;15500:7;15485:14;:23::i;:::-;:28;;:67::i;:::-;15566:5;1055:7;15371:17;:250::i;:::-;15330:291;;;;-1:-1:-1;14547:1081:73;-1:-1:-1;;;;;;14547:1081:73:o;7065:437:122:-;7139:10;7122:28;;;;:16;:28;;;;;;:37;-1:-1:-1;7118:204:122;;;7217:10;7269:28;;;;:16;:28;;;;;;;;7182:129;;-1:-1:-1;;;7182:129:122;;;;;21241:51:126;;;;21308:18;;;21301:34;;;21351:18;;;21344:34;21214:18;;7182:129:122;21039:345:126;7118:204:122;7349:10;7332:28;;;;:16;:28;;;;;:38;;7364:6;;7332:28;:38;;7364:6;;7332:38;:::i;:::-;;;;-1:-1:-1;;7407:10:122;7419:28;;;;:16;:28;;;;;;;;;;7385:63;;14810:25:126;;;-1:-1:-1;;;;;;;;;;;7385:63:122;14783:18:126;7385:63:122;;;;;;;7459:36;;7467:10;;7459:36;;;;;7488:6;;7459:36;;;;7488:6;7467:10;7459:36;;;;;;;;;;;;;;;;;;;;;7065:437;:::o;7697:1470:79:-;7854:44;;-1:-1:-1;;;7854:44:79;;-1:-1:-1;;;;;13942:32:126;;;7854:44:79;;;13924:51:126;7801:16:79;;7833:18;;7854:20;:34;;;;13897:18:126;;7854:44:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7933:55;;-1:-1:-1;;;7933:55:79;;;;;14810:25:126;;;7833:65:79;;-1:-1:-1;7908:22:79;;-1:-1:-1;;;;;7933:20:79;:43;;;;14783:18:126;;7933:55:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7908:80;-1:-1:-1;;;;;;8003:19:79;;;;:62;;;8026:20;-1:-1:-1;;;;;8026:32:79;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;8003:62;7999:116;;;8088:16;;;8102:1;8088:16;;;;;;;;;;;-1:-1:-1;8081:23:79;7697:1470;-1:-1:-1;;;;7697:1470:79:o;7999:116::-;8196:36;8235:46;8266:14;-1:-1:-1;;;;;8235:46:79;:30;:46::i;:::-;8196:85;-1:-1:-1;8291:21:79;;8322:173;8346:23;:30;8342:1;:34;8322:173;;;8414:14;-1:-1:-1;;;;;8414:35:79;;8456:23;8480:1;8456:26;;;;;;;;:::i;:::-;;;;;8414:70;;-1:-1:-1;;;;;;8414:70:79;;;;;;;8456:26;;;;;8414:70;;;22605:36:126;22578:18;;8414:70:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8397:87;;;;:::i;:::-;;-1:-1:-1;8378:3:79;;;;:::i;:::-;;;;8322:173;;;;8566:35;8618:13;-1:-1:-1;;;;;8604:28:79;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:28:79;;8566:66;;8642:13;8674:9;8669:457;8693:23;:30;8689:1;:34;8669:457;;;8744:12;8765:23;8789:1;8765:26;;;;;;;;:::i;:::-;;;;;8837:43;;-1:-1:-1;;;8837:43:79;;8765:26;;;;;8837:43;;;22605:36:126;;;8765:26:79;-1:-1:-1;;;;;;;;8837:14:79;:35;;;;22578:18:126;;8837:43:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:74;;8899:9;8894:222;8918:20;8914:1;:24;8894:222;;;9019:47;;-1:-1:-1;;;9019:47:79;;23181:4:126;23169:17;;9019:47:79;;;23151:36:126;23203:18;;;23196:34;;;9019:14:79;-1:-1:-1;;;;;9019:36:79;;;;23124:18:126;;9019:47:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;8963:18;8982:5;8963:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8963:113:79;;;:25;;;;;;;;;;;:113;9094:7;;;;:::i;:::-;;;;8940:3;;;;;:::i;:::-;;;;8894:222;;;;8730:396;;8725:3;;;;;:::i;:::-;;;;8669:457;;;-1:-1:-1;9142:18:79;;7697:1470;-1:-1:-1;;;;;;;7697:1470:79:o;5599:135::-;1334:13:39;:11;:13::i;:::-;5686:41:79::1;5707:19;5686:20;:41::i;:::-;5599:135:::0;:::o;2232:123:73:-;1537:19;-1:-1:-1;;;;;1537:25:73;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1523:41:73;:10;-1:-1:-1;;;;;1523:41:73;;1502:180;;;;-1:-1:-1;;;1502:180:73;;24339:2:126;1502:180:73;;;24321:21:126;24378:2;24358:18;;;24351:30;24417:34;24397:18;;;24390:62;24488:34;24468:18;;;24461:62;24560:30;24539:19;;;24532:59;24608:19;;1502:180:73;24137:496:126;1502:180:73;2317:31:::1;2342:5;2317:24;:31::i;7629:114:122:-:0;7699:37;7717:7;7726:9;7699:17;:37::i;1691:187::-;3111:19:43;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:43;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:43;1476:19:47;:23;;;3219:66:43;;-1:-1:-1;3268:12:43;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:43;;24840:2:126;3157:201:43;;;24822:21:126;24879:2;24859:18;;;24852:30;24918:34;24898:18;;;24891:62;-1:-1:-1;;;24969:18:126;;;24962:44;25023:19;;3157:201:43;24638:410:126;3157:201:43;3368:12;:16;;-1:-1:-1;;3368:16:43;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:43;;;;;3394:65;1812:59:122::1;1838:13;1853:17;1812:25;:59::i;:::-;3483:14:43::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;3513:21:43;;;3553:14;;-1:-1:-1;22605:36:126;;3553:14:43;;22593:2:126;22578:18;3553:14:43;;;;;;;3479:99;3101:483;1691:187:122;;:::o;4387:9678:73:-;-1:-1:-1;;;;;;;;;;;;;;;;;4578:7:73;4651:6;:17;;;:24;4619:21;;;;;;;;;;;;;;;;;:28;:56;4618:142;;;;;4729:6;:23;;;:30;4697:21;;;;;;;;;;;;;;;;;:28;:62;4618:142;:227;;;;;4813:6;:24;;;:31;4781:21;;;;;;;;;;;;;;;;;:28;:63;4618:227;:316;;;;;4898:6;:28;;;:35;4866:21;;;;;;;;;;;;;;;;;:28;:67;4618:316;4597:428;;;;-1:-1:-1;;;4597:428:73;;25454:2:126;4597:428:73;;;25436:21:126;25493:2;25473:18;;;25466:30;-1:-1:-1;;;;;;;;;;;25512:18:126;;;25505:62;25603:34;25583:18;;;25576:62;-1:-1:-1;;;25654:19:126;;;25647:32;25696:19;;4597:428:73;25252:469:126;4597:428:73;5107:35;;:42;5057:23;;;;:30;:92;5036:207;;;;-1:-1:-1;;;5036:207:73;;25928:2:126;5036:207:73;;;25910:21:126;25967:2;25947:18;;;25940:30;;;-1:-1:-1;;;;;;;;;;;25986:18:126;;;25979:62;26077:34;26057:18;;;26050:62;-1:-1:-1;;;26128:19:126;;;26121:35;26173:19;;5036:207:73;25726:472:126;5036:207:73;5305:12;5275:43;;:20;:43;;;5254:150;;;;-1:-1:-1;;;5254:150:73;;26405:2:126;5254:150:73;;;26387:21:126;26444:2;26424:18;;;26417:30;-1:-1:-1;;;;;;;;;;;26463:18:126;;;26456:62;26554:30;26534:18;;;26527:58;26602:19;;5254:150:73;26203:424:126;5254:150:73;5921:19;;;;;;;;-1:-1:-1;5921:19:73;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;6277:21:73;;;;;;;;;;;;;;;;;;6264:42;;;;;;;;;;;5921:19;;6264:42;6277:21;6264:42;;;;5921:19;6264:42;;;;;-1:-1:-1;;6230:31:73;;;;:76;;;;6364:21;;;;;;;;;;;;-1:-1:-1;6364:21:73;;;;;6351:42;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6316:77:73;;-1:-1:-1;;;;;;;;;;;;;;;;;6499:6:73;:23;;;:30;-1:-1:-1;;;;;6472:67:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6472:67:73;-1:-1:-1;6445:94:73;;6589:23;;;;:30;-1:-1:-1;;;;;6575:45:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:45:73;;6549:10;:23;;:71;;;;6799:27;6829:141;6884:21;;;;;;;;;;;;;;;;;6923:19;-1:-1:-1;;;;;6923:31:73;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6829:37;:141::i;:::-;6799:171;;6990:9;6985:1728;7009:6;:23;;;:30;7005:1;:34;6985:1728;;;7301:82;:6;:44;;;7346:1;7301:47;;;;;;;;:::i;:::-;;;;;;;10534:9:94;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;7301:82:73;7272:10;:23;;;7296:1;7272:26;;;;;;;;:::i;:::-;;;;;;;;;;:111;7405:6;;7401:305;;7542:23;;;;7566:5;7570:1;7566;:5;:::i;:::-;7542:30;;;;;;;;:::i;:::-;;;;;;;7534:39;;7476:10;:23;;;7500:1;7476:26;;;;;;;;:::i;:::-;;;;;;;7468:35;;:105;7435:252;;;;;-1:-1:-1;;;7435:252:73;;26834:2:126;7435:252:73;;;26816:21:126;26853:18;;;26846:30;;;;-1:-1:-1;;;;;;;;;;;26892:18:126;;;26885:62;26983:34;26963:18;;;26956:62;27035:19;;7435:252:73;26632:428:126;7435:252:73;7846:19;-1:-1:-1;;;;;7846:76:73;;7961:10;:23;;;7985:1;7961:26;;;;;;;;:::i;:::-;;;;;;;8026:20;8079:6;:35;;;8115:1;8079:38;;;;;;;;:::i;:::-;;;;;;;7846:294;;;;;;;;;;;;;;;;27264:25:126;;;27308:10;27354:15;;;27349:2;27334:18;;27327:43;27406:15;27401:2;27386:18;;27379:43;27252:2;27237:18;;27065:363;7846:294:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7816:324:73;:10;:24;;;7841:1;7816:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8431:267;8461:219;8529:129;8613:19;8583:10;:24;;;8608:1;8583:27;;;;;;;;:::i;:::-;;;;;;;:49;8529:24;:129::i;:::-;8461:6;:23;;;8485:1;8461:26;;;;;;;;:::i;:::-;;;;;;;:42;;:219;;;;:::i;8431:267::-;8425:273;-1:-1:-1;7041:3:73;;;;:::i;:::-;;;;6985:1728;;;;6631:2092;8996:12;:3;:10;:12::i;:::-;9340:20;;8990:18;;-1:-1:-1;9340:20:73;;9311:26;9340:20;9406:97;;9502:1;9406:97;;;9446:10;-1:-1:-1;;;;;9446:35:73;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9374:129;;9523:9;9518:3499;9542:21;;;;;;;;;;;;;;;;;:28;9538:1;:32;9518:3499;;;9754:21;9750:486;;;10045:20;9832:233;;9993:21;9832:19;-1:-1:-1;;;;;9832:43:73;;9911:21;;;;;;;;;;;;;;;;;9933:1;9911:24;;;;;;;;:::i;:::-;;;;;9832:130;;-1:-1:-1;;;;;;9832:130:73;;;;;;;9911:24;;;;;9832:130;;;22605:36:126;22578:18;;9832:130:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:182;;;;:::i;:::-;:233;9799:418;;;;-1:-1:-1;;;9799:418:73;;27635:2:126;9799:418:73;;;27617:21:126;27674:3;27654:18;;;27647:31;-1:-1:-1;;;;;;;;;;;27694:18:126;;;27687:62;27785:34;27765:18;;;27758:62;27857:34;27836:19;;;27829:63;-1:-1:-1;;;27908:19:126;;;27901:37;27955:19;;9799:418:73;27433:547:126;9799:418:73;10504:14;-1:-1:-1;;;;;10504:46:73;;10601:21;;;;;;;;;;;;;;;;;10623:1;10601:24;;;;;;;;:::i;:::-;;;;;;;;;10595:31;;10669:20;10726:6;:23;;;10750:1;10726:26;;;;;;;;:::i;:::-;;;;;;;;;;;10504:275;;-1:-1:-1;;;;;;10504:275:73;;;;;;;28210:4:126;28198:17;;;10504:275:73;;;28180:36:126;10504:275:73;28281:15:126;;;28261:18;;;28254:43;28333:15;28313:18;;;28306:43;28153:18;;10504:275:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10433:346:73;;10441:34;:6;:17;;;10459:1;10441:20;;;;;;;;:::i;:34::-;-1:-1:-1;;10433:346:73;;10404:514;;;;-1:-1:-1;;;10404:514:73;;28861:2:126;10404:514:73;;;28843:21:126;28900:2;28880:18;;;28873:30;-1:-1:-1;;;;;;;;;;;28919:18:126;;;28912:62;29010:34;28990:18;;;28983:62;29082:34;29061:19;;;29054:63;-1:-1:-1;;;29133:19:126;;;29126:32;29175:19;;10404:514:73;28659:541:126;10404:514:73;10942:30;10951:6;:17;;;10969:1;10951:20;;;;;;;;:::i;:::-;;;;;;;10942:3;:8;;:30;;;;:::i;:::-;10936:36;;11126:13;-1:-1:-1;;;;;11126:70:73;;11243:21;;;;;;;;;;;;;;;;;11265:1;11243:24;;;;;;;;:::i;:::-;;;;;;;;;11237:31;;11307:20;11360:6;:24;;;11385:1;11360:27;;;;;;;;:::i;:::-;;;;;;;;;;;11126:284;;-1:-1:-1;;;;;;11126:284:73;;;;;;;28210:4:126;28198:17;;;11126:284:73;;;28180:36:126;11126:284:73;28281:15:126;;;28261:18;;;28254:43;28333:15;28313:18;;;28306:43;28153:18;;11126:284:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11089:11;:31;;;11121:1;11089:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11089:321:73;;;:34;;;;;;;;;;:321;11466:52;;;:55;;11519:1;;11466:55;;;;;;:::i;:::-;;;;;;;11428:11;:32;;;11461:1;11428:35;;;;;;;;:::i;:::-;;;;;;:93;-1:-1:-1;;;;;11428:93:73;;;-1:-1:-1;;;;;11428:93:73;;;;;11608:31;11891:9;11886:1117;11910:6;:23;;;:30;11906:1;:34;11886:1117;;;12107:161;12154:10;:24;;;12179:1;12154:27;;;;;;;;:::i;:::-;;;;;;;12217:21;;;;;;;;;;;;;;;;;12239:1;12217:24;;;;;;;;:::i;:::-;;;;;;;7387:13:95;;;7404:1;7386:19;;;7380:26;;7292:121;12107:161:73;12078:907;;;12356:13;-1:-1:-1;;;;;12356:72:73;;12483:21;;;;;;;;;;;;;;;;;12505:1;12483:24;;;;;;;;:::i;:::-;;;;;;;;;12477:31;;12555:20;12621:10;:23;;;12645:1;12621:26;;;;;;;;:::i;:::-;;;;;;;12688:6;:28;;;12717:1;12688:31;;;;;;;;:::i;:::-;;;;;;;12757:23;12688:126;;;;;;;;:::i;:::-;;;;;;;;;;;12356:489;;-1:-1:-1;;;;;;12356:489:73;;;;;;;29713:4:126;29701:17;;;12356:489:73;;;29683:36:126;12356:489:73;29784:15:126;;;29764:18;;;29757:43;29816:18;;;29809:34;;;;29879:15;29859:18;;;29852:43;29655:19;;12356:489:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12317:32;;:35;;12350:1;;12317:35;;;;;;:::i;:::-;;;;;;:528;;;;;;;:::i;:::-;-1:-1:-1;;;;;12317:528:73;;;-1:-1:-1;12911:25:73;;;;;12078:907;11942:3;;;;:::i;:::-;;;;11886:1117;;;;9577:3440;9572:3;;;;;:::i;:::-;;;;9518:3499;;;;9297:3730;;13104:22;13144:21;13182:170;13234:7;13263:3;13288:6;:12;;;13322:6;:12;;;13182:30;:170::i;:::-;13086:266;;;;13391:17;13366:143;;;;-1:-1:-1;;;13366:143:73;;30350:2:126;13366:143:73;;;30332:21:126;30389:2;30369:18;;;30362:30;-1:-1:-1;;;;;;;;;;;30408:18:126;;;30401:62;30499:34;30479:18;;;30472:62;-1:-1:-1;;;30550:19:126;;;30543:34;30594:19;;13366:143:73;30148:471:126;13366:143:73;13548:16;13523:132;;;;-1:-1:-1;;;13523:132:73;;30826:2:126;13523:132:73;;;30808:21:126;30865:2;30845:18;;;30838:30;-1:-1:-1;;;;;;;;;;;30884:18:126;;;30877:62;30975:27;30955:18;;;30948:55;31020:19;;13523:132:73;30624:421:126;13523:132:73;13036:630;;13740:27;13810:20;13832:10;:23;;;13793:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;13793:63:73;;;;;;13770:96;;13793:63;13770:96;;;;14025:11;;13770:96;;-1:-1:-1;4387:9678:73;;-1:-1:-1;;;;;;;4387:9678:73:o;1884:1074:122:-;2015:27;2085:15;2102:10;2068:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2068:45:122;;;;;;;;;2045:78;;2068:45;2045:78;;;;2138:33;;;;:12;:33;;;;;:50;2045:78;;-1:-1:-1;2138:50:122;;:55;2134:135;;2216:42;;-1:-1:-1;;;2216:42:122;;;;;14810:25:126;;;14783:18;;2216:42:122;14664:177:126;2134:135:122;2283:9;:13;2279:213;;2329:10;2312:28;;;;:16;:28;;;;;:41;;2344:9;;2312:28;:41;;2344:9;;2312:41;:::i;:::-;;;;-1:-1:-1;;2411:10:122;2439:28;;;;:16;:28;;;;;;;;;;2372:109;;14810:25:126;;;-1:-1:-1;;;;;;;;;;;2372:109:122;14783:18:126;2372:109:122;;;;;;;2279:213;2523:10;2506:28;;;;:16;:28;;;;;;2502:104;;2562:33;;-1:-1:-1;;;2562:33:122;;2584:10;2562:33;;;13924:51:126;13897:18;;2562:33:122;13753:228:126;2502:104:122;-1:-1:-1;;;;;;;;;;;;;;;;2655:50:122;2692:12;2655:50;;;;;2754:33;;;:12;:33;;;;;;;:46;;;;;;;;;;-1:-1:-1;;2754:46:122;;;;;;;;;;;;;2816:135;;-1:-1:-1;;2838:15:122;;2816:135;;;;2867:10;;2692:12;2925:16;;;;2816:135;:::i;:::-;;;;;;;;2005:953;;1884:1074;;;:::o;2071:101:39:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;8124:171:122:-;8235:4;8284;8268:11;;8258:22;;;;;;;:::i;:::-;;;;;;;;:30;8251:37;;8124:171;;;;;:::o;4797:260:79:-;1358:10;-1:-1:-1;;;;;1380:20:79;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:79;;;;;;;:::i;:::-;4986:64:::1;::::0;-1:-1:-1;;;4986:64:79;;-1:-1:-1;;;;;4986:13:79::1;:35;::::0;::::1;::::0;:64:::1;::::0;5022:8;;5032:17;;4986:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4797:260:::0;;:::o;5262:158::-;1358:10;-1:-1:-1;;;;;1380:20:79;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:79;;;;;;;:::i;:::-;5364:49:::1;::::0;-1:-1:-1;;;5364:49:79;;-1:-1:-1;;;;;13942:32:126;;;5364:49:79::1;::::0;::::1;13924:51:126::0;5364:13:79::1;:39;::::0;::::1;::::0;13897:18:126;;5364:49:79::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5262:158:::0;:::o;2964:2945:122:-;3240:22;3265:9;3240:34;;3285:27;3355:15;3372:13;3338:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3338:48:122;;;;;;;;;3315:81;;3338:48;3315:81;;;;3637:33;;;;:12;:33;;;;;:50;3315:81;;-1:-1:-1;3637:50:122;;3633:131;;3715:38;;-1:-1:-1;;;3715:38:122;;;;;14810:25:126;;;14783:18;;3715:38:122;14664:177:126;3633:131:122;3826:33;;;;:12;:33;;;;;:43;;;;;;3822:123;;;3892:42;;-1:-1:-1;;;3892:42:122;;;;;14810:25:126;;;14783:18;;3892:42:122;14664:177:126;3822:123:122;-1:-1:-1;;;;;3959:31:122;;;;;;:16;:31;;;;;;3955:108;;4018:34;;-1:-1:-1;;;4018:34:122;;-1:-1:-1;;;;;13942:32:126;;4018:34:122;;;13924:51:126;13897:18;;4018:34:122;13753:228:126;3955:108:122;4073:33;;;;:12;:33;;;;;:50;;-1:-1:-1;;4073:50:122;;;;;;;4307:163;;4086:19;;4369:50;;4433:27;4307:15;:163::i;:::-;4258:212;;;1125:2;4663:86;;:17;:37;;;4701:1;4663:40;;;;;;;;:::i;:::-;;;;;;;:86;;;;:::i;:::-;-1:-1:-1;;;;;4583:166:122;1062:3;4583:17;:38;;;4622:1;4583:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4583:65:122;;;;;:::i;:::-;:166;4566:473;;;1062:3;4821:17;:38;;;4860:1;4821:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4821:85:122;;;;;:::i;:::-;1125:2;4924:90;;:17;:37;;;4962:1;4924:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;4781:247;;-1:-1:-1;;;4781:247:122;;;;;34781:25:126;;;;-1:-1:-1;;;;;34842:39:126;34822:18;;;34815:67;34754:18;;4781:247:122;34608:280:126;4566:473:122;5054:45;;-1:-1:-1;;;;;13942:32:126;;13924:51;;5068:15:122;;5054:45;;13912:2:126;13897:18;5054:45:122;;;;;;;5247:20;5270:9;5247:32;-1:-1:-1;5393:14:122;5452:11;5411:29;5247:32;5411:14;:29;:::i;:::-;:37;;5443:5;5411:37;:::i;:::-;5410:53;;;;:::i;:::-;-1:-1:-1;;;;;5478:31:122;;;;;;:16;:31;;;;;;5393:70;;-1:-1:-1;5478:40:122;-1:-1:-1;5474:213:122;;;-1:-1:-1;;;;;5631:31:122;;;;;;:16;:31;;;;;;;;5541:135;;-1:-1:-1;;;5541:135:122;;;;;21241:51:126;;;;21308:18;;;21301:34;;;21351:18;;;21344:34;21214:18;;5541:135:122;21039:345:126;5474:213:122;-1:-1:-1;;;;;5697:31:122;;;;;;:16;:31;;;;;:41;;5732:6;;5697:31;:41;;5732:6;;5697:41;:::i;:::-;;;;-1:-1:-1;;;;;;;5753:103:122;;5815:31;;;;:16;:31;;;;;;;;;;5753:103;;14810:25:126;;;-1:-1:-1;;;;;;;;;;;5753:103:122;14783:18:126;5753:103:122;;;;;;;5866:36;;5874:10;;5866:36;;;;;5895:6;;5866:36;;;;5895:6;5874:10;5866:36;;;;;;;;;;;;;;;;;;;;;3230:2679;;;;;2964:2945;;;:::o;2721:148:79:-;1334:13:39;:11;:13::i;:::-;2814:48:79::1;::::0;-1:-1:-1;;;2814:48:79;;-1:-1:-1;;;;;2814:13:79::1;:34;::::0;::::1;::::0;:48:::1;::::0;2849:12;;2814:48:::1;;;:::i;6262:951::-:0;6321:16;6349:19;6371:20;-1:-1:-1;;;;;6371:32:79;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6349:56;;;-1:-1:-1;6420:16:79;6416:70;;-1:-1:-1;;6459:16:79;;;6473:1;6459:16;;;;;;;;;6262:951::o;6416:70::-;6496:21;;6527:129;6551:11;6547:1;:15;6527:129;;;6600:45;;-1:-1:-1;;;6600:45:79;;22635:4:126;22623:17;;6600:45:79;;;22605:36:126;6600:14:79;-1:-1:-1;;;;;6600:35:79;;;;22578:18:126;;6600:45:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6583:62;;;;:::i;:::-;;-1:-1:-1;6564:3:79;;;;:::i;:::-;;;;6527:129;;;;6666:35;6718:13;-1:-1:-1;;;;;6704:28:79;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6704:28:79;;6666:66;;6742:13;6774:9;6769:403;6793:20;-1:-1:-1;;;;;6793:32:79;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6789:38;;:1;:38;6769:403;;;6879:45;;-1:-1:-1;;;6879:45:79;;22635:4:126;22623:17;;6879:45:79;;;22605:36:126;6848:28:79;;6879:14;-1:-1:-1;;;;;6879:35:79;;;;22578:18:126;;6879:45:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6848:76;;6943:9;6938:224;6962:20;6958:1;:24;6938:224;;;7063:49;;-1:-1:-1;;;7063:49:79;;23181:4:126;23169:17;;7063:49:79;;;23151:36:126;23203:18;;;23196:34;;;7063:14:79;-1:-1:-1;;;;;7063:36:79;;;;23124:18:126;;7063:49:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;7007:18;7026:5;7007:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:115:79;;;:25;;;;;;;;;;;:115;7140:7;;;;:::i;:::-;;;;6984:3;;;;;:::i;:::-;;;;6938:224;;;;6834:338;6829:3;;;;;:::i;:::-;;;;6769:403;;;-1:-1:-1;7188:18:79;;6262:951;-1:-1:-1;;;;6262:951:79:o;2321:198:39:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:39;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:39;;35319:2:126;2401:73:39::1;::::0;::::1;35301:21:126::0;35358:2;35338:18;;;35331:30;35397:34;35377:18;;;35370:62;-1:-1:-1;;;35448:18:126;;;35441:36;35494:19;;2401:73:39::1;35117:402:126::0;2401:73:39::1;2484:28;2503:8;2484:18;:28::i;3631:872:79:-:0;1684:16;;-1:-1:-1;;;;;1684:16:79;1670:10;:30;1649:153;;;;-1:-1:-1;;;1649:153:79;;35726:2:126;1649:153:79;;;35708:21:126;35765:2;35745:18;;;35738:30;35804:34;35784:18;;;35777:62;35875:34;35855:18;;;35848:62;-1:-1:-1;;;35926:19:126;;;35919:43;35979:19;;1649:153:79;35524:480:126;1649:153:79;3815:9:::1;3810:610;3830:29:::0;;::::1;3810:610;;;4029:18;;4048:1;4029:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4029:40:79::1;;4070:10;4090:4;4097:18;;4116:1;4097:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;4029:97:::0;;-1:-1:-1;;;;;;4029:97:79::1;::::0;;;;;;-1:-1:-1;;;;;37022:15:126;;;4029:97:79::1;::::0;::::1;37004:34:126::0;37074:15;;;;37054:18;;;37047:43;4097:28:79::1;;37106:18:126::0;;;37099:34;36939:18;;4029:97:79::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4140:17;4176:18;;4195:1;4176:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;:82;::::0;-1:-1:-1;;;4176:82:79;;4222:4:::1;4176:82;::::0;::::1;37606:34:126::0;-1:-1:-1;;;;;4237:19:79::1;37676:15:126::0;;37656:18;;;37649:43;4176:37:79;;;::::1;::::0;::::1;::::0;37541:18:126;;4176:82:79::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4140:118;;4272:18;;4291:1;4272:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4272:35:79::1;;4333:19;4386:9;4355:18;;4374:1;4355:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;:40;;;;:::i;:::-;4272:137;::::0;-1:-1:-1;;;;;;4272:137:79::1;::::0;;;;;;-1:-1:-1;;;;;37895:32:126;;;4272:137:79::1;::::0;::::1;37877:51:126::0;37944:18;;;37937:34;37850:18;;4272:137:79::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3866:554;3861:3;;;;:::i;:::-;;;3810:610;;;-1:-1:-1::0;4430:66:79::1;::::0;-1:-1:-1;;;4430:66:79;;-1:-1:-1;;;;;4430:19:79::1;:46;::::0;::::1;::::0;:66:::1;::::0;4477:18;;;;4430:66:::1;;;:::i;1240:240:27:-:0;1395:4;1469;1418:47;1446:5;1453:4;1459:5;1418:27;:47::i;:::-;:55;;1240:240;-1:-1:-1;;;;;1240:240:27:o;7084:580:94:-;-1:-1:-1;;;;;;;;;;;;;;;;;7184:23:94;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:94;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:94;7557:48;;;;7530:75;;7557:48;7582:9;7530:75;;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:94;;41131:2:126;7624:33:94;;;41113:21:126;41170:2;41150:18;;;41143:30;-1:-1:-1;;;41189:18:126;;;41182:43;41242:18;;7624:33:94;40929:337:126;7624:33:94;7174:490;;7084:580;;;;:::o;4823:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4926:23:94;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:94;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:94;5330:48;;;;5303:75;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:94;;41473:2:126;5398:33:94;;;41455:21:126;41512:2;41492:18;;;41485:30;-1:-1:-1;;;41531:18:126;;;41524:43;41584:18;;5398:33:94;41271:337:126;4070:128:94;4119:14;;:::i;:::-;-1:-1:-1;4152:39:94;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;11044:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11123:12:94;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:94;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:94;-1:-1:-1;;;;;;;;;;;;11336:1:94;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:94:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:94;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:94;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:94;;-1:-1:-1;;;;;;;;;;9189:1112:94:o;5465:1257:95:-;5532:12;5650:15;5728:23;5764:20;5777:6;5764:12;:20::i;:::-;5754:31;;-1:-1:-1;;;;;5754:31:95;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5754:31:95;;5728:57;;5841:18;6093:9;6088:601;6122:10;:17;6109:10;:30;6108:45;;;;;6149:3;6145:1;:7;6108:45;6088:601;;;6252:1;:6;;;-1:-1:-1;6339:16:95;;;:21;6335:344;;6524:1;6511:16;;6486:10;6497;6486:22;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;6486:41:95;;;;;;;;;6650:12;;;;;6335:344;6155:3;;;:::i;:::-;;;6088:601;;1599:130:39;1513:6;;-1:-1:-1;;;;;1513:6:39;929:10:48;1662:23:39;1654:68;;;;-1:-1:-1;;;1654:68:39;;41815:2:126;1654:68:39;;;41797:21:126;;;41834:18;;;41827:30;41893:34;41873:18;;;41866:62;41945:18;;1654:68:39;41613:356:126;5740:200:79;5847:16;;5823:62;;;-1:-1:-1;;;;;5847:16:79;;;37606:34:126;;37676:15;;;37671:2;37656:18;;37649:43;5823:62:79;;37541:18:126;5823:62:79;;;;;;;5895:16;:38;;-1:-1:-1;;;;;;5895:38:79;-1:-1:-1;;;;;5895:38:79;;;;;;;;;;5740:200::o;15634:148:73:-;15699:20;:28;;-1:-1:-1;;15699:28:73;;;;;;;;;;15742:33;;3113:41:126;;;15742:33:73;;3101:2:126;3086:18;15742:33:73;;;;;;;15634:148;:::o;2311:238:79:-;4910:13:43;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:43;;42176:2:126;4902:69:43;;;42158:21:126;42215:2;42195:18;;;42188:30;42254:34;42234:18;;;42227:62;-1:-1:-1;;;42305:18:126;;;42298:41;42356:19;;4902:69:43;41974:407:126;4902:69:43;2461:32:79::1;2480:12;2461:18;:32::i;:::-;2503:39;2524:17;2503:20;:39::i;3308:360:95:-:0;3419:7;3438:14;3455:44;3481:17;3455:25;:44::i;:::-;3438:61;;3541:6;3524:13;3519:18;;:1;:18;;3518:29;3510:127;;;;-1:-1:-1;;;3510:127:95;;42588:2:126;3510:127:95;;;42570:21:126;42627:2;42607:18;;;42600:30;42666:34;42646:18;;;42639:62;42737:33;42717:18;;;42710:61;42788:19;;3510:127:95;42386:427:126;3510:127:95;3655:6;-1:-1:-1;3308:360:95;;;;;:::o;6797:406::-;6853:6;;6897:209;6904:5;;6897:209;;6931:5;6935:1;6931;:5;:::i;:::-;6925:12;;;;7020:7;;;;:::i;:::-;;;;6897:209;;5698:1197:94;-1:-1:-1;;;;;;;;;;;;;;;;;5824:4:94;5820:1;:8;;;5812:37;;;;-1:-1:-1;;;5812:37:94;;43222:2:126;5812:37:94;;;43204:21:126;43261:2;43241:18;;;43234:30;-1:-1:-1;;;43280:18:126;;;43273:46;43336:18;;5812:37:94;43020:340:126;5812:37:94;5893:1;:6;;5898:1;5893:6;5890:44;;;-1:-1:-1;5922:1:94;5915:8;;5890:44;6016:19;;;;;;;;;5989:24;6016:19;;;;;;;;;6145:1;;6208;;6337:481;6348:1;6343:6;;:1;:6;;;6337:481;;6493:1;6483:6;;;;;;;6482:12;;:17;6478:84;;;6529:14;6534:3;6539;6529:4;:14::i;:::-;6523:20;;6478:84;6644:14;6649:3;6654;6644:4;:14::i;:::-;6638:20;-1:-1:-1;6765:7:94;6771:1;6765:7;;;;;6790:3;6337:481;;;-1:-1:-1;6885:3:94;;5698:1197;-1:-1:-1;;;;;5698:1197:94:o;4461:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4600:3:94;;:8;:20;;;;-1:-1:-1;4612:3:94;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:94;;;;;;;;;-1:-1:-1;4643:13:94;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:94;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:94;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:94:o;4596:154::-;4461:295;;;:::o;2673:187:39:-;2765:6;;;-1:-1:-1;;;;;2781:17:39;;;-1:-1:-1;;;;;;2781:17:39;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1997:1172:27:-;2136:7;2191:2;2176:5;:12;:17;;;;:::i;:::-;:22;2155:144;;;;-1:-1:-1;;;2155:144:27;;43567:2:126;2155:144:27;;;43549:21:126;43606:2;43586:18;;;43579:30;43645:34;43625:18;;;43618:62;43716:34;43696:18;;;43689:62;-1:-1:-1;;;43767:19:126;;;43760:42;43819:19;;2155:144:27;43365:479:126;2155:144:27;2332:4;2363:2;2346:788;2372:5;:12;2367:1;:17;2346:788;;2413:9;2421:1;2413:5;:9;:::i;:::-;2409:715;;2572:12;2566:4;2559:26;2636:1;2629:5;2625:13;2619:20;2613:4;2606:34;2693:4;2687;2677:21;2661:37;;2739:1;2732:5;2728:13;2719:22;;2409:715;;;2940:1;2933:5;2929:13;2923:20;2917:4;2910:34;2978:12;2972:4;2965:26;3044:4;3038;3028:21;3012:37;;3090:1;3083:5;3079:13;3070:22;;2409:715;2386:7;2391:2;2386:7;;:::i;:::-;;;2346:788;;11616:433:94;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:94;-1:-1:-1;;;;;;;;;;;11785:1:94;-1:-1:-1;;;;;;;;;;;11769:1:94;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:94;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:94;;-1:-1:-1;;;11616:433:94:o;1188:1693:95:-;1278:7;571:3;1409:17;:24;:49;;1401:142;;;;-1:-1:-1;;;1401:142:95;;44051:2:126;1401:142:95;;;44033:21:126;44090:2;44070:18;;;44063:30;;;44129:34;44109:18;;;44102:62;44200:34;44180:18;;;44173:62;-1:-1:-1;;;44251:19:126;;;44244:35;44296:19;;1401:142:95;43849:472:126;1401:142:95;1619:24;;1615:77;;-1:-1:-1;1679:1:95;;1188:1693;-1:-1:-1;1188:1693:95:o;1615:77::-;1770:14;1873:15;2180:17;2198:1;2180:20;;;;;;;;:::i;:::-;;;;;2169:1;2180:20;;;;;2169:32;;;;-1:-1:-1;2284:568:95;2308:17;:24;2304:1;:28;2284:568;;;2480:17;2498:1;2480:20;;;;;;;;:::i;:::-;;;;;2469:1;2480:20;;;;;2469:32;;-1:-1:-1;2665:16:95;;;2657:100;;;;-1:-1:-1;;;2657:100:95;;44528:2:126;2657:100:95;;;44510:21:126;44567:2;44547:18;;;44540:30;44606:34;44586:18;;;44579:62;44677:34;44657:18;;;44650:62;-1:-1:-1;;;44728:19:126;;;44721:38;44776:19;;2657:100:95;44326:475:126;2657:100:95;2824:16;;;;2334:3;;;:::i;:::-;;;2284:568;;;-1:-1:-1;2868:6:95;;1188:1693;-1:-1:-1;;;1188:1693:95:o;12055:874:94:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:94;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:94;;45008:2:126;12850:46:94;;;44990:21:126;45047:2;45027:18;;;45020:30;45086:28;45066:18;;;45059:56;45132:18;;12850:46:94;44806:350:126;12850:46:94;-1:-1:-1;12913:9:94;;;-1:-1:-1;;;;;12055:874:94:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:126:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:257;218:4;212:11;;;250:17;;-1:-1:-1;;;;;282:34:126;;318:22;;;279:62;276:88;;;344:18;;:::i;:::-;380:4;373:24;146:257;:::o;664:255::-;736:2;730:9;778:6;766:19;;-1:-1:-1;;;;;800:34:126;;836:22;;;797:62;794:88;;;862:18;;:::i;924:275::-;995:2;989:9;1060:2;1041:13;;-1:-1:-1;;1037:27:126;1025:40;;-1:-1:-1;;;;;1080:34:126;;1116:22;;;1077:62;1074:88;;;1142:18;;:::i;:::-;1178:2;1171:22;924:275;;-1:-1:-1;924:275:126:o;1204:406::-;1268:5;-1:-1:-1;;;;;1294:6:126;1291:30;1288:56;;;1324:18;;:::i;:::-;1362:57;1407:2;1386:15;;-1:-1:-1;;1382:29:126;1413:4;1378:40;1362:57;:::i;:::-;1353:66;;1442:6;1435:5;1428:21;1482:3;1473:6;1468:3;1464:16;1461:25;1458:45;;;1499:1;1496;1489:12;1458:45;1548:6;1543:3;1536:4;1529:5;1525:16;1512:43;1602:1;1595:4;1586:6;1579:5;1575:18;1571:29;1564:40;1204:406;;;;;:::o;1615:220::-;1657:5;1710:3;1703:4;1695:6;1691:17;1687:27;1677:55;;1728:1;1725;1718:12;1677:55;1750:79;1825:3;1816:6;1803:20;1796:4;1788:6;1784:17;1750:79;:::i;:::-;1741:88;1615:220;-1:-1:-1;;;1615:220:126:o;1840:131::-;-1:-1:-1;;;;;1915:31:126;;1905:42;;1895:70;;1961:1;1958;1951:12;1976:992;2107:6;2115;2123;2131;2139;2147;2155;2163;2216:3;2204:9;2195:7;2191:23;2187:33;2184:53;;;2233:1;2230;2223:12;2184:53;2256:23;;;-1:-1:-1;2326:2:126;2311:18;;2298:32;;-1:-1:-1;2377:2:126;2362:18;;2349:32;;-1:-1:-1;2431:2:126;2416:18;;2403:32;-1:-1:-1;;;;;;2464:43:126;;2454:54;;2444:82;;2522:1;2519;2512:12;2444:82;2545:5;-1:-1:-1;2597:3:126;2582:19;;2569:33;;-1:-1:-1;2653:3:126;2638:19;;2625:33;-1:-1:-1;;;;;2670:30:126;;2667:50;;;2713:1;2710;2703:12;2667:50;2736:49;2777:7;2768:6;2757:9;2753:22;2736:49;:::i;:::-;2726:59;;;2832:3;2821:9;2817:19;2804:33;2794:43;;2889:3;2878:9;2874:19;2861:33;2903;2928:7;2903:33;:::i;:::-;2955:7;2945:17;;;1976:992;;;;;;;;;;;:::o;3165:282::-;3219:5;3267:4;3255:9;3250:3;3246:19;3242:30;3239:50;;;3285:1;3282;3275:12;3239:50;3307:22;;:::i;:::-;3298:31;;3365:9;3352:23;3345:5;3338:38;3436:2;3425:9;3421:18;3408:32;3403:2;3396:5;3392:14;3385:56;3165:282;;;;:::o;3452:484::-;3502:5;3555:3;3548:4;3540:6;3536:17;3532:27;3522:55;;3573:1;3570;3563:12;3522:55;3597:22;;:::i;:::-;3641:3;3679:2;3671:6;3667:15;3705:3;3697:6;3694:15;3691:35;;;3722:1;3719;3712:12;3691:35;3746:6;3761:146;3777:6;3772:3;3769:15;3761:146;;;3845:17;;3833:30;;3892:4;3883:14;;;;3794;3761:146;;;-1:-1:-1;3925:5:126;;3452:484;-1:-1:-1;;;;;3452:484:126:o;3941:320::-;3995:5;4043:4;4031:9;4026:3;4022:19;4018:30;4015:50;;;4061:1;4058;4051:12;4015:50;4083:22;;:::i;:::-;4074:31;;4128:40;4164:3;4153:9;4128:40;:::i;:::-;4121:5;4114:55;4203:51;4250:3;4243:4;4232:9;4228:20;4203:51;:::i;:::-;4196:4;4189:5;4185:16;4178:77;3941:320;;;;:::o;4266:530::-;4430:6;4438;4446;4454;4507:3;4495:9;4486:7;4482:23;4478:33;4475:53;;;4524:1;4521;4514:12;4475:53;4560:9;4547:23;4537:33;;4589:54;4635:7;4630:2;4619:9;4615:18;4589:54;:::i;:::-;4579:64;;4662:54;4708:7;4703:2;4692:9;4688:18;4662:54;:::i;:::-;4652:64;;4735:55;4782:7;4776:3;4765:9;4761:19;4735:55;:::i;:::-;4725:65;;4266:530;;;;;;;:::o;5074:180::-;5133:6;5186:2;5174:9;5165:7;5161:23;5157:32;5154:52;;;5202:1;5199;5192:12;5154:52;-1:-1:-1;5225:23:126;;5074:180;-1:-1:-1;5074:180:126:o;5259:247::-;5318:6;5371:2;5359:9;5350:7;5346:23;5342:32;5339:52;;;5387:1;5384;5377:12;5339:52;5426:9;5413:23;5445:31;5470:5;5445:31;:::i;5511:658::-;5682:2;5734:21;;;5804:13;;5707:18;;;5826:22;;;5653:4;;5682:2;5905:15;;;;5879:2;5864:18;;;5653:4;5948:195;5962:6;5959:1;5956:13;5948:195;;;6027:13;;-1:-1:-1;;;;;6023:39:126;6011:52;;6118:15;;;;6083:12;;;;6059:1;5977:9;5948:195;;;-1:-1:-1;6160:3:126;;5511:658;-1:-1:-1;;;;;;5511:658:126:o;6174:118::-;6260:5;6253:13;6246:21;6239:5;6236:32;6226:60;;6282:1;6279;6272:12;6297:241;6353:6;6406:2;6394:9;6385:7;6381:23;6377:32;6374:52;;;6422:1;6419;6412:12;6374:52;6461:9;6448:23;6480:28;6502:5;6480:28;:::i;6543:388::-;6611:6;6619;6672:2;6660:9;6651:7;6647:23;6643:32;6640:52;;;6688:1;6685;6678:12;6640:52;6727:9;6714:23;6746:31;6771:5;6746:31;:::i;:::-;6796:5;-1:-1:-1;6853:2:126;6838:18;;6825:32;6866:33;6825:32;6866:33;:::i;:::-;6918:7;6908:17;;;6543:388;;;;;:::o;6936:163::-;7003:20;;7063:10;7052:22;;7042:33;;7032:61;;7089:1;7086;7079:12;7104:182;7163:4;-1:-1:-1;;;;;7188:6:126;7185:30;7182:56;;;7218:18;;:::i;:::-;-1:-1:-1;7263:1:126;7259:14;7275:4;7255:25;;7104:182::o;7291:665::-;7344:5;7397:3;7390:4;7382:6;7378:17;7374:27;7364:55;;7415:1;7412;7405:12;7364:55;7451:6;7438:20;7477:4;7501:59;7517:42;7556:2;7517:42;:::i;:::-;7501:59;:::i;:::-;7594:15;;;7680:1;7676:10;;;;7664:23;;7660:32;;;7625:12;;;;7704:15;;;7701:35;;;7732:1;7729;7722:12;7701:35;7768:2;7760:6;7756:15;7780:147;7796:6;7791:3;7788:15;7780:147;;;7862:22;7880:3;7862:22;:::i;:::-;7850:35;;7905:12;;;;7813;;7780:147;;;-1:-1:-1;7945:5:126;7291:665;-1:-1:-1;;;;;;7291:665:126:o;7961:688::-;8022:5;8075:3;8068:4;8060:6;8056:17;8052:27;8042:55;;8093:1;8090;8083:12;8042:55;8129:6;8116:20;8155:4;8179:59;8195:42;8234:2;8195:42;:::i;8179:59::-;8272:15;;;8358:1;8354:10;;;;8342:23;;8338:32;;;8303:12;;;;8382:15;;;8379:35;;;8410:1;8407;8400:12;8379:35;8446:2;8438:6;8434:15;8458:162;8474:6;8469:3;8466:15;8458:162;;;8542:35;8573:3;8568;8542:35;:::i;:::-;8530:48;;8598:12;;;;8500:4;8491:14;8458:162;;8654:907;8717:5;8770:3;8763:4;8755:6;8751:17;8747:27;8737:55;;8788:1;8785;8778:12;8737:55;8824:6;8811:20;8850:4;8874:59;8890:42;8929:2;8890:42;:::i;8874:59::-;8967:15;;;9053:1;9049:10;;;;9037:23;;9033:32;;;8998:12;;;;9077:15;;;9074:35;;;9105:1;9102;9095:12;9074:35;9141:2;9133:6;9129:15;9153:379;9169:6;9164:3;9161:15;9153:379;;;9255:3;9242:17;-1:-1:-1;;;;;9278:11:126;9275:35;9272:125;;;9351:1;9380:2;9376;9369:14;9272:125;9422:67;9485:3;9480:2;9466:11;9458:6;9454:24;9450:33;9422:67;:::i;:::-;9410:80;;-1:-1:-1;9510:12:126;;;;9186;;9153:379;;9566:1566;9640:5;9688:6;9676:9;9671:3;9667:19;9663:32;9660:52;;;9708:1;9705;9698:12;9660:52;9730:22;;:::i;:::-;9721:31;;9788:9;9775:23;-1:-1:-1;;;;;9858:2:126;9850:6;9847:14;9844:34;;;9874:1;9871;9864:12;9844:34;9901:56;9953:3;9944:6;9933:9;9929:22;9901:56;:::i;:::-;9894:5;9887:71;10011:2;10000:9;9996:18;9983:32;9967:48;;10040:2;10030:8;10027:16;10024:36;;;10056:1;10053;10046:12;10024:36;10092:66;10154:3;10143:8;10132:9;10128:24;10092:66;:::i;:::-;10087:2;10080:5;10076:14;10069:90;10212:2;10201:9;10197:18;10184:32;10168:48;;10241:2;10231:8;10228:16;10225:36;;;10257:1;10254;10247:12;10225:36;10293:66;10355:3;10344:8;10333:9;10329:24;10293:66;:::i;:::-;10288:2;10281:5;10277:14;10270:90;10392:50;10438:3;10433:2;10422:9;10418:18;10392:50;:::i;:::-;10387:2;10380:5;10376:14;10369:74;10477:51;10524:3;10518;10507:9;10503:19;10477:51;:::i;:::-;10470:4;10463:5;10459:16;10452:77;10582:3;10571:9;10567:19;10554:33;10538:49;;10612:2;10602:8;10599:16;10596:36;;;10628:1;10625;10618:12;10596:36;10666:58;10720:3;10709:8;10698:9;10694:24;10666:58;:::i;:::-;10659:4;10652:5;10648:16;10641:84;10778:3;10767:9;10763:19;10750:33;10734:49;;10808:2;10798:8;10795:16;10792:36;;;10824:1;10821;10814:12;10792:36;10862:58;10916:3;10905:8;10894:9;10890:24;10862:58;:::i;:::-;10855:4;10848:5;10844:16;10837:84;10974:3;10963:9;10959:19;10946:33;10930:49;;11004:2;10994:8;10991:16;10988:36;;;11020:1;11017;11010:12;10988:36;;11057:68;11121:3;11110:8;11099:9;11095:24;11057:68;:::i;:::-;11051:3;11044:5;11040:15;11033:93;;9566:1566;;;;:::o;11137:526::-;11259:6;11267;11275;11328:2;11316:9;11307:7;11303:23;11299:32;11296:52;;;11344:1;11341;11334:12;11296:52;11380:9;11367:23;11357:33;;11409:37;11442:2;11431:9;11427:18;11409:37;:::i;:::-;11399:47;;11497:2;11486:9;11482:18;11469:32;-1:-1:-1;;;;;11516:6:126;11513:30;11510:50;;;11556:1;11553;11546:12;11510:50;11579:78;11649:7;11640:6;11629:9;11625:22;11579:78;:::i;:::-;11569:88;;;11137:526;;;;;:::o;11668:467::-;11720:3;11758:5;11752:12;11785:6;11780:3;11773:19;11811:4;11840:2;11835:3;11831:12;11824:19;;11877:2;11870:5;11866:14;11898:1;11908:202;11922:6;11919:1;11916:13;11908:202;;;11987:13;;-1:-1:-1;;;;;11983:46:126;11971:59;;12050:12;;;;12085:15;;;;11944:1;11937:9;11908:202;;;-1:-1:-1;12126:3:126;;11668:467;-1:-1:-1;;;;;11668:467:126:o;12140:645::-;12369:2;12358:9;12351:21;12332:4;12407:6;12401:13;12450:2;12445;12434:9;12430:18;12423:30;12476:62;12533:3;12522:9;12518:19;12504:12;12476:62;:::i;:::-;12462:76;;12587:4;12579:6;12575:17;12569:24;12661:2;12657:7;12645:9;12637:6;12633:22;12629:36;12624:2;12613:9;12609:18;12602:64;12683:51;12727:6;12711:14;12683:51;:::i;:::-;12675:59;;;;12772:6;12765:4;12754:9;12750:20;12743:36;12140:645;;;;;:::o;12790:348::-;12842:8;12852:6;12906:3;12899:4;12891:6;12887:17;12883:27;12873:55;;12924:1;12921;12914:12;12873:55;-1:-1:-1;12947:20:126;;-1:-1:-1;;;;;12979:30:126;;12976:50;;;13022:1;13019;13012:12;12976:50;13059:4;13051:6;13047:17;13035:29;;13111:3;13104:4;13095:6;13087;13083:19;13079:30;13076:39;13073:59;;;13128:1;13125;13118:12;13073:59;12790:348;;;;;:::o;13143:479::-;13223:6;13231;13239;13292:2;13280:9;13271:7;13267:23;13263:32;13260:52;;;13308:1;13305;13298:12;13260:52;13344:9;13331:23;13321:33;;13405:2;13394:9;13390:18;13377:32;-1:-1:-1;;;;;13424:6:126;13421:30;13418:50;;;13464:1;13461;13454:12;13418:50;13503:59;13554:7;13545:6;13534:9;13530:22;13503:59;:::i;:::-;13143:479;;13581:8;;-1:-1:-1;13477:85:126;;-1:-1:-1;;;;13143:479:126:o;14846:478::-;14925:6;14933;14941;14994:2;14982:9;14973:7;14969:23;14965:32;14962:52;;;15010:1;15007;15000:12;14962:52;15050:9;15037:23;-1:-1:-1;;;;;15075:6:126;15072:30;15069:50;;;15115:1;15112;15105:12;15069:50;15154:59;15205:7;15196:6;15185:9;15181:22;15154:59;:::i;:::-;15232:8;;15128:85;;-1:-1:-1;15314:2:126;15299:18;;;;15286:32;;14846:478;-1:-1:-1;;;;14846:478:126:o;15329:1026::-;15441:6;15449;15502:2;15490:9;15481:7;15477:23;15473:32;15470:52;;;15518:1;15515;15508:12;15470:52;15557:9;15544:23;15576:31;15601:5;15576:31;:::i;:::-;15626:5;-1:-1:-1;15682:2:126;15667:18;;15654:32;-1:-1:-1;;;;;15735:14:126;;;15732:34;;;15762:1;15759;15752:12;15732:34;15785:22;;;;15841:4;15823:16;;;15819:27;15816:47;;;15859:1;15856;15849:12;15816:47;15892:2;15886:9;15934:4;15926:6;15922:17;15989:6;15977:10;15974:22;15969:2;15957:10;15954:18;15951:46;15948:72;;;16000:18;;:::i;:::-;16036:2;16029:22;16076:16;;16104;;;16101:36;;;16133:1;16130;16123:12;16101:36;16161:44;16197:7;16186:8;16182:2;16178:17;16161:44;:::i;:::-;16153:6;16146:60;;16260:2;16256;16252:11;16239:25;16234:2;16226:6;16222:15;16215:50;16319:2;16315;16311:11;16298:25;16293:2;16285:6;16281:15;16274:50;16343:6;16333:16;;;;;15329:1026;;;;;:::o;16360:589::-;16483:6;16491;16499;16552:2;16540:9;16531:7;16527:23;16523:32;16520:52;;;16568:1;16565;16558:12;16520:52;16604:9;16591:23;16581:33;;16664:2;16653:9;16649:18;16636:32;16677:31;16702:5;16677:31;:::i;16954:450::-;17023:6;17076:2;17064:9;17055:7;17051:23;17047:32;17044:52;;;17092:1;17089;17082:12;17044:52;17132:9;17119:23;-1:-1:-1;;;;;17157:6:126;17154:30;17151:50;;;17197:1;17194;17187:12;17151:50;17220:22;;17273:4;17265:13;;17261:27;-1:-1:-1;17251:55:126;;17302:1;17299;17292:12;17251:55;17325:73;17390:7;17385:2;17372:16;17367:2;17363;17359:11;17325:73;:::i;:::-;17315:83;16954:450;-1:-1:-1;;;;16954:450:126:o;18206:652::-;18329:6;18337;18390:2;18378:9;18369:7;18365:23;18361:32;18358:52;;;18406:1;18403;18396:12;18358:52;18446:9;18433:23;-1:-1:-1;;;;;18516:2:126;18508:6;18505:14;18502:34;;;18532:1;18529;18522:12;18502:34;18570:6;18559:9;18555:22;18545:32;;18615:7;18608:4;18604:2;18600:13;18596:27;18586:55;;18637:1;18634;18627:12;18586:55;18677:2;18664:16;18703:2;18695:6;18692:14;18689:34;;;18719:1;18716;18709:12;18689:34;18772:7;18767:2;18757:6;18754:1;18750:14;18746:2;18742:23;18738:32;18735:45;18732:65;;;18793:1;18790;18783:12;18732:65;18824:2;18816:11;;;;;18846:6;;-1:-1:-1;18206:652:126;;-1:-1:-1;;;;18206:652:126:o;18863:127::-;18924:10;18919:3;18915:20;18912:1;18905:31;18955:4;18952:1;18945:15;18979:4;18976:1;18969:15;18995:128;19035:3;19066:1;19062:6;19059:1;19056:13;19053:39;;;19072:18;;:::i;:::-;-1:-1:-1;19108:9:126;;18995:128::o;19128:294::-;19285:19;;;19342:2;19338:15;-1:-1:-1;;;;;;19334:53:126;19329:2;19320:12;;19313:75;19413:2;19404:12;;19128:294::o;19848:127::-;19909:10;19904:3;19900:20;19897:1;19890:31;19940:4;19937:1;19930:15;19964:4;19961:1;19954:15;20825:209;20857:1;20883;20873:132;;20927:10;20922:3;20918:20;20915:1;20908:31;20962:4;20959:1;20952:15;20990:4;20987:1;20980:15;20873:132;-1:-1:-1;21019:9:126;;20825:209::o;21389:125::-;21429:4;21457:1;21454;21451:8;21448:34;;;21462:18;;:::i;:::-;-1:-1:-1;21499:9:126;;21389:125::o;21519:184::-;21589:6;21642:2;21630:9;21621:7;21617:23;21613:32;21610:52;;;21658:1;21655;21648:12;21610:52;-1:-1:-1;21681:16:126;;21519:184;-1:-1:-1;21519:184:126:o;21890:290::-;21960:6;22013:2;22001:9;21992:7;21988:23;21984:32;21981:52;;;22029:1;22026;22019:12;21981:52;22055:16;;-1:-1:-1;;;;;22100:31:126;;22090:42;;22080:70;;22146:1;22143;22136:12;22185:273;22253:6;22306:2;22294:9;22285:7;22281:23;22277:32;22274:52;;;22322:1;22319;22312:12;22274:52;22354:9;22348:16;22404:4;22397:5;22393:16;22386:5;22383:27;22373:55;;22424:1;22421;22414:12;22841:135;22880:3;-1:-1:-1;;22901:17:126;;22898:43;;;22921:18;;:::i;:::-;-1:-1:-1;22968:1:126;22957:13;;22841:135::o;23241:137::-;-1:-1:-1;;;;;23319:5:126;23315:38;23308:5;23305:49;23295:77;;23368:1;23365;23358:12;23383:493;23486:6;23539:2;23527:9;23518:7;23514:23;23510:32;23507:52;;;23555:1;23552;23545:12;23507:52;23581:22;;:::i;:::-;23633:9;23627:16;23652:33;23677:7;23652:33;:::i;:::-;23694:22;;23761:2;23746:18;;23740:25;23774:32;23740:25;23774:32;:::i;:::-;23833:2;23822:14;;23815:31;23826:5;23383:493;-1:-1:-1;;;23383:493:126:o;23881:251::-;23951:6;24004:2;23992:9;23983:7;23979:23;23975:32;23972:52;;;24020:1;24017;24010:12;23972:52;24052:9;24046:16;24071:31;24096:5;24071:31;:::i;28360:294::-;28430:6;28483:2;28471:9;28462:7;28458:23;28454:32;28451:52;;;28499:1;28496;28489:12;28451:52;28525:16;;-1:-1:-1;;28570:35:126;;28560:46;;28550:74;;28620:1;28617;28610:12;29205:249;29274:6;29327:2;29315:9;29306:7;29302:23;29298:32;29295:52;;;29343:1;29340;29333:12;29295:52;29375:9;29369:16;29394:30;29418:5;29394:30;:::i;29906:237::-;29945:4;-1:-1:-1;;;;;30050:10:126;;;;30020;;30072:12;;;30069:38;;;30087:18;;:::i;:::-;30124:13;;29906:237;-1:-1:-1;;;29906:237:126:o;31050:644::-;31298:10;31293:3;31289:20;31280:6;31275:3;31271:16;31267:43;31262:3;31255:56;31237:3;31342:1;31337:3;31333:11;31373:6;31367:13;31422:4;31461:2;31453:6;31449:15;31482:1;31492:175;31506:6;31503:1;31500:13;31492:175;;;31569:13;;31555:28;;31605:14;;;;31642:15;;;;31528:1;31521:9;31492:175;;;-1:-1:-1;31683:5:126;;31050:644;-1:-1:-1;;;;;;;31050:644:126:o;31699:576::-;-1:-1:-1;;;;;31912:32:126;;31894:51;;31993:10;31981:23;;31976:2;31961:18;;31954:51;32041:2;32036;32021:18;;32014:30;;;32060:18;;32053:34;;;32080:6;32130;32124:3;32109:19;;32096:49;32195:1;32165:22;;;32189:3;32161:32;;;32154:43;;;;32258:2;32237:15;;;-1:-1:-1;;32233:29:126;32218:45;32214:55;;31699:576;-1:-1:-1;;;31699:576:126:o;32280:271::-;32463:6;32455;32450:3;32437:33;32419:3;32489:16;;32514:13;;;32489:16;32280:271;-1:-1:-1;32280:271:126:o;32556:486::-;32758:2;32740:21;;;32797:2;32777:18;;;32770:30;32836:34;32831:2;32816:18;;32809:62;32907:34;32902:2;32887:18;;32880:62;-1:-1:-1;;;32973:3:126;32958:19;;32951:49;33032:3;33017:19;;32556:486::o;33047:471::-;33088:3;33126:5;33120:12;33153:6;33148:3;33141:19;33178:1;33188:162;33202:6;33199:1;33196:13;33188:162;;;33264:4;33320:13;;;33316:22;;33310:29;33292:11;;;33288:20;;33281:59;33217:12;33188:162;;;33368:6;33365:1;33362:13;33359:87;;;33434:1;33427:4;33418:6;33413:3;33409:16;33405:27;33398:38;33359:87;-1:-1:-1;33500:2:126;33479:15;-1:-1:-1;;33475:29:126;33466:39;;;;33507:4;33462:50;;33047:471;-1:-1:-1;;33047:471:126:o;33523:624::-;33797:1;33793;33788:3;33784:11;33780:19;33772:6;33768:32;33757:9;33750:51;33837:2;33832;33821:9;33817:18;33810:30;33731:4;33875:6;33869:13;33918:4;33913:2;33902:9;33898:18;33891:32;33946:51;33992:3;33981:9;33977:19;33963:12;33946:51;:::i;:::-;33932:65;;34053:2;34045:6;34041:15;34035:22;34028:4;34017:9;34013:20;34006:52;34113:2;34105:6;34101:15;34095:22;34089:3;34078:9;34074:19;34067:51;34135:6;34127:14;;;33523:624;;;;;:::o;34152:278::-;34191:7;-1:-1:-1;;;;;34276:2:126;34273:1;34269:10;34306:2;34303:1;34299:10;34362:3;34358:2;34354:12;34349:3;34346:21;34339:3;34332:11;34325:19;34321:47;34318:73;;;34371:18;;:::i;:::-;34411:13;;34152:278;-1:-1:-1;;;;34152:278:126:o;34435:168::-;34475:7;34541:1;34537;34533:6;34529:14;34526:1;34523:21;34518:1;34511:9;34504:17;34500:45;34497:71;;;34548:18;;:::i;:::-;-1:-1:-1;34588:9:126;;34435:168::o;34893:219::-;35042:2;35031:9;35024:21;35005:4;35062:44;35102:2;35091:9;35087:18;35079:6;35062:44;:::i;36009:335::-;36112:4;36170:11;36157:25;36264:3;36260:8;36249;36233:14;36229:29;36225:44;36205:18;36201:69;36191:97;;36284:1;36281;36274:12;36191:97;36305:33;;;;;36009:335;-1:-1:-1;;36009:335:126:o;36349:142::-;36425:20;;36454:31;36425:20;36454:31;:::i;37144:245::-;37211:6;37264:2;37252:9;37243:7;37239:23;37235:32;37232:52;;;37280:1;37277;37270:12;37232:52;37312:9;37306:16;37331:28;37353:5;37331:28;:::i;37982:756::-;38112:6;38107:3;38100:19;38082:3;38138:4;38167:2;38162:3;38158:12;38151:19;;38193:5;38216:1;38226:487;38240:6;38237:1;38234:13;38226:487;;;38317:6;38304:20;38337:33;38362:7;38337:33;:::i;:::-;-1:-1:-1;;;;;38395:33:126;38383:46;;38470:15;;;38457:29;38499:32;38457:29;38499:32;:::i;:::-;-1:-1:-1;;;;;38565:40:126;38551:12;;;38544:62;38629:4;38653:12;;;;38688:15;;;;;38262:1;38255:9;38226:487;;38743:2181;38996:2;39048:21;;;39021:18;;;39104:22;;;38967:4;;39145:2;39163:18;;;39227:1;39223:14;;;39208:30;;39204:39;;39266:6;38967:4;39300:1595;39314:6;39311:1;39308:13;39300:1595;;;39379:22;;;-1:-1:-1;;39375:36:126;39363:49;;39451:20;;39526:14;39522:27;;;-1:-1:-1;;39518:42:126;39494:67;;39484:95;;39575:1;39572;39565:12;39484:95;39605:31;;39659:4;39704:19;;39780:14;39776:26;;;-1:-1:-1;;39772:40:126;39746:67;;39736:95;;39827:1;39824;39817:12;39736:95;39859:32;;39918:21;;-1:-1:-1;;;;;39955:30:126;;39952:50;;;39998:1;39995;39988:12;39952:50;40056:6;40053:1;40049:14;40033;40029:35;40022:5;40018:47;40015:67;;;40078:1;40075;40068:12;40015:67;40110:2;40102:6;40095:18;40140:110;40246:2;40238:6;40234:15;40226:6;40221:2;40212:7;40208:16;40140:110;:::i;:::-;40126:124;;;;40283:42;40321:2;40314:5;40310:14;40283:42;:::i;:::-;-1:-1:-1;;;;;13710:31:126;40388:15;;;13698:44;40454:14;;;40441:28;40424:15;;;40417:53;40493:4;40532:33;40550:14;;;40532:33;:::i;:::-;17670:10;17659:22;40612:15;;;17647:35;40651:4;40690:33;40708:14;;;40690:33;:::i;:::-;17670:10;17659:22;40770:15;;17647:35;;;;-1:-1:-1;40873:12:126;;;;40838:15;;;;39336:1;39329:9;39300:1595;;;-1:-1:-1;40912:6:126;;38743:2181;-1:-1:-1;;;;;;;;38743:2181:126:o;42818:197::-;42856:3;42884:6;42925:2;42918:5;42914:14;42952:2;42943:7;42940:15;42937:41;;;42958:18;;:::i;:::-;43007:1;42994:15;;42818:197;-1:-1:-1;;;42818:197:126:o","linkReferences":{},"immutableReferences":{"19222":[{"start":1038,"length":32},{"start":3875,"length":32},{"start":5324,"length":32},{"start":5747,"length":32},{"start":6340,"length":32}],"19225":[{"start":935,"length":32},{"start":7184,"length":32},{"start":7680,"length":32}],"19228":[{"start":859,"length":32},{"start":6691,"length":32}],"19231":[{"start":1487,"length":32},{"start":6160,"length":32}],"24061":[{"start":984,"length":32},{"start":8934,"length":32},{"start":9146,"length":32},{"start":10176,"length":32}],"24064":[{"start":11789,"length":32},{"start":11977,"length":32},{"start":12213,"length":32}],"24067":[{"start":2655,"length":32},{"start":2798,"length":32},{"start":2926,"length":32},{"start":8850,"length":32},{"start":9054,"length":32},{"start":10235,"length":32},{"start":10651,"length":32}],"24070":[{"start":3128,"length":32},{"start":3475,"length":32},{"start":3626,"length":32},{"start":10429,"length":32},{"start":10816,"length":32},{"start":10975,"length":32}]}},"methodIdentifiers":{"avsDirectory()":"6b3aa72e","balanceOf(address)":"70a08231","batchesState(bytes32)":"b099627e","blsApkRegistry()":"5df45946","checkPublicInput(bytes,bytes32)":"95c6d604","checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"4ae07c37","createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":"fce36c7d","createNewTask(bytes32,string)":"5c008994","delegation()":"df5cf723","depositToBatcher(address)":"4223d551","deregisterOperatorFromAVS(address)":"a364f4da","getOperatorRestakedStrategies(address)":"33cfb7b7","getRestakeableStrategies()":"e481af9d","initialize(address,address)":"485cc955","owner()":"8da5cb5b","registerOperatorToAVS(address,(bytes,bytes32,uint256))":"9926ee7d","registryCoordinator()":"6d14a987","renounceOwnership()":"715018a6","respondToTask(bytes32,address,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"a5a3fab1","rewardsInitiator()":"fc299dee","setRewardsInitiator(address)":"3bc28c8c","setStaleStakesForbidden(bool)":"416c7e5e","stakeRegistry()":"68304835","staleStakesForbidden()":"b98d0908","transferOwnership(address)":"f2fde38b","trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":"171f1d5b","updateAVSMetadataURI(string)":"a98fb355","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)":"06045a91","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAVSDirectory\",\"name\":\"__avsDirectory\",\"type\":\"address\"},{\"internalType\":\"contract IRewardsCoordinator\",\"name\":\"__rewardsCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchAlreadyResponded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchAlreadySubmitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\"}],\"name\":\"BatchDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"}],\"name\":\"BatcherBalanceIsEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"}],\"name\":\"BatcherHasNoBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InvalidDepositAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"signedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"}],\"name\":\"InvalidQuorumThreshold\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"BatchVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"BatcherBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevRewardsInitiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"RewardsInitiatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"avsDirectory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"batchesState\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"responded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"checkPublicInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"struct IRewardsCoordinator.StrategyAndMultiplier[]\",\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"internalType\":\"struct IRewardsCoordinator.RewardsSubmission[]\",\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\"}],\"name\":\"createAVSRewardsSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"depositToBatcher\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardsInitiator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardsInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"setRewardsInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"details\":\"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths\",\"params\":{\"rewardsSubmissions\":\"The rewards submissions being created\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRewardsInitiator(address)\":{\"details\":\"only callable by the owner\",\"params\":{\"newRewardsInitiator\":\"The new rewards initiator address\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"updateAVSMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}}},\"title\":\"Primary entrypoint for procuring services from Aligned.\",\"version\":1},\"userdoc\":{\"events\":{\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"}},\"kind\":\"user\",\"methods\":{\"avsDirectory()\":{\"notice\":\"Returns the EigenLayer AVSDirectory contract.\"},\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme.\"},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"notice\":\"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS\"},\"rewardsInitiator()\":{\"notice\":\"The address of the entity that can initiate rewards\"},\"setRewardsInitiator(address)\":{\"notice\":\"Sets the rewards initiator address\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"updateAVSMetadataURI(string)\":{\"notice\":\"Updates the metadata URI for the AVS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/AlignedLayerServiceManager.sol\":\"AlignedLayerServiceManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol\":{\"keccak256\":\"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa\",\"dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol\":{\"keccak256\":\"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71\",\"dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241\",\"dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221\",\"dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol\":{\"keccak256\":\"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e\",\"dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f\",\"dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol\":{\"keccak256\":\"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8\",\"dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04\",\"dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g\"]},\"src/core/AlignedLayerServiceManager.sol\":{\"keccak256\":\"0xd94af8889955748be1694bd16b2ef18ca8dedcd26a3db52d2a531b22656ea669\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2fa8ff5200bc42522630ccb49c95ad5b515206d49256ea8dae26571022f1cc38\",\"dweb:/ipfs/QmWQ6fj9dJvoQ6VnMNMcC4GRnZSAwmvefwScWH54eamY84\"]},\"src/core/AlignedLayerServiceManagerStorage.sol\":{\"keccak256\":\"0xb3a6f9f05379b23356c82ea939e4923514c890f1377226d78e8d65500d3429c9\",\"urls\":[\"bzz-raw://57628d1a65bb6ae7999f802c9c2a765759f187d92a94e3086cfebe736a10de2e\",\"dweb:/ipfs/QmYgy7wjzNguj5pUq77cspbGtLc1Q7JbHd5kxhyzojHzDV\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0x522eb3d4c414fda02cd706e9dd548691b8e78f2473492e6b191ca874b10213e5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5cf8913efb89266c2135d1240e149071ff6442faa703777fdb7f0a5452d3f114\",\"dweb:/ipfs/QmaTe9PUZGRagnBRSJggymjw1yQpvPD3qth74XfarACygT\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IAVSDirectory","name":"__avsDirectory","type":"address"},{"internalType":"contract IRewardsCoordinator","name":"__rewardsCoordinator","type":"address"},{"internalType":"contract IRegistryCoordinator","name":"__registryCoordinator","type":"address"},{"internalType":"contract IStakeRegistry","name":"__stakeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchAlreadyResponded"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchAlreadySubmitted"},{"inputs":[{"internalType":"bytes32","name":"batchIdentifierHash","type":"bytes32"}],"type":"error","name":"BatchDoesNotExist"},{"inputs":[{"internalType":"address","name":"batcher","type":"address"}],"type":"error","name":"BatcherBalanceIsEmpty"},{"inputs":[{"internalType":"address","name":"batcher","type":"address"}],"type":"error","name":"BatcherHasNoBalance"},{"inputs":[{"internalType":"address","name":"batcher","type":"address"},{"internalType":"uint256","name":"required","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"}],"type":"error","name":"InsufficientFunds"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"type":"error","name":"InvalidDepositAmount"},{"inputs":[{"internalType":"uint256","name":"signedStake","type":"uint256"},{"internalType":"uint256","name":"requiredStake","type":"uint256"}],"type":"error","name":"InvalidQuorumThreshold"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false}],"type":"event","name":"BatchVerified","anonymous":false},{"inputs":[{"internalType":"address","name":"batcher","type":"address","indexed":true},{"internalType":"uint256","name":"newBalance","type":"uint256","indexed":false}],"type":"event","name":"BatcherBalanceUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatch","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"prevRewardsInitiator","type":"address","indexed":false},{"internalType":"address","name":"newRewardsInitiator","type":"address","indexed":false}],"type":"event","name":"RewardsInitiatorUpdated","anonymous":false},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false}],"type":"event","name":"StaleStakesForbiddenUpdate","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"avsDirectory","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"batchesState","outputs":[{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32"},{"internalType":"bool","name":"responded","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"publicInput","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"checkPublicInput","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"params","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"view","type":"function","name":"checkSignatures","outputs":[{"internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","name":"","type":"tuple","components":[{"internalType":"uint96[]","name":"signedStakeForQuorum","type":"uint96[]"},{"internalType":"uint96[]","name":"totalStakeForQuorum","type":"uint96[]"}]},{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IRewardsCoordinator.RewardsSubmission[]","name":"rewardsSubmissions","type":"tuple[]","components":[{"internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","name":"strategiesAndMultipliers","type":"tuple[]","components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}]},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"startTimestamp","type":"uint32"},{"internalType":"uint32","name":"duration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"createAVSRewardsSubmission"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"}],"stateMutability":"payable","type":"function","name":"createNewTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"payable","type":"function","name":"depositToBatcher"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deregisterOperatorFromAVS"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"getOperatorRestakedStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRestakeableStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_rewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"registerOperatorToAVS"},{"inputs":[],"stateMutability":"view","type":"function","name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardsInitiator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newRewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setRewardsInitiator"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setStaleStakesForbidden"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staleStakesForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"struct BN254.G1Point","name":"apk","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"trySignatureAndApkVerification","outputs":[{"internalType":"bool","name":"pairingSuccessful","type":"bool"},{"internalType":"bool","name":"siganatureIsValid","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_metadataURI","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAVSMetadataURI"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"},{"internalType":"address","name":"senderAddress","type":"address"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"details":"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.","params":{"msgHash":"is the hash being signed","params":"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature","referenceBlockNumber":"is the block number at which the stake information is being verified"},"returns":{"_0":"quorumStakeTotals is the struct containing the total and signed stake for each quorum","_1":"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs"}},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"details":"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths","params":{"rewardsSubmissions":"The rewards submissions being created"}},"deregisterOperatorFromAVS(address)":{"params":{"operator":"The address of the operator to deregister."}},"getOperatorRestakedStrategies(address)":{"details":"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately","params":{"operator":"The address of the operator to get restaked strategies for"}},"getRestakeableStrategies()":{"details":"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately"},"owner()":{"details":"Returns the address of the current owner."},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"params":{"operator":"The address of the operator to register.","operatorSignature":"The signature, salt, and expiry of the operator's signature."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setRewardsInitiator(address)":{"details":"only callable by the owner","params":{"newRewardsInitiator":"The new rewards initiator address"}},"setStaleStakesForbidden(bool)":{"params":{"value":"to toggle staleStakesForbidden"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"params":{"apk":"is the claimed G1 public key","apkG2":"is provided G2 public key","msgHash":"is the hash being signed","sigma":"is the G1 point signature"},"returns":{"pairingSuccessful":"is true if the pairing precompile call was successful","siganatureIsValid":"is true if the signature is valid"}},"updateAVSMetadataURI(string)":{"details":"only callable by the owner","params":{"_metadataURI":"is the metadata URI for the AVS"}}},"version":1},"userdoc":{"kind":"user","methods":{"avsDirectory()":{"notice":"Returns the EigenLayer AVSDirectory contract."},"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"notice":"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme."},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"notice":"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`"},"deregisterOperatorFromAVS(address)":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS"},"getOperatorRestakedStrategies(address)":{"notice":"Returns the list of strategies that the operator has potentially restaked on the AVS"},"getRestakeableStrategies()":{"notice":"Returns the list of strategies that the AVS supports for restaking"},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS"},"rewardsInitiator()":{"notice":"The address of the entity that can initiate rewards"},"setRewardsInitiator(address)":{"notice":"Sets the rewards initiator address"},"setStaleStakesForbidden(bool)":{"notice":"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window."},"staleStakesForbidden()":{"notice":"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"notice":"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key"},"updateAVSMetadataURI(string)":{"notice":"Updates the metadata URI for the AVS"}},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/AlignedLayerServiceManager.sol":"AlignedLayerServiceManager"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol":{"keccak256":"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938","urls":["bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa","dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol":{"keccak256":"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771","urls":["bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71","dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol":{"keccak256":"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe","urls":["bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241","dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBase.sol":{"keccak256":"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4","urls":["bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221","dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol":{"keccak256":"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e","urls":["bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e","dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol":{"keccak256":"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a","urls":["bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f","dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol":{"keccak256":"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb","urls":["bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8","dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol":{"keccak256":"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5","urls":["bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04","dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g"],"license":"MIT"},"src/core/AlignedLayerServiceManager.sol":{"keccak256":"0xd94af8889955748be1694bd16b2ef18ca8dedcd26a3db52d2a531b22656ea669","urls":["bzz-raw://2fa8ff5200bc42522630ccb49c95ad5b515206d49256ea8dae26571022f1cc38","dweb:/ipfs/QmWQ6fj9dJvoQ6VnMNMcC4GRnZSAwmvefwScWH54eamY84"],"license":"UNLICENSED"},"src/core/AlignedLayerServiceManagerStorage.sol":{"keccak256":"0xb3a6f9f05379b23356c82ea939e4923514c890f1377226d78e8d65500d3429c9","urls":["bzz-raw://57628d1a65bb6ae7999f802c9c2a765759f187d92a94e3086cfebe736a10de2e","dweb:/ipfs/QmYgy7wjzNguj5pUq77cspbGtLc1Q7JbHd5kxhyzojHzDV"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0x522eb3d4c414fda02cd706e9dd548691b8e78f2473492e6b191ca874b10213e5","urls":["bzz-raw://5cf8913efb89266c2135d1240e149071ff6442faa703777fdb7f0a5452d3f114","dweb:/ipfs/QmaTe9PUZGRagnBRSJggymjw1yQpvPD3qth74XfarACygT"],"license":"UNLICENSED"}},"version":1},"id":122} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"__avsDirectory","type":"address","internalType":"contract IAVSDirectory"},{"name":"__rewardsCoordinator","type":"address","internalType":"contract IRewardsCoordinator"},{"name":"__registryCoordinator","type":"address","internalType":"contract IRegistryCoordinator"},{"name":"__stakeRegistry","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"avsDirectory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchesState","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"taskCreatedBlock","type":"uint32","internalType":"uint32"},{"name":"responded","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"blsApkRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBLSApkRegistry"}],"stateMutability":"view"},{"type":"function","name":"checkPublicInput","inputs":[{"name":"publicInput","type":"bytes","internalType":"bytes"},{"name":"hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"checkSignatures","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"referenceBlockNumber","type":"uint32","internalType":"uint32"},{"name":"params","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","components":[{"name":"signedStakeForQuorum","type":"uint96[]","internalType":"uint96[]"},{"name":"totalStakeForQuorum","type":"uint96[]","internalType":"uint96[]"}]},{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createAVSRewardsSubmission","inputs":[{"name":"rewardsSubmissions","type":"tuple[]","internalType":"struct IRewardsCoordinator.RewardsSubmission[]","components":[{"name":"strategiesAndMultipliers","type":"tuple[]","internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","components":[{"name":"strategy","type":"address","internalType":"contract IStrategy"},{"name":"multiplier","type":"uint96","internalType":"uint96"}]},{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"startTimestamp","type":"uint32","internalType":"uint32"},{"name":"duration","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createNewTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"batchDataPointer","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IDelegationManager"}],"stateMutability":"view"},{"type":"function","name":"deregisterOperatorFromAVS","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getOperatorRestakedStrategies","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRestakeableStrategies","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initialOwner","type":"address","internalType":"address"},{"name":"_rewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperatorToAVS","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"operatorSignature","type":"tuple","internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","components":[{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registryCoordinator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRegistryCoordinator"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTask","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"respondToTaskV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"senderAddress","type":"address","internalType":"address"},{"name":"nonSignerStakesAndSignature","type":"tuple","internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","components":[{"name":"nonSignerQuorumBitmapIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApks","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"quorumApkIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"totalStakeIndices","type":"uint32[]","internalType":"uint32[]"},{"name":"nonSignerStakeIndices","type":"uint32[][]","internalType":"uint32[][]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardsInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setRewardsInitiator","inputs":[{"name":"newRewardsInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaleStakesForbidden","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakeRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IStakeRegistry"}],"stateMutability":"view"},{"type":"function","name":"staleStakesForbidden","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trySignatureAndApkVerification","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"apk","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"pairingSuccessful","type":"bool","internalType":"bool"},{"name":"siganatureIsValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"updateAVSMetadataURI","inputs":[{"name":"_metadataURI","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"},{"name":"senderAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"BatchVerified","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BatcherBalanceUpdated","inputs":[{"name":"batcher","type":"address","indexed":true,"internalType":"address"},{"name":"newBalance","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NewBatch","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"NewBatchV2","inputs":[{"name":"batchMerkleRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"senderAddress","type":"address","indexed":false,"internalType":"address"},{"name":"taskCreatedBlock","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"batchDataPointer","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RewardsInitiatorUpdated","inputs":[{"name":"prevRewardsInitiator","type":"address","indexed":false,"internalType":"address"},{"name":"newRewardsInitiator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaleStakesForbiddenUpdate","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false}],"bytecode":{"object":"0x6101806040523480156200001257600080fd5b506040516200564d3803806200564d8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516151cb620004826000396000818161061001526119dc01526000818161039d0152611bef0152600081816103e901528181611ddc0152611fcc015260008181610450015281816110f9015281816116980152818161183f0152611a90015260008181610e0e01528181610f690152818161100001528181612b1a01528181612c9d0152612d3c015260008181610c3501528181610cc401528181610d4401528181612515015281816125e101528181612a580152612bf801526000818161306a01528181613126015261321201526000818161041a015281816125690152818161263d01526126bc01526151cb6000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141b9565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f36600461431a565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b6366004614621565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614667565b610c10565b60405161025b9190614684565b3480156102f657600080fd5b506102bb610305366004614667565b6110e3565b34801561031657600080fd5b506102bb6103253660046146df565b6110f7565b34801561033657600080fd5b506102bb6103453660046146fc565b61122e565b34801561035657600080fd5b5061036a610365366004614735565b611343565b60405161025b9291906147cf565b6102bb610386366004614860565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614667565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124d1565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f6105043660046148ab565b6124e5565b34801561051557600080fd5b506102bb6105243660046148f6565b61250a565b34801561053557600080fd5b506102bb610544366004614667565b6125d6565b34801561055557600080fd5b506102bb6105643660046149a1565b61269d565b34801561057557600080fd5b506102bb6105843660046149f1565b6126f1565b34801561059557600080fd5b506105c86105a4366004614a18565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a52565b34801561065357600080fd5b506102bb610662366004614667565b612e1b565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a31565b612e91565b60008085836040516020016106bd929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613249565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614ac0565b60200201518951600160200201518a602001516000600281106107f3576107f3614ac0565b60200201518b6020015160016002811061080f5761080f614ac0565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ad6565b90506109026108a86108a18884613261565b86906132f8565b6108b061338c565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613261565b6108f28c61344c565b906132f8565b886201d4c06134dc565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614ac0565b6020026020010151610aae9190614af8565b6001600160601b031660648360000151600081518110610ad057610ad0614ac0565b60200260200101516001600160601b0316610aeb9190614b27565b1015610b095760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614ba4565b610b66906201117061407d565b610b709190614b27565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614ba4565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c18565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c31565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c5a565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b0316613700565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c18565b610ebf908361407d565b915080610ecb81614c7d565b915050610e03565b506000816001600160401b03811115610eee57610eee614095565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614ac0565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c18565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614cad565b6000015186868151811061108857611088614ac0565b6001600160a01b0390921660209283029190910190910152846110aa81614c7d565b95505080806110b890614c7d565b915050610fd9565b50505080806110ce90614c7d565b915050610f1e565b5090979650505050505050565b6110eb6137c2565b6110f48161381c565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cee565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613885565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138cc565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061517683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615176833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061517683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614095565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614095565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c5a565b61394d565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614ac0565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614ac0565b6020908102919091010152801561183d57602083015161179e600183614ba4565b815181106117ae576117ae614ac0565b602002602001015160001c836020015182815181106117cf576117cf614ac0565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061517683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614ac0565b60200260200101518b8b6000015185815181106118a1576118a1614ac0565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c31565b6001600160c01b03168360000151828151811061193e5761193e614ac0565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614ac0565b6020026020010151166139e0565b8a60200151848151811061198e5761198e614ac0565b6020026020010151613a0b90919063ffffffff16565b9450806119b081614c7d565b915050611722565b50506119c383613aef565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c18565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c18565b611b57919061407d565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061517683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614ac0565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614d0b565b6001600160401b031916611d0c8a60400151838151811061174857611748614ac0565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061517683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614ac0565b6020026020010151876132f890919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614ac0565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d36565b85602001518281518110611eec57611eec614ac0565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614ac0565b602002602001015185600001518281518110611f3657611f36614ac0565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614ac0565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614ac0565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614ac0565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614ac0565b60200260200101518f60e00151888151811061206457612064614ac0565b6020026020010151878151811061207d5761207d614ac0565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d36565b875180518590811061211957612119614ac0565b6020026020010181815161212d9190614d53565b6001600160601b03169052506001909101905b8061214a81614c7d565b915050611f5a565b5050808061215f90614c7d565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061517683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061517683398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d7b565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600062229cd74310156122aa5750826122d6565b83336040516020016122bd929190614aa5565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff16156123385760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123a75733600090815260ca60205260408120805434929061235d90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546124035760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124849188908890614dec565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124c29493929190614e15565b60405180910390a25050505050565b6124d96137c2565b6124e36000613b8a565b565b60008184846040516124f8929190614e50565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125525760405162461bcd60e51b815260040161097f90614e60565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906125a09085908590600401614f25565b600060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461261e5760405162461bcd60e51b815260040161097f90614e60565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b5050505050565b6126a56137c2565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612668908490600401614f70565b60005a90506000848460405160200161270b929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661277c5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127dc5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca602052604090205461283a5760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061287090849063ffffffff1687611343565b91509150604360ff16826020015160008151811061289057612890614ac0565b60200260200101516128a29190614af8565b6001600160601b0316606483600001516000815181106128c4576128c4614ac0565b60200260200101516001600160601b03166128df9190614b27565b10156128fd5760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61294d8388614ba4565b61295a906201117061407d565b6129649190614b27565b6001600160a01b038916600090815260ca602052604090205490915081111561299f5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038816600090815260ca6020526040812080548392906129c7908490614ba4565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a46573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad89190614c5a565b60ff16905080612af657505060408051600081526020810190915290565b6000805b82811015612bab57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8d9190614c18565b612b97908361407d565b915080612ba381614c7d565b915050612afa565b506000816001600160401b03811115612bc657612bc6614095565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c789190614c5a565b60ff16811015612e1157604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d109190614c18565b905060005b81811015612dfc576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae9190614cad565b60000151858581518110612dc457612dc4614ac0565b6001600160a01b039092166020928302919091019091015283612de681614c7d565b9450508080612df490614c7d565b915050612d15565b50508080612e0990614c7d565b915050612bf6565b5090949350505050565b612e236137c2565b6001600160a01b038116612e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b8a565b6065546001600160a01b03163314612f265760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131fa57828282818110612f4357612f43614ac0565b9050602002810190612f559190614f83565b612f66906040810190602001614667565b6001600160a01b03166323b872dd3330868686818110612f8857612f88614ac0565b9050602002810190612f9a9190614f83565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130159190614fae565b50600083838381811061302a5761302a614ac0565b905060200281019061303c9190614f83565b61304d906040810190602001614667565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df9190614c18565b90508383838181106130f3576130f3614ac0565b90506020028101906131059190614f83565b613116906040810190602001614667565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061315857613158614ac0565b905060200281019061316a9190614f83565b60400135613178919061407d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614fae565b5050806131f390614c7d565b9050612f29565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906125a09085908590600401615026565b600083613257868585613bdc565b1495945050505050565b604080518082019091526000808252602082015261327d613f8d565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156132b0576132b2565bfe5b50806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613314613fab565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132b05750806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613394613fc9565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061347c60008051602061515683398151915286614ad6565b90505b61348881613cd6565b90935091506000805160206151568339815191528283098314156134c2576040805180820190915290815260208101919091529392505050565b60008051602061515683398151915260018208905061347f565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061350e613fee565b60005b60028110156136d3576000613527826006614b27565b905084826002811061353b5761353b614ac0565b6020020151518361354d83600061407d565b600c811061355d5761355d614ac0565b602002015284826002811061357457613574614ac0565b6020020151602001518382600161358b919061407d565b600c811061359b5761359b614ac0565b60200201528382600281106135b2576135b2614ac0565b60200201515151836135c583600261407d565b600c81106135d5576135d5614ac0565b60200201528382600281106135ec576135ec614ac0565b602002015151600160200201518361360583600361407d565b600c811061361557613615614ac0565b602002015283826002811061362c5761362c614ac0565b60200201516020015160006002811061364757613647614ac0565b60200201518361365883600461407d565b600c811061366857613668614ac0565b602002015283826002811061367f5761367f614ac0565b60200201516020015160016002811061369a5761369a614ac0565b6020020151836136ab83600561407d565b600c81106136bb576136bb614ac0565b602002015250806136cb81614c7d565b915050613511565b506136dc61400d565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370e846139e0565b61ffff166001600160401b0381111561372957613729614095565b6040519080825280601f01601f191660200182016040528015613753576020820181803683370190505b5090506000805b82518210801561376b575061010081105b15612e11576001811b9350858416156137b2578060f81b83838151811061379457613794614ac0565b60200101906001600160f81b031916908160001a9053508160010191505b6137bb81614c7d565b905061375a565b6033546001600160a01b031633146124e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61394082613b8a565b6139498161381c565b5050565b60008061395984613d58565b9050808360ff166001901b116139d75760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139da576139f5600184614ba4565b9092169180613a0381615133565b9150506139e4565b60408051808201909152600080825260208201526102008261ffff1610613a675760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a7b5750816139da565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ae457600161ffff871660ff83161c81161415613ac757613ac484846132f8565b93505b613ad183846132f8565b92506201fffe600192831b169101613a97565b509195945050505050565b60408051808201909152600080825260208201528151158015613b1457506020820151155b15613b32575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151568339815191528460200151613b659190614ad6565b613b7d90600080516020615156833981519152614ba4565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bec9190614ad6565b15613c735760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c8a600285614ad6565b613cab57816000528086015160205260406000209150600284049350613cc4565b8086015160005281602052604060002091506002840493505b613ccf60208261407d565b9050613c77565b60008080600080516020615156833981519152600360008051602061515683398151915286600080516020615156833981519152888909090890506000613d4c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615156833981519152613ee5565b91959194509092505050565b600061010082511115613de15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613def57506000919050565b60008083600081518110613e0557613e05614ac0565b0160200151600160f89190911c81901b92505b8451811015613edc57848181518110613e3357613e33614ac0565b0160200151600160f89190911c1b9150828211613ec85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ed581614c7d565b9050613e18565b50909392505050565b600080613ef061400d565b613ef861402b565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156132b0575082613f825760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fdc614049565b8152602001613fe9614049565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561409057614090614067565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140cd576140cd614095565b60405290565b60405161010081016001600160401b03811182821017156140cd576140cd614095565b604051601f8201601f191681016001600160401b038111828210171561411e5761411e614095565b604052919050565b60006001600160401b0383111561413f5761413f614095565b614152601f8401601f19166020016140f6565b905082815283838301111561416657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261418e57600080fd5b61419d83833560208501614126565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141d657600080fd5b88359750602089013596506040890135955060608901356001600160601b03198116811461420357600080fd5b94506080890135935060a08901356001600160401b0381111561422557600080fd5b6142318b828c0161417d565b93505060c0890135915060e0890135614249816141a4565b809150509295985092959890939650565b60006040828403121561426c57600080fd5b6142746140ab565b9050813581526020820135602082015292915050565b600082601f83011261429b57600080fd5b6142a36140ab565b8060408401858111156142b557600080fd5b845b818110156142cf5780358452602093840193016142b7565b509095945050505050565b6000608082840312156142ec57600080fd5b6142f46140ab565b9050614300838361428a565b815261430f836040840161428a565b602082015292915050565b600080600080610120858703121561433157600080fd5b84359350614342866020870161425a565b925061435186606087016142da565b91506143608660e0870161425a565b905092959194509250565b60006001600160401b0382111561438457614384614095565b5060051b60200190565b803563ffffffff81168114613b8557600080fd5b600082601f8301126143b357600080fd5b813560206143c86143c38361436b565b6140f6565b82815260059290921b840181019181810190868411156143e757600080fd5b8286015b84811015614409576143fc8161438e565b83529183019183016143eb565b509695505050505050565b600082601f83011261442557600080fd5b813560206144356143c38361436b565b82815260069290921b8401810191818101908684111561445457600080fd5b8286015b848110156144095761446a888261425a565b835291830191604001614458565b600082601f83011261448957600080fd5b813560206144996143c38361436b565b82815260059290921b840181019181810190868411156144b857600080fd5b8286015b848110156144095780356001600160401b038111156144db5760008081fd5b6144e98986838b01016143a2565b8452509183019183016144bc565b6000610180828403121561450a57600080fd5b6145126140d3565b905081356001600160401b038082111561452b57600080fd5b614537858386016143a2565b8352602084013591508082111561454d57600080fd5b61455985838601614414565b6020840152604084013591508082111561457257600080fd5b61457e85838601614414565b604084015261459085606086016142da565b60608401526145a28560e0860161425a565b60808401526101208401359150808211156145bc57600080fd5b6145c8858386016143a2565b60a08401526101408401359150808211156145e257600080fd5b6145ee858386016143a2565b60c084015261016084013591508082111561460857600080fd5b5061461584828501614478565b60e08301525092915050565b6000806040838503121561463457600080fd5b8235915060208301356001600160401b0381111561465157600080fd5b61465d858286016144f7565b9150509250929050565b60006020828403121561467957600080fd5b81356139d7816141a4565b6020808252825182820181905260009190848201906040850190845b818110156146c55783516001600160a01b0316835292840192918401916001016146a0565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146f157600080fd5b81356139d7816146d1565b6000806040838503121561470f57600080fd5b823561471a816141a4565b9150602083013561472a816141a4565b809150509250929050565b60008060006060848603121561474a57600080fd5b8335925061475a6020850161438e565b915060408401356001600160401b0381111561477557600080fd5b614781868287016144f7565b9150509250925092565b600081518084526020808501945080840160005b838110156147c45781516001600160601b03168752958201959082019060010161479f565b509495945050505050565b60408152600083516040808401526147ea608084018261478b565b90506020850151603f19848303016060850152614807828261478b565b925050508260208301529392505050565b60008083601f84011261482a57600080fd5b5081356001600160401b0381111561484157600080fd5b60208301915083602082850101111561485957600080fd5b9250929050565b60008060006040848603121561487557600080fd5b8335925060208401356001600160401b0381111561489257600080fd5b61489e86828701614818565b9497909650939450505050565b6000806000604084860312156148c057600080fd5b83356001600160401b038111156148d657600080fd5b6148e286828701614818565b909790965060209590950135949350505050565b6000806040838503121561490957600080fd5b8235614914816141a4565b915060208301356001600160401b038082111561493057600080fd5b908401906060828703121561494457600080fd5b60405160608101818110838211171561495f5761495f614095565b60405282358281111561497157600080fd5b61497d8882860161417d565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149b357600080fd5b81356001600160401b038111156149c957600080fd5b8201601f810184136149da57600080fd5b6149e984823560208401614126565b949350505050565b600080600060608486031215614a0657600080fd5b83359250602084013561475a816141a4565b600060208284031215614a2a57600080fd5b5035919050565b60008060208385031215614a4457600080fd5b82356001600160401b0380821115614a5b57600080fd5b818501915085601f830112614a6f57600080fd5b813581811115614a7e57600080fd5b8660208260051b8501011115614a9357600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614af357634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b1e57614b1e614067565b02949350505050565b6000816000190483118215151615614b4157614b41614067565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614bb657614bb6614067565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c2a57600080fd5b5051919050565b600060208284031215614c4357600080fd5b81516001600160c01b03811681146139d757600080fd5b600060208284031215614c6c57600080fd5b815160ff811681146139d757600080fd5b6000600019821415614c9157614c91614067565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cbf57600080fd5b614cc76140ab565b8251614cd2816141a4565b81526020830151614ce281614c98565b60208201529392505050565b600060208284031215614d0057600080fd5b81516139d7816141a4565b600060208284031215614d1d57600080fd5b815167ffffffffffffffff19811681146139d757600080fd5b600060208284031215614d4857600080fd5b81516139d781614c98565b60006001600160601b0383811690831681811015614d7357614d73614067565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614db657815185529382019390820190600101614d9a565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614e0c604083018486614dc3565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e469083018486614dc3565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614efe57602081850181015186830182015201614ee2565b81811115614f10576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f4f60a0840182614ed8565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061419d6020830184614ed8565b60008235609e19833603018112614f9957600080fd5b9190910192915050565b8035613b85816141a4565b600060208284031215614fc057600080fd5b81516139d7816146d1565b8183526000602080850194508260005b858110156147c4578135614fee816141a4565b6001600160a01b031687528183013561500681614c98565b6001600160601b0316878401526040968701969190910190600101614fdb565b60208082528181018390526000906040808401600586901b8501820187855b8881101561512557878303603f190184528135368b9003609e1901811261506b57600080fd5b8a0160a0813536839003601e1901811261508457600080fd5b820180356001600160401b0381111561509c57600080fd5b8060061b36038413156150ae57600080fd5b8287526150c0838801828c8501614fcb565b925050506150cf888301614fa3565b6001600160a01b031688860152818701358786015260606150f181840161438e565b63ffffffff1690860152608061510883820161438e565b63ffffffff16950194909452509285019290850190600101615045565b509098975050505050505050565b600061ffff8083168181141561514b5761514b614067565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122015291e7c0ca7fb3106e540fb13a51d69bcee5541091c650c9b3526c6fcc77b4964736f6c634300080c0033","sourceMap":"1015:10203:171:-:0;;;1837:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1590:30:115;;;;;1630:42;;;;;1682:44;;;;;1736:32;;;;2063:21:171;2126:14;2154:20;2063:21;2223:15;2276:22:114::1;:20;:22::i;:::-;1894:411:::0;;;;1793:20:108;-1:-1:-1;;;;;1771:42:108;;;-1:-1:-1;;;;;1771:42:108;;;;;1839:20;-1:-1:-1;;;;;1839:34:108;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1823:52:108;;;-1:-1:-1;;;;;1823:52:108;;;;;1902:20;-1:-1:-1;;;;;1902:35:108;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1885:54:108;;;-1:-1:-1;;;;;1885:54:108;;;;;1962:13;;-1:-1:-1;;;;;1962:24:108;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1949:39:108;;;-1:-1:-1;2263:22:171::2;:20;:22::i;:::-;1837:455:::0;;;;1015:10203;;5388:279:45;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:45;;2079:2:176;5447:66:45;;;2061:21:176;2118:2;2098:18;;;2091:30;2157:34;2137:18;;;2130:62;-1:-1:-1;;;2208:18:176;;;2201:37;2255:19;;5447:66:45;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:45;5588:15;5573:30;;;;;;5622:28;;2427:36:176;;;5622:28:45;;2415:2:176;2400:18;5622:28:45;;;;;;;5523:138;5388:279::o;14:146:176:-;-1:-1:-1;;;;;104:31:176;;94:42;;84:70;;150:1;147;140:12;84:70;14:146;:::o;165:818::-;366:6;374;382;390;443:3;431:9;422:7;418:23;414:33;411:53;;;460:1;457;450:12;411:53;492:9;486:16;511:46;551:5;511:46;:::i;:::-;626:2;611:18;;605:25;576:5;;-1:-1:-1;639:48:176;605:25;639:48;:::i;:::-;758:2;743:18;;737:25;706:7;;-1:-1:-1;771:48:176;737:25;771:48;:::i;:::-;890:2;875:18;;869:25;838:7;;-1:-1:-1;903:48:176;869:25;903:48;:::i;:::-;165:818;;;;-1:-1:-1;165:818:176;;-1:-1:-1;;165:818:176:o;988:290::-;1082:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:52;;;1151:1;1148;1141:12;1103:52;1183:9;1177:16;1202:46;1242:5;1202:46;:::i;:::-;1267:5;988:290;-1:-1:-1;;;988:290:176:o;2285:184::-;1015:10203:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141b9565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f36600461431a565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b6366004614621565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614667565b610c10565b60405161025b9190614684565b3480156102f657600080fd5b506102bb610305366004614667565b6110e3565b34801561031657600080fd5b506102bb6103253660046146df565b6110f7565b34801561033657600080fd5b506102bb6103453660046146fc565b61122e565b34801561035657600080fd5b5061036a610365366004614735565b611343565b60405161025b9291906147cf565b6102bb610386366004614860565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614667565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124d1565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f6105043660046148ab565b6124e5565b34801561051557600080fd5b506102bb6105243660046148f6565b61250a565b34801561053557600080fd5b506102bb610544366004614667565b6125d6565b34801561055557600080fd5b506102bb6105643660046149a1565b61269d565b34801561057557600080fd5b506102bb6105843660046149f1565b6126f1565b34801561059557600080fd5b506105c86105a4366004614a18565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a52565b34801561065357600080fd5b506102bb610662366004614667565b612e1b565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a31565b612e91565b60008085836040516020016106bd929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613249565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614ac0565b60200201518951600160200201518a602001516000600281106107f3576107f3614ac0565b60200201518b6020015160016002811061080f5761080f614ac0565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ad6565b90506109026108a86108a18884613261565b86906132f8565b6108b061338c565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613261565b6108f28c61344c565b906132f8565b886201d4c06134dc565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614ac0565b6020026020010151610aae9190614af8565b6001600160601b031660648360000151600081518110610ad057610ad0614ac0565b60200260200101516001600160601b0316610aeb9190614b27565b1015610b095760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614ba4565b610b66906201117061407d565b610b709190614b27565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614ba4565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c18565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c31565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c5a565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b0316613700565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c18565b610ebf908361407d565b915080610ecb81614c7d565b915050610e03565b506000816001600160401b03811115610eee57610eee614095565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614ac0565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c18565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614cad565b6000015186868151811061108857611088614ac0565b6001600160a01b0390921660209283029190910190910152846110aa81614c7d565b95505080806110b890614c7d565b915050610fd9565b50505080806110ce90614c7d565b915050610f1e565b5090979650505050505050565b6110eb6137c2565b6110f48161381c565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cee565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613885565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138cc565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061517683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615176833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061517683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614095565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614095565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c5a565b61394d565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614ac0565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614ac0565b6020908102919091010152801561183d57602083015161179e600183614ba4565b815181106117ae576117ae614ac0565b602002602001015160001c836020015182815181106117cf576117cf614ac0565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061517683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614ac0565b60200260200101518b8b6000015185815181106118a1576118a1614ac0565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c31565b6001600160c01b03168360000151828151811061193e5761193e614ac0565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614ac0565b6020026020010151166139e0565b8a60200151848151811061198e5761198e614ac0565b6020026020010151613a0b90919063ffffffff16565b9450806119b081614c7d565b915050611722565b50506119c383613aef565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c18565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614ac0565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c18565b611b57919061407d565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061517683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614ac0565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614d0b565b6001600160401b031916611d0c8a60400151838151811061174857611748614ac0565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061517683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614ac0565b6020026020010151876132f890919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614ac0565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614ac0565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d36565b85602001518281518110611eec57611eec614ac0565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614ac0565b602002602001015185600001518281518110611f3657611f36614ac0565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614ac0565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614ac0565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614ac0565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614ac0565b60200260200101518f60e00151888151811061206457612064614ac0565b6020026020010151878151811061207d5761207d614ac0565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d36565b875180518590811061211957612119614ac0565b6020026020010181815161212d9190614d53565b6001600160601b03169052506001909101905b8061214a81614c7d565b915050611f5a565b5050808061215f90614c7d565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061517683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061517683398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d7b565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600062229cd74310156122aa5750826122d6565b83336040516020016122bd929190614aa5565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff16156123385760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123a75733600090815260ca60205260408120805434929061235d90849061407d565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546124035760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124849188908890614dec565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124c29493929190614e15565b60405180910390a25050505050565b6124d96137c2565b6124e36000613b8a565b565b60008184846040516124f8929190614e50565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125525760405162461bcd60e51b815260040161097f90614e60565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906125a09085908590600401614f25565b600060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461261e5760405162461bcd60e51b815260040161097f90614e60565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b5050505050565b6126a56137c2565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612668908490600401614f70565b60005a90506000848460405160200161270b929190614aa5565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661277c5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127dc5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca602052604090205461283a5760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061287090849063ffffffff1687611343565b91509150604360ff16826020015160008151811061289057612890614ac0565b60200260200101516128a29190614af8565b6001600160601b0316606483600001516000815181106128c4576128c4614ac0565b60200260200101516001600160601b03166128df9190614b27565b10156128fd5760405162461bcd60e51b815260040161097f90614b46565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61294d8388614ba4565b61295a906201117061407d565b6129649190614b27565b6001600160a01b038916600090815260ca602052604090205490915081111561299f5760405162461bcd60e51b815260040161097f90614bbb565b6001600160a01b038816600090815260ca6020526040812080548392906129c7908490614ba4565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a46573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad89190614c5a565b60ff16905080612af657505060408051600081526020810190915290565b6000805b82811015612bab57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8d9190614c18565b612b97908361407d565b915080612ba381614c7d565b915050612afa565b506000816001600160401b03811115612bc657612bc6614095565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c789190614c5a565b60ff16811015612e1157604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d109190614c18565b905060005b81811015612dfc576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae9190614cad565b60000151858581518110612dc457612dc4614ac0565b6001600160a01b039092166020928302919091019091015283612de681614c7d565b9450508080612df490614c7d565b915050612d15565b50508080612e0990614c7d565b915050612bf6565b5090949350505050565b612e236137c2565b6001600160a01b038116612e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b8a565b6065546001600160a01b03163314612f265760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131fa57828282818110612f4357612f43614ac0565b9050602002810190612f559190614f83565b612f66906040810190602001614667565b6001600160a01b03166323b872dd3330868686818110612f8857612f88614ac0565b9050602002810190612f9a9190614f83565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130159190614fae565b50600083838381811061302a5761302a614ac0565b905060200281019061303c9190614f83565b61304d906040810190602001614667565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df9190614c18565b90508383838181106130f3576130f3614ac0565b90506020028101906131059190614f83565b613116906040810190602001614667565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061315857613158614ac0565b905060200281019061316a9190614f83565b60400135613178919061407d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614fae565b5050806131f390614c7d565b9050612f29565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906125a09085908590600401615026565b600083613257868585613bdc565b1495945050505050565b604080518082019091526000808252602082015261327d613f8d565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156132b0576132b2565bfe5b50806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613314613fab565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132b05750806132f05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613394613fc9565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061347c60008051602061515683398151915286614ad6565b90505b61348881613cd6565b90935091506000805160206151568339815191528283098314156134c2576040805180820190915290815260208101919091529392505050565b60008051602061515683398151915260018208905061347f565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061350e613fee565b60005b60028110156136d3576000613527826006614b27565b905084826002811061353b5761353b614ac0565b6020020151518361354d83600061407d565b600c811061355d5761355d614ac0565b602002015284826002811061357457613574614ac0565b6020020151602001518382600161358b919061407d565b600c811061359b5761359b614ac0565b60200201528382600281106135b2576135b2614ac0565b60200201515151836135c583600261407d565b600c81106135d5576135d5614ac0565b60200201528382600281106135ec576135ec614ac0565b602002015151600160200201518361360583600361407d565b600c811061361557613615614ac0565b602002015283826002811061362c5761362c614ac0565b60200201516020015160006002811061364757613647614ac0565b60200201518361365883600461407d565b600c811061366857613668614ac0565b602002015283826002811061367f5761367f614ac0565b60200201516020015160016002811061369a5761369a614ac0565b6020020151836136ab83600561407d565b600c81106136bb576136bb614ac0565b602002015250806136cb81614c7d565b915050613511565b506136dc61400d565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370e846139e0565b61ffff166001600160401b0381111561372957613729614095565b6040519080825280601f01601f191660200182016040528015613753576020820181803683370190505b5090506000805b82518210801561376b575061010081105b15612e11576001811b9350858416156137b2578060f81b83838151811061379457613794614ac0565b60200101906001600160f81b031916908160001a9053508160010191505b6137bb81614c7d565b905061375a565b6033546001600160a01b031633146124e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61394082613b8a565b6139498161381c565b5050565b60008061395984613d58565b9050808360ff166001901b116139d75760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139da576139f5600184614ba4565b9092169180613a0381615133565b9150506139e4565b60408051808201909152600080825260208201526102008261ffff1610613a675760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a7b5750816139da565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ae457600161ffff871660ff83161c81161415613ac757613ac484846132f8565b93505b613ad183846132f8565b92506201fffe600192831b169101613a97565b509195945050505050565b60408051808201909152600080825260208201528151158015613b1457506020820151155b15613b32575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151568339815191528460200151613b659190614ad6565b613b7d90600080516020615156833981519152614ba4565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bec9190614ad6565b15613c735760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c8a600285614ad6565b613cab57816000528086015160205260406000209150600284049350613cc4565b8086015160005281602052604060002091506002840493505b613ccf60208261407d565b9050613c77565b60008080600080516020615156833981519152600360008051602061515683398151915286600080516020615156833981519152888909090890506000613d4c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615156833981519152613ee5565b91959194509092505050565b600061010082511115613de15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613def57506000919050565b60008083600081518110613e0557613e05614ac0565b0160200151600160f89190911c81901b92505b8451811015613edc57848181518110613e3357613e33614ac0565b0160200151600160f89190911c1b9150828211613ec85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ed581614c7d565b9050613e18565b50909392505050565b600080613ef061400d565b613ef861402b565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156132b0575082613f825760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fdc614049565b8152602001613fe9614049565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561409057614090614067565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140cd576140cd614095565b60405290565b60405161010081016001600160401b03811182821017156140cd576140cd614095565b604051601f8201601f191681016001600160401b038111828210171561411e5761411e614095565b604052919050565b60006001600160401b0383111561413f5761413f614095565b614152601f8401601f19166020016140f6565b905082815283838301111561416657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261418e57600080fd5b61419d83833560208501614126565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141d657600080fd5b88359750602089013596506040890135955060608901356001600160601b03198116811461420357600080fd5b94506080890135935060a08901356001600160401b0381111561422557600080fd5b6142318b828c0161417d565b93505060c0890135915060e0890135614249816141a4565b809150509295985092959890939650565b60006040828403121561426c57600080fd5b6142746140ab565b9050813581526020820135602082015292915050565b600082601f83011261429b57600080fd5b6142a36140ab565b8060408401858111156142b557600080fd5b845b818110156142cf5780358452602093840193016142b7565b509095945050505050565b6000608082840312156142ec57600080fd5b6142f46140ab565b9050614300838361428a565b815261430f836040840161428a565b602082015292915050565b600080600080610120858703121561433157600080fd5b84359350614342866020870161425a565b925061435186606087016142da565b91506143608660e0870161425a565b905092959194509250565b60006001600160401b0382111561438457614384614095565b5060051b60200190565b803563ffffffff81168114613b8557600080fd5b600082601f8301126143b357600080fd5b813560206143c86143c38361436b565b6140f6565b82815260059290921b840181019181810190868411156143e757600080fd5b8286015b84811015614409576143fc8161438e565b83529183019183016143eb565b509695505050505050565b600082601f83011261442557600080fd5b813560206144356143c38361436b565b82815260069290921b8401810191818101908684111561445457600080fd5b8286015b848110156144095761446a888261425a565b835291830191604001614458565b600082601f83011261448957600080fd5b813560206144996143c38361436b565b82815260059290921b840181019181810190868411156144b857600080fd5b8286015b848110156144095780356001600160401b038111156144db5760008081fd5b6144e98986838b01016143a2565b8452509183019183016144bc565b6000610180828403121561450a57600080fd5b6145126140d3565b905081356001600160401b038082111561452b57600080fd5b614537858386016143a2565b8352602084013591508082111561454d57600080fd5b61455985838601614414565b6020840152604084013591508082111561457257600080fd5b61457e85838601614414565b604084015261459085606086016142da565b60608401526145a28560e0860161425a565b60808401526101208401359150808211156145bc57600080fd5b6145c8858386016143a2565b60a08401526101408401359150808211156145e257600080fd5b6145ee858386016143a2565b60c084015261016084013591508082111561460857600080fd5b5061461584828501614478565b60e08301525092915050565b6000806040838503121561463457600080fd5b8235915060208301356001600160401b0381111561465157600080fd5b61465d858286016144f7565b9150509250929050565b60006020828403121561467957600080fd5b81356139d7816141a4565b6020808252825182820181905260009190848201906040850190845b818110156146c55783516001600160a01b0316835292840192918401916001016146a0565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146f157600080fd5b81356139d7816146d1565b6000806040838503121561470f57600080fd5b823561471a816141a4565b9150602083013561472a816141a4565b809150509250929050565b60008060006060848603121561474a57600080fd5b8335925061475a6020850161438e565b915060408401356001600160401b0381111561477557600080fd5b614781868287016144f7565b9150509250925092565b600081518084526020808501945080840160005b838110156147c45781516001600160601b03168752958201959082019060010161479f565b509495945050505050565b60408152600083516040808401526147ea608084018261478b565b90506020850151603f19848303016060850152614807828261478b565b925050508260208301529392505050565b60008083601f84011261482a57600080fd5b5081356001600160401b0381111561484157600080fd5b60208301915083602082850101111561485957600080fd5b9250929050565b60008060006040848603121561487557600080fd5b8335925060208401356001600160401b0381111561489257600080fd5b61489e86828701614818565b9497909650939450505050565b6000806000604084860312156148c057600080fd5b83356001600160401b038111156148d657600080fd5b6148e286828701614818565b909790965060209590950135949350505050565b6000806040838503121561490957600080fd5b8235614914816141a4565b915060208301356001600160401b038082111561493057600080fd5b908401906060828703121561494457600080fd5b60405160608101818110838211171561495f5761495f614095565b60405282358281111561497157600080fd5b61497d8882860161417d565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149b357600080fd5b81356001600160401b038111156149c957600080fd5b8201601f810184136149da57600080fd5b6149e984823560208401614126565b949350505050565b600080600060608486031215614a0657600080fd5b83359250602084013561475a816141a4565b600060208284031215614a2a57600080fd5b5035919050565b60008060208385031215614a4457600080fd5b82356001600160401b0380821115614a5b57600080fd5b818501915085601f830112614a6f57600080fd5b813581811115614a7e57600080fd5b8660208260051b8501011115614a9357600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614af357634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b1e57614b1e614067565b02949350505050565b6000816000190483118215151615614b4157614b41614067565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614bb657614bb6614067565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c2a57600080fd5b5051919050565b600060208284031215614c4357600080fd5b81516001600160c01b03811681146139d757600080fd5b600060208284031215614c6c57600080fd5b815160ff811681146139d757600080fd5b6000600019821415614c9157614c91614067565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cbf57600080fd5b614cc76140ab565b8251614cd2816141a4565b81526020830151614ce281614c98565b60208201529392505050565b600060208284031215614d0057600080fd5b81516139d7816141a4565b600060208284031215614d1d57600080fd5b815167ffffffffffffffff19811681146139d757600080fd5b600060208284031215614d4857600080fd5b81516139d781614c98565b60006001600160601b0383811690831681811015614d7357614d73614067565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614db657815185529382019390820190600101614d9a565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614e0c604083018486614dc3565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e469083018486614dc3565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614efe57602081850181015186830182015201614ee2565b81811115614f10576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f4f60a0840182614ed8565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061419d6020830184614ed8565b60008235609e19833603018112614f9957600080fd5b9190910192915050565b8035613b85816141a4565b600060208284031215614fc057600080fd5b81516139d7816146d1565b8183526000602080850194508260005b858110156147c4578135614fee816141a4565b6001600160a01b031687528183013561500681614c98565b6001600160601b0316878401526040968701969190910190600101614fdb565b60208082528181018390526000906040808401600586901b8501820187855b8881101561512557878303603f190184528135368b9003609e1901811261506b57600080fd5b8a0160a0813536839003601e1901811261508457600080fd5b820180356001600160401b0381111561509c57600080fd5b8060061b36038413156150ae57600080fd5b8287526150c0838801828c8501614fcb565b925050506150cf888301614fa3565b6001600160a01b031688860152818701358786015260606150f181840161438e565b63ffffffff1690860152608061510883820161438e565b63ffffffff16950194909452509285019290850190600101615045565b509098975050505050505050565b600061ffff8083168181141561514b5761514b614067565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a264697066735822122015291e7c0ca7fb3106e540fb13a51d69bcee5541091c650c9b3526c6fcc77b4964736f6c634300080c0033","sourceMap":"1015:10203:171:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10930:10;10913:28;;;;:16;:28;;;;;:41;;10945:9;;10913:28;:41;;10945:9;;10913:41;:::i;:::-;;;;-1:-1:-1;;10991:10:171;11003:28;;;;:16;:28;;;;;;;;;;10969:63;;425:25:176;;;10969:63:171;;398:18:176;10969:63:171;;;;;;;1015:10203;;;;;9605:1144;;;;;;;;;;-1:-1:-1;9605:1144:171;;;;;:::i;:::-;;:::i;:::-;;;3585:14:176;;3578:22;3560:41;;3548:2;3533:18;9605:1144:171;;;;;;;;14547:1081:108;;;;;;;;;;-1:-1:-1;14547:1081:108;;;;;:::i;:::-;;:::i;:::-;;;;5435:14:176;;5428:22;5410:41;;5494:14;;5487:22;5482:2;5467:18;;5460:50;5383:18;14547:1081:108;5248:268:176;4004:2862:171;;;;;;;;;;-1:-1:-1;4004:2862:171;;;;;:::i;:::-;;:::i;:::-;;7697:1470:114;;;;;;;;;;-1:-1:-1;7697:1470:114;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5599:135::-;;;;;;;;;;-1:-1:-1;5599:135:114;;;;;:::i;:::-;;:::i;2232:123:108:-;;;;;;;;;;-1:-1:-1;2232:123:108;;;;;:::i;:::-;;:::i;2394:187:171:-;;;;;;;;;;-1:-1:-1;2394:187:171;;;;;:::i;:::-;;:::i;4387:9678:108:-;;;;;;;;;;-1:-1:-1;4387:9678:108;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2587:1343:171:-;;;;;;:::i;:::-;;:::i;1183:47:108:-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14663:32:176;;;14645:51;;14633:2;14618:18;1183:47:108;14474:228:176;1132:45:108;;;;;;;;;;;;;;;9235:111:114;;;;;;;;;;-1:-1:-1;9325:13:114;9235:111;;1069:57:108;;;;;;;;;;;;;;;10755:115:171;;;;;;;;;;-1:-1:-1;10755:115:171;;;;;:::i;:::-;-1:-1:-1;;;;;10838:25:171;10812:7;10838:25;;;:16;:25;;;;;;;10755:115;;;;425:25:176;;;413:2;398:18;10755:115:171;279:177:176;2071:101:41;;;;;;;;;;;;;:::i;1441:85::-;;;;;;;;;;-1:-1:-1;1513:6:41;;-1:-1:-1;;;;;1513:6:41;1441:85;;11045:171:171;;;;;;;;;;-1:-1:-1;11045:171:171;;;;;:::i;:::-;;:::i;4797:260:114:-;;;;;;;;;;-1:-1:-1;4797:260:114;;;;;:::i;:::-;;:::i;5262:158::-;;;;;;;;;;-1:-1:-1;5262:158:114;;;;;:::i;:::-;;:::i;2721:148::-;;;;;;;;;;-1:-1:-1;2721:148:114;;;;;:::i;:::-;;:::i;6872:2727:171:-;;;;;;;;;;-1:-1:-1;6872:2727:171;;;;;:::i;:::-;;:::i;309:50:172:-;;;;;;;;;;-1:-1:-1;309:50:172;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;309:50:172;;;;;;;;;;18428:10:176;18416:23;;;18398:42;;18483:14;;18476:22;18471:2;18456:18;;18449:50;18371:18;309:50:172;18232:273:176;1421:32:108;;;;;;;;;;-1:-1:-1;1421:32:108;;;;;;;;1236:46;;;;;;;;;;;;;;;6262:951:114;;;;;;;;;;;;;:::i;2321:198:41:-;;;;;;;;;;-1:-1:-1;2321:198:41;;;;;:::i;:::-;;:::i;1212:31:115:-;;;;;;;;;;-1:-1:-1;1212:31:115;;;;-1:-1:-1;;;;;1212:31:115;;;3631:872:114;;;;;;;;;;-1:-1:-1;3631:872:114;;;;;:::i;:::-;;:::i;9605:1144:171:-;9959:4;9975:27;10045:15;10062:13;10028:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10028:48:171;;;;;;;;;10005:81;;10028:48;10005:81;;;;10101:33;;;;:12;:33;;;;;:50;10005:81;;-1:-1:-1;10101:50:171;;10097:98;;10179:5;10172:12;;;;;10097:98;10210:33;;;;:12;:33;;;;;:43;-1:-1:-1;;;10210:43:171;;;;10205:87;;10276:5;10269:12;;;;;10205:87;10322:163;;;;;;19914:19:176;;;19949:12;;;19942:28;;;19986:12;;;19979:28;;;-1:-1:-1;;;;;;20037:44:176;;20023:12;;;20016:66;10302:17:171;;20098:13:176;;10322:163:171;;;-1:-1:-1;;10322:163:171;;;;;;;;;10517:15;;10322:163;10517:15;;;10322:163;;-1:-1:-1;10562:180:171;10608:11;10637:19;10517:15;10702:26;10562:28;:180::i;:::-;10543:199;;;;;9605:1144;;;;;;;;;;;:::o;14547:1081:108:-;14745:22;14769;14878:13;2037:77:129;14980:7:108;15009:3;:5;;;15036:3;:5;;;15063;:7;;;15071:1;15063:10;;;;;;;:::i;:::-;;;;;15095:7;;15103:1;15095:10;;;;15127:5;:7;;;15135:1;15127:10;;;;;;;:::i;:::-;;;;;15159:5;:7;;;15167:1;15159:10;;;;;;;:::i;:::-;;;;;;;;;;15191:7;;15220;;;;14942:303;;;;;;;;;;;20607:19:176;;;20651:2;20642:12;;20635:28;;;;20688:2;20679:12;;20672:28;;;;20725:2;20716:12;;20709:28;;;;20762:3;20753:13;;20746:29;;;;20800:3;20791:13;;20784:29;20838:3;20829:13;;20822:29;20876:3;20867:13;;20860:29;20914:3;20905:13;;20898:29;20952:3;20943:13;;20254:708;14942:303:108;;;;;;;;;;;;;14915:344;;;;;;14894:375;;:394;;;;:::i;:::-;14878:410;-1:-1:-1;15371:250:108;15402:33;15413:21;:3;14878:410;15413:14;:21::i;:::-;15402:5;;:10;:33::i;:::-;15449:22;:20;:22::i;:::-;15485:67;15514:37;15545:5;15514:19;-1:-1:-1;;;;;;;;;;;;;;;;;2392:13:129;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99;15514:19:108;:30;;:37::i;:::-;15485:23;15500:7;15485:14;:23::i;:::-;:28;;:67::i;:::-;15566:5;1055:7;15371:17;:250::i;:::-;15330:291;;;;-1:-1:-1;14547:1081:108;-1:-1:-1;;;;;;14547:1081:108:o;4004:2862:171:-;4549:42;4516:22;4627:9;4894:29;;;;:12;:29;;;;;:46;4602:34;;-1:-1:-1;4894:46:171;;4873:118;;;;-1:-1:-1;;;4873:118:171;;21515:2:176;4873:118:171;;;21497:21:176;21554:2;21534:18;;;21527:30;-1:-1:-1;;;21573:18:176;;;21566:50;21633:18;;4873:118:171;;;;;;;;;5071:29;;;;:12;:29;;;;;:39;-1:-1:-1;;;5071:39:171;;;;:48;5050:118;;;;-1:-1:-1;;;5050:118:171;;21864:2:176;5050:118:171;;;21846:21:176;21903:2;21883:18;;;21876:30;-1:-1:-1;;;21922:18:176;;;21915:53;21985:18;;5050:118:171;21662:347:176;5050:118:171;-1:-1:-1;;;;;5200:32:171;;5235:1;5200:32;;;:16;:32;;;;;;5179:105;;;;-1:-1:-1;;;5179:105:171;;22216:2:176;5179:105:171;;;22198:21:176;22255:2;22235:18;;;22228:30;-1:-1:-1;;;22274:18:176;;;22267:52;22336:18;;5179:105:171;22014:346:176;5179:105:171;5295:29;;;;:12;:29;;;;;:46;;-1:-1:-1;;5295:46:171;;-1:-1:-1;;;5295:46:171;;;;:29;;5584:171;;5308:15;;5650:46;;5714:27;5584:15;:171::i;:::-;5476:279;;;;1293:2;5957:90;;:17;:37;;;5995:1;5957:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;-1:-1:-1;;;;;5872:175:171;1230:3;5872:17;:38;;;5911:1;5872:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5872:65:171;;;;;:::i;:::-;:175;;5851:286;;;;-1:-1:-1;;;5851:286:171;;;;;;;:::i;:::-;6153:46;;-1:-1:-1;;;;;14663:32:176;;14645:51;;6167:15:171;;6153:46;;14633:2:176;14618:18;6153:46:171;;;;;;;6347:20;6370:9;6347:32;-1:-1:-1;6492:14:171;6551:11;6510:29;6347:32;6510:14;:29;:::i;:::-;:37;;6542:5;6510:37;:::i;:::-;6509:53;;;;:::i;:::-;-1:-1:-1;;;;;6594:32:171;;;;;;:16;:32;;;;;;6492:70;;-1:-1:-1;6594:58:171;-1:-1:-1;6594:58:171;6573:165;;;;-1:-1:-1;;;6573:165:171;;;;;;;:::i;:::-;-1:-1:-1;;;;;6749:54:171;;;;;;:16;:54;;;;;:64;;6807:6;;6749:54;:64;;6807:6;;6749:64;:::i;:::-;;;;-1:-1:-1;;6823:36:171;;6831:10;;6823:36;;;;;6852:6;;6823:36;;;;6852:6;6831:10;6823:36;;;;;;;;;;;;;;;;;;;;;4212:2654;;;;;;4004:2862;;:::o;7697:1470:114:-;7854:44;;-1:-1:-1;;;7854:44:114;;-1:-1:-1;;;;;14663:32:176;;;7854:44:114;;;14645:51:176;7801:16:114;;7833:18;;7854:20;:34;;;;14618:18:176;;7854:44:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7933:55;;-1:-1:-1;;;7933:55:114;;;;;425:25:176;;;7833:65:114;;-1:-1:-1;7908:22:114;;-1:-1:-1;;;;;7933:20:114;:43;;;;398:18:176;;7933:55:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7908:80;-1:-1:-1;;;;;;8003:19:114;;;;:62;;;8026:20;-1:-1:-1;;;;;8026:32:114;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;8003:62;7999:116;;;8088:16;;;8102:1;8088:16;;;;;;;;;;;-1:-1:-1;8081:23:114;7697:1470;-1:-1:-1;;;;7697:1470:114:o;7999:116::-;8196:36;8235:46;8266:14;-1:-1:-1;;;;;8235:46:114;:30;:46::i;:::-;8196:85;-1:-1:-1;8291:21:114;;8322:173;8346:23;:30;8342:1;:34;8322:173;;;8414:14;-1:-1:-1;;;;;8414:35:114;;8456:23;8480:1;8456:26;;;;;;;;:::i;:::-;;;;;8414:70;;-1:-1:-1;;;;;;8414:70:114;;;;;;;8456:26;;;;;8414:70;;;24899:36:176;24872:18;;8414:70:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8397:87;;;;:::i;:::-;;-1:-1:-1;8378:3:114;;;;:::i;:::-;;;;8322:173;;;;8566:35;8618:13;-1:-1:-1;;;;;8604:28:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:28:114;;8566:66;;8642:13;8674:9;8669:457;8693:23;:30;8689:1;:34;8669:457;;;8744:12;8765:23;8789:1;8765:26;;;;;;;;:::i;:::-;;;;;8837:43;;-1:-1:-1;;;8837:43:114;;8765:26;;;;;8837:43;;;24899:36:176;;;8765:26:114;-1:-1:-1;;;;;;;;8837:14:114;:35;;;;24872:18:176;;8837:43:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:74;;8899:9;8894:222;8918:20;8914:1;:24;8894:222;;;9019:47;;-1:-1:-1;;;9019:47:114;;25475:4:176;25463:17;;9019:47:114;;;25445:36:176;25497:18;;;25490:34;;;9019:14:114;-1:-1:-1;;;;;9019:36:114;;;;25418:18:176;;9019:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;8963:18;8982:5;8963:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8963:113:114;;;:25;;;;;;;;;;;:113;9094:7;;;;:::i;:::-;;;;8940:3;;;;;:::i;:::-;;;;8894:222;;;;8730:396;;8725:3;;;;;:::i;:::-;;;;8669:457;;;-1:-1:-1;9142:18:114;;7697:1470;-1:-1:-1;;;;;;;7697:1470:114:o;5599:135::-;1334:13:41;:11;:13::i;:::-;5686:41:114::1;5707:19;5686:20;:41::i;:::-;5599:135:::0;:::o;2232:123:108:-;1537:19;-1:-1:-1;;;;;1537:25:108;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1523:41:108;:10;-1:-1:-1;;;;;1523:41:108;;1502:180;;;;-1:-1:-1;;;1502:180:108;;26633:2:176;1502:180:108;;;26615:21:176;26672:2;26652:18;;;26645:30;26711:34;26691:18;;;26684:62;26782:34;26762:18;;;26755:62;26854:30;26833:19;;;26826:59;26902:19;;1502:180:108;26431:496:176;1502:180:108;2317:31:::1;2342:5;2317:24;:31::i;2394:187:171:-:0;3111:19:45;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:45;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:45;1476:19:49;:23;;;3219:66:45;;-1:-1:-1;3268:12:45;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:45;;27134:2:176;3157:201:45;;;27116:21:176;27173:2;27153:18;;;27146:30;27212:34;27192:18;;;27185:62;-1:-1:-1;;;27263:18:176;;;27256:44;27317:19;;3157:201:45;26932:410:176;3157:201:45;3368:12;:16;;-1:-1:-1;;3368:16:45;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:45;;;;;3394:65;2515:59:171::1;2541:13;2556:17;2515:25;:59::i;:::-;3483:14:45::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;3513:21:45;;;3553:14;;-1:-1:-1;24899:36:176;;3553:14:45;;24887:2:176;24872:18;3553:14:45;;;;;;;3479:99;3101:483;2394:187:171;;:::o;4387:9678:108:-;-1:-1:-1;;;;;;;;;;;;;;;;;4578:7:108;4651:6;:17;;;:24;4619:21;;;;;;;;;;;;;;;;;:28;:56;4618:142;;;;;4729:6;:23;;;:30;4697:21;;;;;;;;;;;;;;;;;:28;:62;4618:142;:227;;;;;4813:6;:24;;;:31;4781:21;;;;;;;;;;;;;;;;;:28;:63;4618:227;:316;;;;;4898:6;:28;;;:35;4866:21;;;;;;;;;;;;;;;;;:28;:67;4618:316;4597:428;;;;-1:-1:-1;;;4597:428:108;;27748:2:176;4597:428:108;;;27730:21:176;27787:2;27767:18;;;27760:30;-1:-1:-1;;;;;;;;;;;27806:18:176;;;27799:62;27897:34;27877:18;;;27870:62;-1:-1:-1;;;27948:19:176;;;27941:32;27990:19;;4597:428:108;27546:469:176;4597:428:108;5107:35;;:42;5057:23;;;;:30;:92;5036:207;;;;-1:-1:-1;;;5036:207:108;;28222:2:176;5036:207:108;;;28204:21:176;28261:2;28241:18;;;28234:30;;;-1:-1:-1;;;;;;;;;;;28280:18:176;;;28273:62;28371:34;28351:18;;;28344:62;-1:-1:-1;;;28422:19:176;;;28415:35;28467:19;;5036:207:108;28020:472:176;5036:207:108;5305:12;5275:43;;:20;:43;;;5254:150;;;;-1:-1:-1;;;5254:150:108;;28699:2:176;5254:150:108;;;28681:21:176;28738:2;28718:18;;;28711:30;-1:-1:-1;;;;;;;;;;;28757:18:176;;;28750:62;28848:30;28828:18;;;28821:58;28896:19;;5254:150:108;28497:424:176;5254:150:108;5921:19;;;;;;;;-1:-1:-1;5921:19:108;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;6277:21:108;;;;;;;;;;;;;;;;;;6264:42;;;;;;;;;;;5921:19;;6264:42;6277:21;6264:42;;;;5921:19;6264:42;;;;;-1:-1:-1;;6230:31:108;;;;:76;;;;6364:21;;;;;;;;;;;;-1:-1:-1;6364:21:108;;;;;6351:42;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6316:77:108;;-1:-1:-1;;;;;;;;;;;;;;;;;6499:6:108;:23;;;:30;-1:-1:-1;;;;;6472:67:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6472:67:108;-1:-1:-1;6445:94:108;;6589:23;;;;:30;-1:-1:-1;;;;;6575:45:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:45:108;;6549:10;:23;;:71;;;;6799:27;6829:141;6884:21;;;;;;;;;;;;;;;;;6923:19;-1:-1:-1;;;;;6923:31:108;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6829:37;:141::i;:::-;6799:171;;6990:9;6985:1728;7009:6;:23;;;:30;7005:1;:34;6985:1728;;;7301:82;:6;:44;;;7346:1;7301:47;;;;;;;;:::i;:::-;;;;;;;10534:9:129;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;7301:82:108;7272:10;:23;;;7296:1;7272:26;;;;;;;;:::i;:::-;;;;;;;;;;:111;7405:6;;7401:305;;7542:23;;;;7566:5;7570:1;7566;:5;:::i;:::-;7542:30;;;;;;;;:::i;:::-;;;;;;;7534:39;;7476:10;:23;;;7500:1;7476:26;;;;;;;;:::i;:::-;;;;;;;7468:35;;:105;7435:252;;;;;-1:-1:-1;;;7435:252:108;;29128:2:176;7435:252:108;;;29110:21:176;29147:18;;;29140:30;;;;-1:-1:-1;;;;;;;;;;;29186:18:176;;;29179:62;29277:34;29257:18;;;29250:62;29329:19;;7435:252:108;28926:428:176;7435:252:108;7846:19;-1:-1:-1;;;;;7846:76:108;;7961:10;:23;;;7985:1;7961:26;;;;;;;;:::i;:::-;;;;;;;8026:20;8079:6;:35;;;8115:1;8079:38;;;;;;;;:::i;:::-;;;;;;;7846:294;;;;;;;;;;;;;;;;29558:25:176;;;29602:10;29648:15;;;29643:2;29628:18;;29621:43;29700:15;29695:2;29680:18;;29673:43;29546:2;29531:18;;29359:363;7846:294:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7816:324:108;:10;:24;;;7841:1;7816:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8431:267;8461:219;8529:129;8613:19;8583:10;:24;;;8608:1;8583:27;;;;;;;;:::i;:::-;;;;;;;:49;8529:24;:129::i;:::-;8461:6;:23;;;8485:1;8461:26;;;;;;;;:::i;:::-;;;;;;;:42;;:219;;;;:::i;8431:267::-;8425:273;-1:-1:-1;7041:3:108;;;;:::i;:::-;;;;6985:1728;;;;6631:2092;8996:12;:3;:10;:12::i;:::-;9340:20;;8990:18;;-1:-1:-1;9340:20:108;;9311:26;9340:20;9406:97;;9502:1;9406:97;;;9446:10;-1:-1:-1;;;;;9446:35:108;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9374:129;;9523:9;9518:3499;9542:21;;;;;;;;;;;;;;;;;:28;9538:1;:32;9518:3499;;;9754:21;9750:486;;;10045:20;9832:233;;9993:21;9832:19;-1:-1:-1;;;;;9832:43:108;;9911:21;;;;;;;;;;;;;;;;;9933:1;9911:24;;;;;;;;:::i;:::-;;;;;9832:130;;-1:-1:-1;;;;;;9832:130:108;;;;;;;9911:24;;;;;9832:130;;;24899:36:176;24872:18;;9832:130:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:182;;;;:::i;:::-;:233;9799:418;;;;-1:-1:-1;;;9799:418:108;;29929:2:176;9799:418:108;;;29911:21:176;29968:3;29948:18;;;29941:31;-1:-1:-1;;;;;;;;;;;29988:18:176;;;29981:62;30079:34;30059:18;;;30052:62;30151:34;30130:19;;;30123:63;-1:-1:-1;;;30202:19:176;;;30195:37;30249:19;;9799:418:108;29727:547:176;9799:418:108;10504:14;-1:-1:-1;;;;;10504:46:108;;10601:21;;;;;;;;;;;;;;;;;10623:1;10601:24;;;;;;;;:::i;:::-;;;;;;;;;10595:31;;10669:20;10726:6;:23;;;10750:1;10726:26;;;;;;;;:::i;:::-;;;;;;;;;;;10504:275;;-1:-1:-1;;;;;;10504:275:108;;;;;;;30504:4:176;30492:17;;;10504:275:108;;;30474:36:176;10504:275:108;30575:15:176;;;30555:18;;;30548:43;30627:15;30607:18;;;30600:43;30447:18;;10504:275:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10433:346:108;;10441:34;:6;:17;;;10459:1;10441:20;;;;;;;;:::i;:34::-;-1:-1:-1;;10433:346:108;;10404:514;;;;-1:-1:-1;;;10404:514:108;;31155:2:176;10404:514:108;;;31137:21:176;31194:2;31174:18;;;31167:30;-1:-1:-1;;;;;;;;;;;31213:18:176;;;31206:62;31304:34;31284:18;;;31277:62;31376:34;31355:19;;;31348:63;-1:-1:-1;;;31427:19:176;;;31420:32;31469:19;;10404:514:108;30953:541:176;10404:514:108;10942:30;10951:6;:17;;;10969:1;10951:20;;;;;;;;:::i;:::-;;;;;;;10942:3;:8;;:30;;;;:::i;:::-;10936:36;;11126:13;-1:-1:-1;;;;;11126:70:108;;11243:21;;;;;;;;;;;;;;;;;11265:1;11243:24;;;;;;;;:::i;:::-;;;;;;;;;11237:31;;11307:20;11360:6;:24;;;11385:1;11360:27;;;;;;;;:::i;:::-;;;;;;;;;;;11126:284;;-1:-1:-1;;;;;;11126:284:108;;;;;;;30504:4:176;30492:17;;;11126:284:108;;;30474:36:176;11126:284:108;30575:15:176;;;30555:18;;;30548:43;30627:15;30607:18;;;30600:43;30447:18;;11126:284:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11089:11;:31;;;11121:1;11089:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11089:321:108;;;:34;;;;;;;;;;:321;11466:52;;;:55;;11519:1;;11466:55;;;;;;:::i;:::-;;;;;;;11428:11;:32;;;11461:1;11428:35;;;;;;;;:::i;:::-;;;;;;:93;-1:-1:-1;;;;;11428:93:108;;;-1:-1:-1;;;;;11428:93:108;;;;;11608:31;11891:9;11886:1117;11910:6;:23;;;:30;11906:1;:34;11886:1117;;;12107:161;12154:10;:24;;;12179:1;12154:27;;;;;;;;:::i;:::-;;;;;;;12217:21;;;;;;;;;;;;;;;;;12239:1;12217:24;;;;;;;;:::i;:::-;;;;;;;7387:13:130;;;7404:1;7386:19;;;7380:26;;7292:121;12107:161:108;12078:907;;;12356:13;-1:-1:-1;;;;;12356:72:108;;12483:21;;;;;;;;;;;;;;;;;12505:1;12483:24;;;;;;;;:::i;:::-;;;;;;;;;12477:31;;12555:20;12621:10;:23;;;12645:1;12621:26;;;;;;;;:::i;:::-;;;;;;;12688:6;:28;;;12717:1;12688:31;;;;;;;;:::i;:::-;;;;;;;12757:23;12688:126;;;;;;;;:::i;:::-;;;;;;;;;;;12356:489;;-1:-1:-1;;;;;;12356:489:108;;;;;;;32007:4:176;31995:17;;;12356:489:108;;;31977:36:176;12356:489:108;32078:15:176;;;32058:18;;;32051:43;32110:18;;;32103:34;;;;32173:15;32153:18;;;32146:43;31949:19;;12356:489:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12317:32;;:35;;12350:1;;12317:35;;;;;;:::i;:::-;;;;;;:528;;;;;;;:::i;:::-;-1:-1:-1;;;;;12317:528:108;;;-1:-1:-1;12911:25:108;;;;;12078:907;11942:3;;;;:::i;:::-;;;;11886:1117;;;;9577:3440;9572:3;;;;;:::i;:::-;;;;9518:3499;;;;9297:3730;;13104:22;13144:21;13182:170;13234:7;13263:3;13288:6;:12;;;13322:6;:12;;;13182:30;:170::i;:::-;13086:266;;;;13391:17;13366:143;;;;-1:-1:-1;;;13366:143:108;;32644:2:176;13366:143:108;;;32626:21:176;32683:2;32663:18;;;32656:30;-1:-1:-1;;;;;;;;;;;32702:18:176;;;32695:62;32793:34;32773:18;;;32766:62;-1:-1:-1;;;32844:19:176;;;32837:34;32888:19;;13366:143:108;32442:471:176;13366:143:108;13548:16;13523:132;;;;-1:-1:-1;;;13523:132:108;;33120:2:176;13523:132:108;;;33102:21:176;33159:2;33139:18;;;33132:30;-1:-1:-1;;;;;;;;;;;33178:18:176;;;33171:62;33269:27;33249:18;;;33242:55;33314:19;;13523:132:108;32918:421:176;13523:132:108;13036:630;;13740:27;13810:20;13832:10;:23;;;13793:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;13793:63:108;;;;;;13770:96;;13793:63;13770:96;;;;14025:11;;13770:96;;-1:-1:-1;4387:9678:108;;-1:-1:-1;;;;;;;4387:9678:108:o;2587:1343:171:-;2718:23;2770:9;2755:12;:24;2751:206;;;-1:-1:-1;2840:15:171;2751:206;;;2928:15;2945:10;2911:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2901:56;;;;;;2883:74;;2751:206;2989:29;;;;:12;:29;;;;;:46;;;:51;2968:125;;;;-1:-1:-1;;;2968:125:171;;34195:2:176;2968:125:171;;;34177:21:176;34234:2;34214:18;;;34207:30;34273:29;34253:18;;;34246:57;34320:18;;2968:125:171;33993:351:176;2968:125:171;3108:9;:13;3104:213;;3154:10;3137:28;;;;:16;:28;;;;;:41;;3169:9;;3137:28;:41;;3169:9;;3137:41;:::i;:::-;;;;-1:-1:-1;;3236:10:171;3264:28;;;;:16;:28;;;;;;;;;;3197:109;;425:25:176;;;3197:109:171;;398:18:176;3197:109:171;;;;;;;3104:213;3352:10;3366:1;3335:28;;;:16;:28;;;;;;3327:69;;;;-1:-1:-1;;;3327:69:171;;34551:2:176;3327:69:171;;;34533:21:176;34590:2;34570:18;;;34563:30;34629:26;34609:18;;;34602:54;34673:18;;3327:69:171;34349:348:176;3327:69:171;-1:-1:-1;;;;;;;;;;;;;;;;3446:50:171;3483:12;3446:50;;;;;3545:29;;;:12;:29;;;;;;;:42;;;;;;;;-1:-1:-1;;;3545:42:171;-1:-1:-1;;3545:42:171;;;;;;;;;;;;;3660:111;;-1:-1:-1;;3682:15:171;;3660:111;;;;3745:16;;;;3660:111;:::i;:::-;;;;;;;;3810:15;3786:137;3839:10;3870:12;3897:16;;3786:137;;;;;;;;;:::i;:::-;;;;;;;;2708:1222;;2587:1343;;;:::o;2071:101:41:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;11045:171:171:-;11156:4;11205;11189:11;;11179:22;;;;;;;:::i;:::-;;;;;;;;:30;11172:37;;11045:171;;;;;:::o;4797:260:114:-;1358:10;-1:-1:-1;;;;;1380:20:114;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:114;;;;;;;:::i;:::-;4986:64:::1;::::0;-1:-1:-1;;;4986:64:114;;-1:-1:-1;;;;;4986:13:114::1;:35;::::0;::::1;::::0;:64:::1;::::0;5022:8;;5032:17;;4986:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4797:260:::0;;:::o;5262:158::-;1358:10;-1:-1:-1;;;;;1380:20:114;1358:43;;1337:172;;;;-1:-1:-1;;;1337:172:114;;;;;;;:::i;:::-;5364:49:::1;::::0;-1:-1:-1;;;5364:49:114;;-1:-1:-1;;;;;14663:32:176;;;5364:49:114::1;::::0;::::1;14645:51:176::0;5364:13:114::1;:39;::::0;::::1;::::0;14618:18:176;;5364:49:114::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5262:158:::0;:::o;2721:148::-;1334:13:41;:11;:13::i;:::-;2814:48:114::1;::::0;-1:-1:-1;;;2814:48:114;;-1:-1:-1;;;;;2814:13:114::1;:34;::::0;::::1;::::0;:48:::1;::::0;2849:12;;2814:48:::1;;;:::i;6872:2727:171:-:0;7150:22;7175:9;7150:34;;7195:27;7265:15;7282:13;7248:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7248:48:171;;;;;;;;;7225:81;;7248:48;7225:81;;;;7564:33;;;;:12;:33;;;;;:50;7225:81;;-1:-1:-1;7564:50:171;;7543:122;;;;-1:-1:-1;;;7543:122:171;;21515:2:176;7543:122:171;;;21497:21:176;21554:2;21534:18;;;21527:30;-1:-1:-1;;;21573:18:176;;;21566:50;21633:18;;7543:122:171;21313:344:176;7543:122:171;7745:33;;;;:12;:33;;;;;:43;-1:-1:-1;;;7745:43:171;;;;:52;7724:122;;;;-1:-1:-1;;;7724:122:171;;21864:2:176;7724:122:171;;;21846:21:176;21903:2;21883:18;;;21876:30;-1:-1:-1;;;21922:18:176;;;21915:53;21985:18;;7724:122:171;21662:347:176;7724:122:171;-1:-1:-1;;;;;7865:31:171;;7899:1;7865:31;;;:16;:31;;;;;;7857:70;;;;-1:-1:-1;;;7857:70:171;;22216:2:176;7857:70:171;;;22198:21:176;22255:2;22235:18;;;22228:30;-1:-1:-1;;;22274:18:176;;;22267:52;22336:18;;7857:70:171;22014:346:176;7857:70:171;7938:33;;;;:12;:33;;;;;:50;;-1:-1:-1;;7938:50:171;;-1:-1:-1;;;7938:50:171;;;;:33;;8231:179;;7951:19;;8301:50;;8369:27;8231:15;:179::i;:::-;8123:287;;;;1293:2;8612:90;;:17;:37;;;8650:1;8612:40;;;;;;;;:::i;:::-;;;;;;;:90;;;;:::i;:::-;-1:-1:-1;;;;;8527:175:171;1230:3;8527:17;:38;;;8566:1;8527:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8527:65:171;;;;;:::i;:::-;:175;;8506:286;;;;-1:-1:-1;;;8506:286:171;;;;;;;:::i;:::-;8808:45;;-1:-1:-1;;;;;14663:32:176;;14645:51;;8822:15:171;;8808:45;;14633:2:176;14618:18;8808:45:171;;;;;;;9001:20;9024:9;9001:32;-1:-1:-1;9147:14:171;9206:11;9165:29;9001:32;9165:14;:29;:::i;:::-;:37;;9197:5;9165:37;:::i;:::-;9164:53;;;;:::i;:::-;-1:-1:-1;;;;;9249:31:171;;;;;;:16;:31;;;;;;9147:70;;-1:-1:-1;9249:41:171;-1:-1:-1;9249:41:171;9228:148;;;;-1:-1:-1;;;9228:148:171;;;;;;;:::i;:::-;-1:-1:-1;;;;;9387:31:171;;;;;;:16;:31;;;;;:41;;9422:6;;9387:31;:41;;9422:6;;9387:41;:::i;:::-;;;;-1:-1:-1;;;;;;;9443:103:171;;9505:31;;;;:16;:31;;;;;;;;;;9443:103;;425:25:176;;;9443:103:171;;398:18:176;9443:103:171;;;;;;;9556:36;;9564:10;;9556:36;;;;;9585:6;;9556:36;;;;9585:6;9564:10;9556:36;;;;;;;;;;;;;;;;;;;;;7140:2459;;;;;;6872:2727;;;:::o;6262:951:114:-;6321:16;6349:19;6371:20;-1:-1:-1;;;;;6371:32:114;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6349:56;;;-1:-1:-1;6420:16:114;6416:70;;-1:-1:-1;;6459:16:114;;;6473:1;6459:16;;;;;;;;;6262:951::o;6416:70::-;6496:21;;6527:129;6551:11;6547:1;:15;6527:129;;;6600:45;;-1:-1:-1;;;6600:45:114;;24929:4:176;24917:17;;6600:45:114;;;24899:36:176;6600:14:114;-1:-1:-1;;;;;6600:35:114;;;;24872:18:176;;6600:45:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6583:62;;;;:::i;:::-;;-1:-1:-1;6564:3:114;;;;:::i;:::-;;;;6527:129;;;;6666:35;6718:13;-1:-1:-1;;;;;6704:28:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6704:28:114;;6666:66;;6742:13;6774:9;6769:403;6793:20;-1:-1:-1;;;;;6793:32:114;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6789:38;;:1;:38;6769:403;;;6879:45;;-1:-1:-1;;;6879:45:114;;24929:4:176;24917:17;;6879:45:114;;;24899:36:176;6848:28:114;;6879:14;-1:-1:-1;;;;;6879:35:114;;;;24872:18:176;;6879:45:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6848:76;;6943:9;6938:224;6962:20;6958:1;:24;6938:224;;;7063:49;;-1:-1:-1;;;7063:49:114;;25475:4:176;25463:17;;7063:49:114;;;25445:36:176;25497:18;;;25490:34;;;7063:14:114;-1:-1:-1;;;;;7063:36:114;;;;25418:18:176;;7063:49:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;7007:18;7026:5;7007:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7007:115:114;;;:25;;;;;;;;;;;:115;7140:7;;;;:::i;:::-;;;;6984:3;;;;;:::i;:::-;;;;6938:224;;;;6834:338;6829:3;;;;;:::i;:::-;;;;6769:403;;;-1:-1:-1;7188:18:114;;6262:951;-1:-1:-1;;;;6262:951:114:o;2321:198:41:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:41;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:41;;38045:2:176;2401:73:41::1;::::0;::::1;38027:21:176::0;38084:2;38064:18;;;38057:30;38123:34;38103:18;;;38096:62;-1:-1:-1;;;38174:18:176;;;38167:36;38220:19;;2401:73:41::1;37843:402:176::0;2401:73:41::1;2484:28;2503:8;2484:18;:28::i;3631:872:114:-:0;1684:16;;-1:-1:-1;;;;;1684:16:114;1670:10;:30;1649:153;;;;-1:-1:-1;;;1649:153:114;;38452:2:176;1649:153:114;;;38434:21:176;38491:2;38471:18;;;38464:30;38530:34;38510:18;;;38503:62;38601:34;38581:18;;;38574:62;-1:-1:-1;;;38652:19:176;;;38645:43;38705:19;;1649:153:114;38250:480:176;1649:153:114;3815:9:::1;3810:610;3830:29:::0;;::::1;3810:610;;;4029:18;;4048:1;4029:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4029:40:114::1;;4070:10;4090:4;4097:18;;4116:1;4097:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;4029:97:::0;;-1:-1:-1;;;;;;4029:97:114::1;::::0;;;;;;-1:-1:-1;;;;;39748:15:176;;;4029:97:114::1;::::0;::::1;39730:34:176::0;39800:15;;;;39780:18;;;39773:43;4097:28:114::1;;39832:18:176::0;;;39825:34;39665:18;;4029:97:114::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4140:17;4176:18;;4195:1;4176:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;:82;::::0;-1:-1:-1;;;4176:82:114;;4222:4:::1;4176:82;::::0;::::1;40332:34:176::0;-1:-1:-1;;;;;4237:19:114::1;40402:15:176::0;;40382:18;;;40375:43;4176:37:114;;;::::1;::::0;::::1;::::0;40267:18:176;;4176:82:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4140:118;;4272:18;;4291:1;4272:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;::::0;;;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4272:35:114::1;;4333:19;4386:9;4355:18;;4374:1;4355:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;:40;;;;:::i;:::-;4272:137;::::0;-1:-1:-1;;;;;;4272:137:114::1;::::0;;;;;;-1:-1:-1;;;;;40621:32:176;;;4272:137:114::1;::::0;::::1;40603:51:176::0;40670:18;;;40663:34;40576:18;;4272:137:114::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3866:554;3861:3;;;;:::i;:::-;;;3810:610;;;-1:-1:-1::0;4430:66:114::1;::::0;-1:-1:-1;;;4430:66:114;;-1:-1:-1;;;;;4430:19:114::1;:46;::::0;::::1;::::0;:66:::1;::::0;4477:18;;;;4430:66:::1;;;:::i;1240:240:27:-:0;1395:4;1469;1418:47;1446:5;1453:4;1459:5;1418:27;:47::i;:::-;:55;;1240:240;-1:-1:-1;;;;;1240:240:27:o;7084:580:129:-;-1:-1:-1;;;;;;;;;;;;;;;;;7184:23:129;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:129;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:129;7557:48;;;;7530:75;;7557:48;7582:9;7530:75;;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:129;;43857:2:176;7624:33:129;;;43839:21:176;43896:2;43876:18;;;43869:30;-1:-1:-1;;;43915:18:176;;;43908:43;43968:18;;7624:33:129;43655:337:176;7624:33:129;7174:490;;7084:580;;;;:::o;4823:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4926:23:129;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:129;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:129;5330:48;;;;5303:75;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:129;;44199:2:176;5398:33:129;;;44181:21:176;44238:2;44218:18;;;44211:30;-1:-1:-1;;;44257:18:176;;;44250:43;44310:18;;5398:33:129;43997:337:176;4070:128:129;4119:14;;:::i;:::-;-1:-1:-1;4152:39:129;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;11044:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11123:12:129;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:129;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:129;-1:-1:-1;;;;;;;;;;;;11336:1:129;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:129:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:129;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:129;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:129;;-1:-1:-1;;;;;;;;;;9189:1112:129:o;5465:1257:130:-;5532:12;5650:15;5728:23;5764:20;5777:6;5764:12;:20::i;:::-;5754:31;;-1:-1:-1;;;;;5754:31:130;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5754:31:130;;5728:57;;5841:18;6093:9;6088:601;6122:10;:17;6109:10;:30;6108:45;;;;;6149:3;6145:1;:7;6108:45;6088:601;;;6252:1;:6;;;-1:-1:-1;6339:16:130;;;:21;6335:344;;6524:1;6511:16;;6486:10;6497;6486:22;;;;;;;;:::i;:::-;;;;:41;-1:-1:-1;;;;;6486:41:130;;;;;;;;;6650:12;;;;;6335:344;6155:3;;;:::i;:::-;;;6088:601;;1599:130:41;1513:6;;-1:-1:-1;;;;;1513:6:41;929:10:50;1662:23:41;1654:68;;;;-1:-1:-1;;;1654:68:41;;44541:2:176;1654:68:41;;;44523:21:176;;;44560:18;;;44553:30;44619:34;44599:18;;;44592:62;44671:18;;1654:68:41;44339:356:176;5740:200:114;5847:16;;5823:62;;;-1:-1:-1;;;;;5847:16:114;;;40332:34:176;;40402:15;;;40397:2;40382:18;;40375:43;5823:62:114;;40267:18:176;5823:62:114;;;;;;;5895:16;:38;;-1:-1:-1;;;;;;5895:38:114;-1:-1:-1;;;;;5895:38:114;;;;;;;;;;5740:200::o;15634:148:108:-;15699:20;:28;;-1:-1:-1;;15699:28:108;;;;;;;;;;15742:33;;3560:41:176;;;15742:33:108;;3548:2:176;3533:18;15742:33:108;;;;;;;15634:148;:::o;2311:238:114:-;4910:13:45;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:45;;44902:2:176;4902:69:45;;;44884:21:176;44941:2;44921:18;;;44914:30;44980:34;44960:18;;;44953:62;-1:-1:-1;;;45031:18:176;;;45024:41;45082:19;;4902:69:45;44700:407:176;4902:69:45;2461:32:114::1;2480:12;2461:18;:32::i;:::-;2503:39;2524:17;2503:20;:39::i;:::-;2311:238:::0;;:::o;3308:360:130:-;3419:7;3438:14;3455:44;3481:17;3455:25;:44::i;:::-;3438:61;;3541:6;3524:13;3519:18;;:1;:18;;3518:29;3510:127;;;;-1:-1:-1;;;3510:127:130;;45314:2:176;3510:127:130;;;45296:21:176;45353:2;45333:18;;;45326:30;45392:34;45372:18;;;45365:62;45463:33;45443:18;;;45436:61;45514:19;;3510:127:130;45112:427:176;3510:127:130;3655:6;-1:-1:-1;3308:360:130;;;;;:::o;6797:406::-;6853:6;;6897:209;6904:5;;6897:209;;6931:5;6935:1;6931;:5;:::i;:::-;6925:12;;;;7020:7;;;;:::i;:::-;;;;6897:209;;5698:1197:129;-1:-1:-1;;;;;;;;;;;;;;;;;5824:4:129;5820:1;:8;;;5812:37;;;;-1:-1:-1;;;5812:37:129;;45948:2:176;5812:37:129;;;45930:21:176;45987:2;45967:18;;;45960:30;-1:-1:-1;;;46006:18:176;;;45999:46;46062:18;;5812:37:129;45746:340:176;5812:37:129;5893:1;:6;;5898:1;5893:6;5890:44;;;-1:-1:-1;5922:1:129;5915:8;;5890:44;6016:19;;;;;;;;;5989:24;6016:19;;;;;;;;;6145:1;;6208;;6337:481;6348:1;6343:6;;:1;:6;;;6337:481;;6493:1;6483:6;;;;;;;6482:12;;:17;6478:84;;;6529:14;6534:3;6539;6529:4;:14::i;:::-;6523:20;;6478:84;6644:14;6649:3;6654;6644:4;:14::i;:::-;6638:20;-1:-1:-1;6765:7:129;6771:1;6765:7;;;;;6790:3;6337:481;;;-1:-1:-1;6885:3:129;;5698:1197;-1:-1:-1;;;;;5698:1197:129:o;4461:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4600:3:129;;:8;:20;;;;-1:-1:-1;4612:3:129;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:129;;;;;;;;;-1:-1:-1;4643:13:129;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:129;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:129;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:129:o;4596:154::-;4461:295;;;:::o;2673:187:41:-;2765:6;;;-1:-1:-1;;;;;2781:17:41;;;-1:-1:-1;;;;;;2781:17:41;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1997:1172:27:-;2136:7;2191:2;2176:5;:12;:17;;;;:::i;:::-;:22;2155:144;;;;-1:-1:-1;;;2155:144:27;;46293:2:176;2155:144:27;;;46275:21:176;46332:2;46312:18;;;46305:30;46371:34;46351:18;;;46344:62;46442:34;46422:18;;;46415:62;-1:-1:-1;;;46493:19:176;;;46486:42;46545:19;;2155:144:27;46091:479:176;2155:144:27;2332:4;2363:2;2346:788;2372:5;:12;2367:1;:17;2346:788;;2413:9;2421:1;2413:5;:9;:::i;:::-;2409:715;;2572:12;2566:4;2559:26;2636:1;2629:5;2625:13;2619:20;2613:4;2606:34;2693:4;2687;2677:21;2661:37;;2739:1;2732:5;2728:13;2719:22;;2409:715;;;2940:1;2933:5;2929:13;2923:20;2917:4;2910:34;2978:12;2972:4;2965:26;3044:4;3038;3028:21;3012:37;;3090:1;3083:5;3079:13;3070:22;;2409:715;2386:7;2391:2;2386:7;;:::i;:::-;;;2346:788;;11616:433:129;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:129;-1:-1:-1;;;;;;;;;;;11785:1:129;-1:-1:-1;;;;;;;;;;;11769:1:129;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:129;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:129;;-1:-1:-1;;;11616:433:129:o;1188:1693:130:-;1278:7;571:3;1409:17;:24;:49;;1401:142;;;;-1:-1:-1;;;1401:142:130;;46777:2:176;1401:142:130;;;46759:21:176;46816:2;46796:18;;;46789:30;;;46855:34;46835:18;;;46828:62;46926:34;46906:18;;;46899:62;-1:-1:-1;;;46977:19:176;;;46970:35;47022:19;;1401:142:130;46575:472:176;1401:142:130;1619:24;;1615:77;;-1:-1:-1;1679:1:130;;1188:1693;-1:-1:-1;1188:1693:130:o;1615:77::-;1770:14;1873:15;2180:17;2198:1;2180:20;;;;;;;;:::i;:::-;;;;;2169:1;2180:20;;;;;2169:32;;;;-1:-1:-1;2284:568:130;2308:17;:24;2304:1;:28;2284:568;;;2480:17;2498:1;2480:20;;;;;;;;:::i;:::-;;;;;2469:1;2480:20;;;;;2469:32;;-1:-1:-1;2665:16:130;;;2657:100;;;;-1:-1:-1;;;2657:100:130;;47254:2:176;2657:100:130;;;47236:21:176;47293:2;47273:18;;;47266:30;47332:34;47312:18;;;47305:62;47403:34;47383:18;;;47376:62;-1:-1:-1;;;47454:19:176;;;47447:38;47502:19;;2657:100:130;47052:475:176;2657:100:130;2824:16;;;;2334:3;;;:::i;:::-;;;2284:568;;;-1:-1:-1;2868:6:130;;1188:1693;-1:-1:-1;;;1188:1693:130:o;12055:874:129:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:129;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:129;;47734:2:176;12850:46:129;;;47716:21:176;47773:2;47753:18;;;47746:30;47812:28;47792:18;;;47785:56;47858:18;;12850:46:129;47532:350:176;12850:46:129;-1:-1:-1;12913:9:129;;;-1:-1:-1;;;;;12055:874:129:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:176:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:176;;146:128::o;461:127::-;522:10;517:3;513:20;510:1;503:31;553:4;550:1;543:15;577:4;574:1;567:15;593:257;665:4;659:11;;;697:17;;-1:-1:-1;;;;;729:34:176;;765:22;;;726:62;723:88;;;791:18;;:::i;:::-;827:4;820:24;593:257;:::o;1111:255::-;1183:2;1177:9;1225:6;1213:19;;-1:-1:-1;;;;;1247:34:176;;1283:22;;;1244:62;1241:88;;;1309:18;;:::i;1371:275::-;1442:2;1436:9;1507:2;1488:13;;-1:-1:-1;;1484:27:176;1472:40;;-1:-1:-1;;;;;1527:34:176;;1563:22;;;1524:62;1521:88;;;1589:18;;:::i;:::-;1625:2;1618:22;1371:275;;-1:-1:-1;1371:275:176:o;1651:406::-;1715:5;-1:-1:-1;;;;;1741:6:176;1738:30;1735:56;;;1771:18;;:::i;:::-;1809:57;1854:2;1833:15;;-1:-1:-1;;1829:29:176;1860:4;1825:40;1809:57;:::i;:::-;1800:66;;1889:6;1882:5;1875:21;1929:3;1920:6;1915:3;1911:16;1908:25;1905:45;;;1946:1;1943;1936:12;1905:45;1995:6;1990:3;1983:4;1976:5;1972:16;1959:43;2049:1;2042:4;2033:6;2026:5;2022:18;2018:29;2011:40;1651:406;;;;;:::o;2062:220::-;2104:5;2157:3;2150:4;2142:6;2138:17;2134:27;2124:55;;2175:1;2172;2165:12;2124:55;2197:79;2272:3;2263:6;2250:20;2243:4;2235:6;2231:17;2197:79;:::i;:::-;2188:88;2062:220;-1:-1:-1;;;2062:220:176:o;2287:131::-;-1:-1:-1;;;;;2362:31:176;;2352:42;;2342:70;;2408:1;2405;2398:12;2423:992;2554:6;2562;2570;2578;2586;2594;2602;2610;2663:3;2651:9;2642:7;2638:23;2634:33;2631:53;;;2680:1;2677;2670:12;2631:53;2703:23;;;-1:-1:-1;2773:2:176;2758:18;;2745:32;;-1:-1:-1;2824:2:176;2809:18;;2796:32;;-1:-1:-1;2878:2:176;2863:18;;2850:32;-1:-1:-1;;;;;;2911:43:176;;2901:54;;2891:82;;2969:1;2966;2959:12;2891:82;2992:5;-1:-1:-1;3044:3:176;3029:19;;3016:33;;-1:-1:-1;3100:3:176;3085:19;;3072:33;-1:-1:-1;;;;;3117:30:176;;3114:50;;;3160:1;3157;3150:12;3114:50;3183:49;3224:7;3215:6;3204:9;3200:22;3183:49;:::i;:::-;3173:59;;;3279:3;3268:9;3264:19;3251:33;3241:43;;3336:3;3325:9;3321:19;3308:33;3350;3375:7;3350:33;:::i;:::-;3402:7;3392:17;;;2423:992;;;;;;;;;;;:::o;3612:282::-;3666:5;3714:4;3702:9;3697:3;3693:19;3689:30;3686:50;;;3732:1;3729;3722:12;3686:50;3754:22;;:::i;:::-;3745:31;;3812:9;3799:23;3792:5;3785:38;3883:2;3872:9;3868:18;3855:32;3850:2;3843:5;3839:14;3832:56;3612:282;;;;:::o;3899:484::-;3949:5;4002:3;3995:4;3987:6;3983:17;3979:27;3969:55;;4020:1;4017;4010:12;3969:55;4044:22;;:::i;:::-;4088:3;4126:2;4118:6;4114:15;4152:3;4144:6;4141:15;4138:35;;;4169:1;4166;4159:12;4138:35;4193:6;4208:146;4224:6;4219:3;4216:15;4208:146;;;4292:17;;4280:30;;4339:4;4330:14;;;;4241;4208:146;;;-1:-1:-1;4372:5:176;;3899:484;-1:-1:-1;;;;;3899:484:176:o;4388:320::-;4442:5;4490:4;4478:9;4473:3;4469:19;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4530:22;;:::i;:::-;4521:31;;4575:40;4611:3;4600:9;4575:40;:::i;:::-;4568:5;4561:55;4650:51;4697:3;4690:4;4679:9;4675:20;4650:51;:::i;:::-;4643:4;4636:5;4632:16;4625:77;4388:320;;;;:::o;4713:530::-;4877:6;4885;4893;4901;4954:3;4942:9;4933:7;4929:23;4925:33;4922:53;;;4971:1;4968;4961:12;4922:53;5007:9;4994:23;4984:33;;5036:54;5082:7;5077:2;5066:9;5062:18;5036:54;:::i;:::-;5026:64;;5109:54;5155:7;5150:2;5139:9;5135:18;5109:54;:::i;:::-;5099:64;;5182:55;5229:7;5223:3;5212:9;5208:19;5182:55;:::i;:::-;5172:65;;4713:530;;;;;;;:::o;5521:182::-;5580:4;-1:-1:-1;;;;;5605:6:176;5602:30;5599:56;;;5635:18;;:::i;:::-;-1:-1:-1;5680:1:176;5676:14;5692:4;5672:25;;5521:182::o;5708:163::-;5775:20;;5835:10;5824:22;;5814:33;;5804:61;;5861:1;5858;5851:12;5876:665;5929:5;5982:3;5975:4;5967:6;5963:17;5959:27;5949:55;;6000:1;5997;5990:12;5949:55;6036:6;6023:20;6062:4;6086:59;6102:42;6141:2;6102:42;:::i;:::-;6086:59;:::i;:::-;6179:15;;;6265:1;6261:10;;;;6249:23;;6245:32;;;6210:12;;;;6289:15;;;6286:35;;;6317:1;6314;6307:12;6286:35;6353:2;6345:6;6341:15;6365:147;6381:6;6376:3;6373:15;6365:147;;;6447:22;6465:3;6447:22;:::i;:::-;6435:35;;6490:12;;;;6398;;6365:147;;;-1:-1:-1;6530:5:176;5876:665;-1:-1:-1;;;;;;5876:665:176:o;6546:688::-;6607:5;6660:3;6653:4;6645:6;6641:17;6637:27;6627:55;;6678:1;6675;6668:12;6627:55;6714:6;6701:20;6740:4;6764:59;6780:42;6819:2;6780:42;:::i;6764:59::-;6857:15;;;6943:1;6939:10;;;;6927:23;;6923:32;;;6888:12;;;;6967:15;;;6964:35;;;6995:1;6992;6985:12;6964:35;7031:2;7023:6;7019:15;7043:162;7059:6;7054:3;7051:15;7043:162;;;7127:35;7158:3;7153;7127:35;:::i;:::-;7115:48;;7183:12;;;;7085:4;7076:14;7043:162;;7239:907;7302:5;7355:3;7348:4;7340:6;7336:17;7332:27;7322:55;;7373:1;7370;7363:12;7322:55;7409:6;7396:20;7435:4;7459:59;7475:42;7514:2;7475:42;:::i;7459:59::-;7552:15;;;7638:1;7634:10;;;;7622:23;;7618:32;;;7583:12;;;;7662:15;;;7659:35;;;7690:1;7687;7680:12;7659:35;7726:2;7718:6;7714:15;7738:379;7754:6;7749:3;7746:15;7738:379;;;7840:3;7827:17;-1:-1:-1;;;;;7863:11:176;7860:35;7857:125;;;7936:1;7965:2;7961;7954:14;7857:125;8007:67;8070:3;8065:2;8051:11;8043:6;8039:24;8035:33;8007:67;:::i;:::-;7995:80;;-1:-1:-1;8095:12:176;;;;7771;;7738:379;;8151:1566;8225:5;8273:6;8261:9;8256:3;8252:19;8248:32;8245:52;;;8293:1;8290;8283:12;8245:52;8315:22;;:::i;:::-;8306:31;;8373:9;8360:23;-1:-1:-1;;;;;8443:2:176;8435:6;8432:14;8429:34;;;8459:1;8456;8449:12;8429:34;8486:56;8538:3;8529:6;8518:9;8514:22;8486:56;:::i;:::-;8479:5;8472:71;8596:2;8585:9;8581:18;8568:32;8552:48;;8625:2;8615:8;8612:16;8609:36;;;8641:1;8638;8631:12;8609:36;8677:66;8739:3;8728:8;8717:9;8713:24;8677:66;:::i;:::-;8672:2;8665:5;8661:14;8654:90;8797:2;8786:9;8782:18;8769:32;8753:48;;8826:2;8816:8;8813:16;8810:36;;;8842:1;8839;8832:12;8810:36;8878:66;8940:3;8929:8;8918:9;8914:24;8878:66;:::i;:::-;8873:2;8866:5;8862:14;8855:90;8977:50;9023:3;9018:2;9007:9;9003:18;8977:50;:::i;:::-;8972:2;8965:5;8961:14;8954:74;9062:51;9109:3;9103;9092:9;9088:19;9062:51;:::i;:::-;9055:4;9048:5;9044:16;9037:77;9167:3;9156:9;9152:19;9139:33;9123:49;;9197:2;9187:8;9184:16;9181:36;;;9213:1;9210;9203:12;9181:36;9251:58;9305:3;9294:8;9283:9;9279:24;9251:58;:::i;:::-;9244:4;9237:5;9233:16;9226:84;9363:3;9352:9;9348:19;9335:33;9319:49;;9393:2;9383:8;9380:16;9377:36;;;9409:1;9406;9399:12;9377:36;9447:58;9501:3;9490:8;9479:9;9475:24;9447:58;:::i;:::-;9440:4;9433:5;9429:16;9422:84;9559:3;9548:9;9544:19;9531:33;9515:49;;9589:2;9579:8;9576:16;9573:36;;;9605:1;9602;9595:12;9573:36;;9642:68;9706:3;9695:8;9684:9;9680:24;9642:68;:::i;:::-;9636:3;9629:5;9625:15;9618:93;;8151:1566;;;;:::o;9722:454::-;9836:6;9844;9897:2;9885:9;9876:7;9872:23;9868:32;9865:52;;;9913:1;9910;9903:12;9865:52;9949:9;9936:23;9926:33;;10010:2;9999:9;9995:18;9982:32;-1:-1:-1;;;;;10029:6:176;10026:30;10023:50;;;10069:1;10066;10059:12;10023:50;10092:78;10162:7;10153:6;10142:9;10138:22;10092:78;:::i;:::-;10082:88;;;9722:454;;;;;:::o;10181:247::-;10240:6;10293:2;10281:9;10272:7;10268:23;10264:32;10261:52;;;10309:1;10306;10299:12;10261:52;10348:9;10335:23;10367:31;10392:5;10367:31;:::i;10433:658::-;10604:2;10656:21;;;10726:13;;10629:18;;;10748:22;;;10575:4;;10604:2;10827:15;;;;10801:2;10786:18;;;10575:4;10870:195;10884:6;10881:1;10878:13;10870:195;;;10949:13;;-1:-1:-1;;;;;10945:39:176;10933:52;;11040:15;;;;11005:12;;;;10981:1;10899:9;10870:195;;;-1:-1:-1;11082:3:176;;10433:658;-1:-1:-1;;;;;;10433:658:176:o;11096:118::-;11182:5;11175:13;11168:21;11161:5;11158:32;11148:60;;11204:1;11201;11194:12;11219:241;11275:6;11328:2;11316:9;11307:7;11303:23;11299:32;11296:52;;;11344:1;11341;11334:12;11296:52;11383:9;11370:23;11402:28;11424:5;11402:28;:::i;11465:388::-;11533:6;11541;11594:2;11582:9;11573:7;11569:23;11565:32;11562:52;;;11610:1;11607;11600:12;11562:52;11649:9;11636:23;11668:31;11693:5;11668:31;:::i;:::-;11718:5;-1:-1:-1;11775:2:176;11760:18;;11747:32;11788:33;11747:32;11788:33;:::i;:::-;11840:7;11830:17;;;11465:388;;;;;:::o;11858:526::-;11980:6;11988;11996;12049:2;12037:9;12028:7;12024:23;12020:32;12017:52;;;12065:1;12062;12055:12;12017:52;12101:9;12088:23;12078:33;;12130:37;12163:2;12152:9;12148:18;12130:37;:::i;:::-;12120:47;;12218:2;12207:9;12203:18;12190:32;-1:-1:-1;;;;;12237:6:176;12234:30;12231:50;;;12277:1;12274;12267:12;12231:50;12300:78;12370:7;12361:6;12350:9;12346:22;12300:78;:::i;:::-;12290:88;;;11858:526;;;;;:::o;12389:467::-;12441:3;12479:5;12473:12;12506:6;12501:3;12494:19;12532:4;12561:2;12556:3;12552:12;12545:19;;12598:2;12591:5;12587:14;12619:1;12629:202;12643:6;12640:1;12637:13;12629:202;;;12708:13;;-1:-1:-1;;;;;12704:46:176;12692:59;;12771:12;;;;12806:15;;;;12665:1;12658:9;12629:202;;;-1:-1:-1;12847:3:176;;12389:467;-1:-1:-1;;;;;12389:467:176:o;12861:645::-;13090:2;13079:9;13072:21;13053:4;13128:6;13122:13;13171:2;13166;13155:9;13151:18;13144:30;13197:62;13254:3;13243:9;13239:19;13225:12;13197:62;:::i;:::-;13183:76;;13308:4;13300:6;13296:17;13290:24;13382:2;13378:7;13366:9;13358:6;13354:22;13350:36;13345:2;13334:9;13330:18;13323:64;13404:51;13448:6;13432:14;13404:51;:::i;:::-;13396:59;;;;13493:6;13486:4;13475:9;13471:20;13464:36;12861:645;;;;;:::o;13511:348::-;13563:8;13573:6;13627:3;13620:4;13612:6;13608:17;13604:27;13594:55;;13645:1;13642;13635:12;13594:55;-1:-1:-1;13668:20:176;;-1:-1:-1;;;;;13700:30:176;;13697:50;;;13743:1;13740;13733:12;13697:50;13780:4;13772:6;13768:17;13756:29;;13832:3;13825:4;13816:6;13808;13804:19;13800:30;13797:39;13794:59;;;13849:1;13846;13839:12;13794:59;13511:348;;;;;:::o;13864:479::-;13944:6;13952;13960;14013:2;14001:9;13992:7;13988:23;13984:32;13981:52;;;14029:1;14026;14019:12;13981:52;14065:9;14052:23;14042:33;;14126:2;14115:9;14111:18;14098:32;-1:-1:-1;;;;;14145:6:176;14142:30;14139:50;;;14185:1;14182;14175:12;14139:50;14224:59;14275:7;14266:6;14255:9;14251:22;14224:59;:::i;:::-;13864:479;;14302:8;;-1:-1:-1;14198:85:176;;-1:-1:-1;;;;13864:479:176:o;15385:478::-;15464:6;15472;15480;15533:2;15521:9;15512:7;15508:23;15504:32;15501:52;;;15549:1;15546;15539:12;15501:52;15589:9;15576:23;-1:-1:-1;;;;;15614:6:176;15611:30;15608:50;;;15654:1;15651;15644:12;15608:50;15693:59;15744:7;15735:6;15724:9;15720:22;15693:59;:::i;:::-;15771:8;;15667:85;;-1:-1:-1;15853:2:176;15838:18;;;;15825:32;;15385:478;-1:-1:-1;;;;15385:478:176:o;15868:1026::-;15980:6;15988;16041:2;16029:9;16020:7;16016:23;16012:32;16009:52;;;16057:1;16054;16047:12;16009:52;16096:9;16083:23;16115:31;16140:5;16115:31;:::i;:::-;16165:5;-1:-1:-1;16221:2:176;16206:18;;16193:32;-1:-1:-1;;;;;16274:14:176;;;16271:34;;;16301:1;16298;16291:12;16271:34;16324:22;;;;16380:4;16362:16;;;16358:27;16355:47;;;16398:1;16395;16388:12;16355:47;16431:2;16425:9;16473:4;16465:6;16461:17;16528:6;16516:10;16513:22;16508:2;16496:10;16493:18;16490:46;16487:72;;;16539:18;;:::i;:::-;16575:2;16568:22;16615:16;;16643;;;16640:36;;;16672:1;16669;16662:12;16640:36;16700:44;16736:7;16725:8;16721:2;16717:17;16700:44;:::i;:::-;16692:6;16685:60;;16799:2;16795;16791:11;16778:25;16773:2;16765:6;16761:15;16754:50;16858:2;16854;16850:11;16837:25;16832:2;16824:6;16820:15;16813:50;16882:6;16872:16;;;;;15868:1026;;;;;:::o;16899:450::-;16968:6;17021:2;17009:9;17000:7;16996:23;16992:32;16989:52;;;17037:1;17034;17027:12;16989:52;17077:9;17064:23;-1:-1:-1;;;;;17102:6:176;17099:30;17096:50;;;17142:1;17139;17132:12;17096:50;17165:22;;17218:4;17210:13;;17206:27;-1:-1:-1;17196:55:176;;17247:1;17244;17237:12;17196:55;17270:73;17335:7;17330:2;17317:16;17312:2;17308;17304:11;17270:73;:::i;:::-;17260:83;16899:450;-1:-1:-1;;;;16899:450:176:o;17354:589::-;17477:6;17485;17493;17546:2;17534:9;17525:7;17521:23;17517:32;17514:52;;;17562:1;17559;17552:12;17514:52;17598:9;17585:23;17575:33;;17658:2;17647:9;17643:18;17630:32;17671:31;17696:5;17671:31;:::i;17948:180::-;18007:6;18060:2;18048:9;18039:7;18035:23;18031:32;18028:52;;;18076:1;18073;18066:12;18028:52;-1:-1:-1;18099:23:176;;17948:180;-1:-1:-1;17948:180:176:o;18745:652::-;18868:6;18876;18929:2;18917:9;18908:7;18904:23;18900:32;18897:52;;;18945:1;18942;18935:12;18897:52;18985:9;18972:23;-1:-1:-1;;;;;19055:2:176;19047:6;19044:14;19041:34;;;19071:1;19068;19061:12;19041:34;19109:6;19098:9;19094:22;19084:32;;19154:7;19147:4;19143:2;19139:13;19135:27;19125:55;;19176:1;19173;19166:12;19125:55;19216:2;19203:16;19242:2;19234:6;19231:14;19228:34;;;19258:1;19255;19248:12;19228:34;19311:7;19306:2;19296:6;19293:1;19289:14;19285:2;19281:23;19277:32;19274:45;19271:65;;;19332:1;19329;19322:12;19271:65;19363:2;19355:11;;;;;19385:6;;-1:-1:-1;18745:652:176;;-1:-1:-1;;;;18745:652:176:o;19402:294::-;19559:19;;;19616:2;19612:15;-1:-1:-1;;;;;;19608:53:176;19603:2;19594:12;;19587:75;19687:2;19678:12;;19402:294::o;20122:127::-;20183:10;20178:3;20174:20;20171:1;20164:31;20214:4;20211:1;20204:15;20238:4;20235:1;20228:15;21099:209;21131:1;21157;21147:132;;21201:10;21196:3;21192:20;21189:1;21182:31;21236:4;21233:1;21226:15;21264:4;21261:1;21254:15;21147:132;-1:-1:-1;21293:9:176;;21099:209::o;22365:278::-;22404:7;-1:-1:-1;;;;;22489:2:176;22486:1;22482:10;22519:2;22516:1;22512:10;22575:3;22571:2;22567:12;22562:3;22559:21;22552:3;22545:11;22538:19;22534:47;22531:73;;;22584:18;;:::i;:::-;22624:13;;22365:278;-1:-1:-1;;;;22365:278:176:o;22648:168::-;22688:7;22754:1;22750;22746:6;22742:14;22739:1;22736:21;22731:1;22724:9;22717:17;22713:45;22710:71;;;22761:18;;:::i;:::-;-1:-1:-1;22801:9:176;;22648:168::o;22821:428::-;23023:2;23005:21;;;23062:2;23042:18;;;23035:30;;;23101:34;23081:18;;;23074:62;23172:34;23167:2;23152:18;;23145:62;23239:3;23224:19;;22821:428::o;23254:125::-;23294:4;23322:1;23319;23316:8;23313:34;;;23327:18;;:::i;:::-;-1:-1:-1;23364:9:176;;23254:125::o;23384:424::-;23586:2;23568:21;;;23625:2;23605:18;;;23598:30;23664:34;23659:2;23644:18;;23637:62;23735:30;23730:2;23715:18;;23708:58;23798:3;23783:19;;23384:424::o;23813:184::-;23883:6;23936:2;23924:9;23915:7;23911:23;23907:32;23904:52;;;23952:1;23949;23942:12;23904:52;-1:-1:-1;23975:16:176;;23813:184;-1:-1:-1;23813:184:176:o;24184:290::-;24254:6;24307:2;24295:9;24286:7;24282:23;24278:32;24275:52;;;24323:1;24320;24313:12;24275:52;24349:16;;-1:-1:-1;;;;;24394:31:176;;24384:42;;24374:70;;24440:1;24437;24430:12;24479:273;24547:6;24600:2;24588:9;24579:7;24575:23;24571:32;24568:52;;;24616:1;24613;24606:12;24568:52;24648:9;24642:16;24698:4;24691:5;24687:16;24680:5;24677:27;24667:55;;24718:1;24715;24708:12;25135:135;25174:3;-1:-1:-1;;25195:17:176;;25192:43;;;25215:18;;:::i;:::-;-1:-1:-1;25262:1:176;25251:13;;25135:135::o;25535:137::-;-1:-1:-1;;;;;25613:5:176;25609:38;25602:5;25599:49;25589:77;;25662:1;25659;25652:12;25677:493;25780:6;25833:2;25821:9;25812:7;25808:23;25804:32;25801:52;;;25849:1;25846;25839:12;25801:52;25875:22;;:::i;:::-;25927:9;25921:16;25946:33;25971:7;25946:33;:::i;:::-;25988:22;;26055:2;26040:18;;26034:25;26068:32;26034:25;26068:32;:::i;:::-;26127:2;26116:14;;26109:31;26120:5;25677:493;-1:-1:-1;;;25677:493:176:o;26175:251::-;26245:6;26298:2;26286:9;26277:7;26273:23;26269:32;26266:52;;;26314:1;26311;26304:12;26266:52;26346:9;26340:16;26365:31;26390:5;26365:31;:::i;30654:294::-;30724:6;30777:2;30765:9;30756:7;30752:23;30748:32;30745:52;;;30793:1;30790;30783:12;30745:52;30819:16;;-1:-1:-1;;30864:35:176;;30854:46;;30844:74;;30914:1;30911;30904:12;31499:249;31568:6;31621:2;31609:9;31600:7;31596:23;31592:32;31589:52;;;31637:1;31634;31627:12;31589:52;31669:9;31663:16;31688:30;31712:5;31688:30;:::i;32200:237::-;32239:4;-1:-1:-1;;;;;32344:10:176;;;;32314;;32366:12;;;32363:38;;;32381:18;;:::i;:::-;32418:13;;32200:237;-1:-1:-1;;;32200:237:176:o;33344:644::-;33592:10;33587:3;33583:20;33574:6;33569:3;33565:16;33561:43;33556:3;33549:56;33531:3;33636:1;33631:3;33627:11;33667:6;33661:13;33716:4;33755:2;33747:6;33743:15;33776:1;33786:175;33800:6;33797:1;33794:13;33786:175;;;33863:13;;33849:28;;33899:14;;;;33936:15;;;;33822:1;33815:9;33786:175;;;-1:-1:-1;33977:5:176;;33344:644;-1:-1:-1;;;;;;;33344:644:176:o;34702:267::-;34791:6;34786:3;34779:19;34843:6;34836:5;34829:4;34824:3;34820:14;34807:43;-1:-1:-1;34895:1:176;34870:16;;;34888:4;34866:27;;;34859:38;;;;34951:2;34930:15;;;-1:-1:-1;;34926:29:176;34917:39;;;34913:50;;34702:267::o;34974:333::-;35171:10;35163:6;35159:23;35148:9;35141:42;35219:2;35214;35203:9;35199:18;35192:30;35122:4;35239:62;35297:2;35286:9;35282:18;35274:6;35266;35239:62;:::i;:::-;35231:70;34974:333;-1:-1:-1;;;;;34974:333:176:o;35312:430::-;-1:-1:-1;;;;;35525:32:176;;35507:51;;35606:10;35594:23;;35589:2;35574:18;;35567:51;35654:2;35649;35634:18;;35627:30;;;-1:-1:-1;;35674:62:176;;35717:18;;35709:6;35701;35674:62;:::i;:::-;35666:70;35312:430;-1:-1:-1;;;;;;35312:430:176:o;35747:271::-;35930:6;35922;35917:3;35904:33;35886:3;35956:16;;35981:13;;;35956:16;35747:271;-1:-1:-1;35747:271:176:o;36023:486::-;36225:2;36207:21;;;36264:2;36244:18;;;36237:30;36303:34;36298:2;36283:18;;36276:62;36374:34;36369:2;36354:18;;36347:62;-1:-1:-1;;;36440:3:176;36425:19;;36418:49;36499:3;36484:19;;36023:486::o;36514:471::-;36555:3;36593:5;36587:12;36620:6;36615:3;36608:19;36645:1;36655:162;36669:6;36666:1;36663:13;36655:162;;;36731:4;36787:13;;;36783:22;;36777:29;36759:11;;;36755:20;;36748:59;36684:12;36655:162;;;36835:6;36832:1;36829:13;36826:87;;;36901:1;36894:4;36885:6;36880:3;36876:16;36872:27;36865:38;36826:87;-1:-1:-1;36967:2:176;36946:15;-1:-1:-1;;36942:29:176;36933:39;;;;36974:4;36929:50;;36514:471;-1:-1:-1;;36514:471:176:o;36990:624::-;37264:1;37260;37255:3;37251:11;37247:19;37239:6;37235:32;37224:9;37217:51;37304:2;37299;37288:9;37284:18;37277:30;37198:4;37342:6;37336:13;37385:4;37380:2;37369:9;37365:18;37358:32;37413:51;37459:3;37448:9;37444:19;37430:12;37413:51;:::i;:::-;37399:65;;37520:2;37512:6;37508:15;37502:22;37495:4;37484:9;37480:20;37473:52;37580:2;37572:6;37568:15;37562:22;37556:3;37545:9;37541:19;37534:51;37602:6;37594:14;;;36990:624;;;;;:::o;37619:219::-;37768:2;37757:9;37750:21;37731:4;37788:44;37828:2;37817:9;37813:18;37805:6;37788:44;:::i;38735:335::-;38838:4;38896:11;38883:25;38990:3;38986:8;38975;38959:14;38955:29;38951:44;38931:18;38927:69;38917:97;;39010:1;39007;39000:12;38917:97;39031:33;;;;;38735:335;-1:-1:-1;;38735:335:176:o;39075:142::-;39151:20;;39180:31;39151:20;39180:31;:::i;39870:245::-;39937:6;39990:2;39978:9;39969:7;39965:23;39961:32;39958:52;;;40006:1;40003;39996:12;39958:52;40038:9;40032:16;40057:28;40079:5;40057:28;:::i;40708:756::-;40838:6;40833:3;40826:19;40808:3;40864:4;40893:2;40888:3;40884:12;40877:19;;40919:5;40942:1;40952:487;40966:6;40963:1;40960:13;40952:487;;;41043:6;41030:20;41063:33;41088:7;41063:33;:::i;:::-;-1:-1:-1;;;;;41121:33:176;41109:46;;41196:15;;;41183:29;41225:32;41183:29;41225:32;:::i;:::-;-1:-1:-1;;;;;41291:40:176;41277:12;;;41270:62;41355:4;41379:12;;;;41414:15;;;;;40988:1;40981:9;40952:487;;41469:2181;41722:2;41774:21;;;41747:18;;;41830:22;;;41693:4;;41871:2;41889:18;;;41953:1;41949:14;;;41934:30;;41930:39;;41992:6;41693:4;42026:1595;42040:6;42037:1;42034:13;42026:1595;;;42105:22;;;-1:-1:-1;;42101:36:176;42089:49;;42177:20;;42252:14;42248:27;;;-1:-1:-1;;42244:42:176;42220:67;;42210:95;;42301:1;42298;42291:12;42210:95;42331:31;;42385:4;42430:19;;42506:14;42502:26;;;-1:-1:-1;;42498:40:176;42472:67;;42462:95;;42553:1;42550;42543:12;42462:95;42585:32;;42644:21;;-1:-1:-1;;;;;42681:30:176;;42678:50;;;42724:1;42721;42714:12;42678:50;42782:6;42779:1;42775:14;42759;42755:35;42748:5;42744:47;42741:67;;;42804:1;42801;42794:12;42741:67;42836:2;42828:6;42821:18;42866:110;42972:2;42964:6;42960:15;42952:6;42947:2;42938:7;42934:16;42866:110;:::i;:::-;42852:124;;;;43009:42;43047:2;43040:5;43036:14;43009:42;:::i;:::-;-1:-1:-1;;;;;14431:31:176;43114:15;;;14419:44;43180:14;;;43167:28;43150:15;;;43143:53;43219:4;43258:33;43276:14;;;43258:33;:::i;:::-;18209:10;18198:22;43338:15;;;18186:35;43377:4;43416:33;43434:14;;;43416:33;:::i;:::-;18209:10;18198:22;43496:15;;18186:35;;;;-1:-1:-1;43599:12:176;;;;43564:15;;;;42062:1;42055:9;42026:1595;;;-1:-1:-1;43638:6:176;;41469:2181;-1:-1:-1;;;;;;;;41469:2181:176:o;45544:197::-;45582:3;45610:6;45651:2;45644:5;45640:14;45678:2;45669:7;45666:15;45663:41;;;45684:18;;:::i;:::-;45733:1;45720:15;;45544:197;-1:-1:-1;;;45544:197:176:o","linkReferences":{},"immutableReferences":{"20588":[{"start":1104,"length":32},{"start":4345,"length":32},{"start":5784,"length":32},{"start":6207,"length":32},{"start":6800,"length":32}],"20591":[{"start":1001,"length":32},{"start":7644,"length":32},{"start":8140,"length":32}],"20594":[{"start":925,"length":32},{"start":7151,"length":32}],"20597":[{"start":1552,"length":32},{"start":6620,"length":32}],"25427":[{"start":1050,"length":32},{"start":9577,"length":32},{"start":9789,"length":32},{"start":9916,"length":32}],"25430":[{"start":12394,"length":32},{"start":12582,"length":32},{"start":12818,"length":32}],"25433":[{"start":3125,"length":32},{"start":3268,"length":32},{"start":3396,"length":32},{"start":9493,"length":32},{"start":9697,"length":32},{"start":10840,"length":32},{"start":11256,"length":32}],"25436":[{"start":3598,"length":32},{"start":3945,"length":32},{"start":4096,"length":32},{"start":11034,"length":32},{"start":11421,"length":32},{"start":11580,"length":32}]}},"methodIdentifiers":{"avsDirectory()":"6b3aa72e","balanceOf(address)":"70a08231","batchesState(bytes32)":"b099627e","blsApkRegistry()":"5df45946","checkPublicInput(bytes,bytes32)":"95c6d604","checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"4ae07c37","createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":"fce36c7d","createNewTask(bytes32,string)":"5c008994","delegation()":"df5cf723","deregisterOperatorFromAVS(address)":"a364f4da","getOperatorRestakedStrategies(address)":"33cfb7b7","getRestakeableStrategies()":"e481af9d","initialize(address,address)":"485cc955","owner()":"8da5cb5b","registerOperatorToAVS(address,(bytes,bytes32,uint256))":"9926ee7d","registryCoordinator()":"6d14a987","renounceOwnership()":"715018a6","respondToTask(bytes32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"2dd94eba","respondToTaskV2(bytes32,address,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":"ab21739a","rewardsInitiator()":"fc299dee","setRewardsInitiator(address)":"3bc28c8c","setStaleStakesForbidden(bool)":"416c7e5e","stakeRegistry()":"68304835","staleStakesForbidden()":"b98d0908","transferOwnership(address)":"f2fde38b","trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":"171f1d5b","updateAVSMetadataURI(string)":"a98fb355","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)":"06045a91"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAVSDirectory\",\"name\":\"__avsDirectory\",\"type\":\"address\"},{\"internalType\":\"contract IRewardsCoordinator\",\"name\":\"__rewardsCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"BatchVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"batcher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"BatcherBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"NewBatchV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevRewardsInitiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"RewardsInitiatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"avsDirectory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"batchesState\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"taskCreatedBlock\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"responded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"checkPublicInput\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"contract IStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"struct IRewardsCoordinator.StrategyAndMultiplier[]\",\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"internalType\":\"struct IRewardsCoordinator.RewardsSubmission[]\",\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\"}],\"name\":\"createAVSRewardsSubmission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"batchDataPointer\",\"type\":\"string\"}],\"name\":\"createNewTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardsInitiator\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"respondToTaskV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardsInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRewardsInitiator\",\"type\":\"address\"}],\"name\":\"setRewardsInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"updateAVSMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"details\":\"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths\",\"params\":{\"rewardsSubmissions\":\"The rewards submissions being created\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRewardsInitiator(address)\":{\"details\":\"only callable by the owner\",\"params\":{\"newRewardsInitiator\":\"The new rewards initiator address\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"updateAVSMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}}},\"title\":\"Primary entrypoint for procuring services from Aligned.\",\"version\":1},\"userdoc\":{\"events\":{\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"}},\"kind\":\"user\",\"methods\":{\"avsDirectory()\":{\"notice\":\"Returns the EigenLayer AVSDirectory contract.\"},\"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme.\"},\"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])\":{\"notice\":\"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS\"},\"rewardsInitiator()\":{\"notice\":\"The address of the entity that can initiate rewards\"},\"setRewardsInitiator(address)\":{\"notice\":\"Sets the rewards initiator address\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"updateAVSMetadataURI(string)\":{\"notice\":\"Updates the metadata URI for the AVS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/AlignedLayerServiceManager.sol\":\"AlignedLayerServiceManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/\",\":eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol\":{\"keccak256\":\"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa\",\"dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914\",\"dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8\",\"dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol\":{\"keccak256\":\"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71\",\"dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef\",\"dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7\",\"dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f\",\"dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xce8ee0ab28f2bce9e94aa19fffe55bebef080327632ac98ff3ab14994b369bc0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5c7e2be97a8840fa2a0434077a36136553a84efd9bff4b46712ce9fddb813a6a\",\"dweb:/ipfs/QmZKvgPxLAbGo1CqTA4AX6MCDPFLSSNt43ZKWRjvvzFp7S\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241\",\"dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221\",\"dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol\":{\"keccak256\":\"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e\",\"dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354\",\"dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51\",\"dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d\",\"dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d\",\"dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f\",\"dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol\":{\"keccak256\":\"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8\",\"dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97\",\"dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae\",\"dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04\",\"dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g\"]},\"src/core/AlignedLayerServiceManager.sol\":{\"keccak256\":\"0x162271a3a98c3b1a15e96593762e53ff41c23569e93f7949f34f9abfff761aad\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c2db54243afaa81c0f104e9cf126c0e061e0fed0e3515f513e991fc55ecd0f7d\",\"dweb:/ipfs/QmZcSi3DcULHYCmqhLbcr46aQCQSPLbSziPd62918obkCP\"]},\"src/core/AlignedLayerServiceManagerStorage.sol\":{\"keccak256\":\"0xabc512eb0a600c2e6465b0813cc2d1b26edd0225f03d9c1de2f6fe96db531817\",\"urls\":[\"bzz-raw://64c7675966d4d3503e011ed3184ffaebb85128b04e892f81cb47996788ca744d\",\"dweb:/ipfs/QmXqm57dvJCPUGgwMhf6k4sbPa3DUUTY3UVu2UCbHejY68\"]},\"src/core/IAlignedLayerServiceManager.sol\":{\"keccak256\":\"0x8d2bfeabfc2cde8b699778f7395c5efe44ded0bc57f0d0ea14cdc18a87d8433b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b2f47bfa5a21219889cde76d1bf30800c7765648ab68e1148c268b83362e040b\",\"dweb:/ipfs/QmWADSHQrj5qxMJ3kiksWDVe82w2WMPxgtLYxGnv8kGr9M\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IAVSDirectory","name":"__avsDirectory","type":"address"},{"internalType":"contract IRewardsCoordinator","name":"__rewardsCoordinator","type":"address"},{"internalType":"contract IRegistryCoordinator","name":"__registryCoordinator","type":"address"},{"internalType":"contract IStakeRegistry","name":"__stakeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false}],"type":"event","name":"BatchVerified","anonymous":false},{"inputs":[{"internalType":"address","name":"batcher","type":"address","indexed":true},{"internalType":"uint256","name":"newBalance","type":"uint256","indexed":false}],"type":"event","name":"BatcherBalanceUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatch","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32","indexed":true},{"internalType":"address","name":"senderAddress","type":"address","indexed":false},{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32","indexed":false},{"internalType":"string","name":"batchDataPointer","type":"string","indexed":false}],"type":"event","name":"NewBatchV2","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"prevRewardsInitiator","type":"address","indexed":false},{"internalType":"address","name":"newRewardsInitiator","type":"address","indexed":false}],"type":"event","name":"RewardsInitiatorUpdated","anonymous":false},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false}],"type":"event","name":"StaleStakesForbiddenUpdate","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"avsDirectory","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"batchesState","outputs":[{"internalType":"uint32","name":"taskCreatedBlock","type":"uint32"},{"internalType":"bool","name":"responded","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"publicInput","type":"bytes"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"checkPublicInput","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"params","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"view","type":"function","name":"checkSignatures","outputs":[{"internalType":"struct IBLSSignatureChecker.QuorumStakeTotals","name":"","type":"tuple","components":[{"internalType":"uint96[]","name":"signedStakeForQuorum","type":"uint96[]"},{"internalType":"uint96[]","name":"totalStakeForQuorum","type":"uint96[]"}]},{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IRewardsCoordinator.RewardsSubmission[]","name":"rewardsSubmissions","type":"tuple[]","components":[{"internalType":"struct IRewardsCoordinator.StrategyAndMultiplier[]","name":"strategiesAndMultipliers","type":"tuple[]","components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}]},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"startTimestamp","type":"uint32"},{"internalType":"uint32","name":"duration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"createAVSRewardsSubmission"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"string","name":"batchDataPointer","type":"string"}],"stateMutability":"payable","type":"function","name":"createNewTask"},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deregisterOperatorFromAVS"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"getOperatorRestakedStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRestakeableStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_rewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"registerOperatorToAVS"},{"inputs":[],"stateMutability":"view","type":"function","name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTask"},{"inputs":[{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"struct IBLSSignatureChecker.NonSignerStakesAndSignature","name":"nonSignerStakesAndSignature","type":"tuple","components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G1Point[]","name":"quorumApks","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}]}],"stateMutability":"nonpayable","type":"function","name":"respondToTaskV2"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardsInitiator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newRewardsInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setRewardsInitiator"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setStaleStakesForbidden"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staleStakesForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"struct BN254.G1Point","name":"apk","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"trySignatureAndApkVerification","outputs":[{"internalType":"bool","name":"pairingSuccessful","type":"bool"},{"internalType":"bool","name":"siganatureIsValid","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_metadataURI","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAVSMetadataURI"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"},{"internalType":"address","name":"senderAddress","type":"address"}],"stateMutability":"view","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"details":"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.NOTE: Be careful to ensure `msgHash` is collision-resistant! This method does not hash `msgHash` in any way, so if an attacker is able to pass in an arbitrary value, they may be able to tamper with signature verification.","params":{"msgHash":"is the hash being signed","params":"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature","referenceBlockNumber":"is the block number at which the stake information is being verified"},"returns":{"_0":"quorumStakeTotals is the struct containing the total and signed stake for each quorum","_1":"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs"}},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"details":"Only callabe by the permissioned rewardsInitiator addressThe duration of the `rewardsSubmission` cannot exceed `MAX_REWARDS_DURATION`The tokens are sent to the `RewardsCoordinator` contractStrategies must be in ascending order of addresses to check for duplicatesThis function will revert if the `rewardsSubmission` is malformed, e.g. if the `strategies` and `weights` arrays are of non-equal lengths","params":{"rewardsSubmissions":"The rewards submissions being created"}},"deregisterOperatorFromAVS(address)":{"params":{"operator":"The address of the operator to deregister."}},"getOperatorRestakedStrategies(address)":{"details":"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately","params":{"operator":"The address of the operator to get restaked strategies for"}},"getRestakeableStrategies()":{"details":"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately"},"owner()":{"details":"Returns the address of the current owner."},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"params":{"operator":"The address of the operator to register.","operatorSignature":"The signature, salt, and expiry of the operator's signature."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setRewardsInitiator(address)":{"details":"only callable by the owner","params":{"newRewardsInitiator":"The new rewards initiator address"}},"setStaleStakesForbidden(bool)":{"params":{"value":"to toggle staleStakesForbidden"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"params":{"apk":"is the claimed G1 public key","apkG2":"is provided G2 public key","msgHash":"is the hash being signed","sigma":"is the G1 point signature"},"returns":{"pairingSuccessful":"is true if the pairing precompile call was successful","siganatureIsValid":"is true if the signature is valid"}},"updateAVSMetadataURI(string)":{"details":"only callable by the owner","params":{"_metadataURI":"is the metadata URI for the AVS"}}},"version":1},"userdoc":{"kind":"user","methods":{"avsDirectory()":{"notice":"Returns the EigenLayer AVSDirectory contract."},"checkSignatures(bytes32,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))":{"notice":"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme."},"createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[])":{"notice":"Creates a new rewards submission to the EigenLayer RewardsCoordinator contract, to be split amongst the set of stakers delegated to operators who are registered to this `avs`"},"deregisterOperatorFromAVS(address)":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator deregistration from the AVS"},"getOperatorRestakedStrategies(address)":{"notice":"Returns the list of strategies that the operator has potentially restaked on the AVS"},"getRestakeableStrategies()":{"notice":"Returns the list of strategies that the AVS supports for restaking"},"registerOperatorToAVS(address,(bytes,bytes32,uint256))":{"notice":"Forwards a call to EigenLayer's AVSDirectory contract to confirm operator registration with the AVS"},"rewardsInitiator()":{"notice":"The address of the entity that can initiate rewards"},"setRewardsInitiator(address)":{"notice":"Sets the rewards initiator address"},"setStaleStakesForbidden(bool)":{"notice":"/** RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.minWithdrawalDelayBlocks() window."},"staleStakesForbidden()":{"notice":"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window."},"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))":{"notice":"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key"},"updateAVSMetadataURI(string)":{"notice":"Updates the metadata URI for the AVS"}},"version":1}},"settings":{"remappings":["@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","ds-test/=lib/eigenlayer-middleware/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-core-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/","eigenlayer-core/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","eigenlayer-middleware/=lib/eigenlayer-middleware/src/","eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","erc4626-tests/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/core/AlignedLayerServiceManager.sol":"AlignedLayerServiceManager"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IAVSDirectory.sol":{"keccak256":"0x3f67ab9b510b02dc3c07014b49785f1e167401bdb39cc10f737bbf545632d938","urls":["bzz-raw://48d1267e2df6c8ac9b8f419269ff3d23be9b62606ee6b6d2278c27ffebfd73aa","dweb:/ipfs/QmaFyywKCm1eotKjF1evryW8BMQJzPDstZm1wMRW79phXG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0xab76a9f4eff865cbb689f627cf98263488765519d7a4ec5ffbcb0ca4972842f9","urls":["bzz-raw://ff57ce18e8350bf39f190645db0988bc0f1279f1872150a114a1b520c38a2914","dweb:/ipfs/QmSsUXkNUqYuJgGRumHTSs9rAaboGjecotcM4xHrdBYWaZ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba","urls":["bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc","dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0xd8a64dbed03d3a5cdbefe1af75968f2dde07f973749c2ef5197bf7187c3e448c","urls":["bzz-raw://27ccc7c1fd9352e9f9b357c9063d255dc0ed9583f43db09f786ac7497d7846b8","dweb:/ipfs/QmeJzuJkE9m2NUNwZSp4tGZEZmih1LeucePup8hzMVDRbG"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol":{"keccak256":"0xeab6f1140a90eb7f107d95bae1e8b2ecfbfe36282d62c9df69e6a564c2c59771","urls":["bzz-raw://785cd2777cdcab3b827b5eef2a4dae02c56db07252fdcefd8dd1016be034dc71","dweb:/ipfs/QmNyDFchTuMeiVoxNEfQw96JVq7DfkohGz1txKXe7HyNbq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092","urls":["bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c","dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79","urls":["bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232","dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x68bf02a443fc8b2f612eba3d39bfefa5f61f78b549f111cdecec5f2c58236a52","urls":["bzz-raw://76bc6875ce74128b861fdac5fd1c0c72f3cc9bacf67fa4a73721b95fb23959ef","dweb:/ipfs/QmPix4WJmf9fXyMZxfgwXEHBcg7V4NAbRqs4HUf5YrSJcM"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x70d89b05c1c5f47b74a07fbb5a2c05e606fed494e749ea98a9915b7be73df377","urls":["bzz-raw://db1d3bfaee69aef53c8b12b492a17584e6d1ac94610cb8b38aad33e1cdd81af7","dweb:/ipfs/QmfVsMTj1hcf9fMEm5RzvtcBN4dMcAKFBgUUDsNDr5XFpq"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d","urls":["bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f","dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x9095fc29b96d102b10c02d44b3a6fbfa25593ef6ae4a810363ab885b9e6b0f71","urls":["bzz-raw://0945132d482d56278edddb1d32209903c4d3839c87ba4317aadd97dc23610d0f","dweb:/ipfs/QmVuM2aLRHxitx4rPx3GTYTBCVNcjYn6sHBRr1biUjLBP5"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xce8ee0ab28f2bce9e94aa19fffe55bebef080327632ac98ff3ab14994b369bc0","urls":["bzz-raw://5c7e2be97a8840fa2a0434077a36136553a84efd9bff4b46712ce9fddb813a6a","dweb:/ipfs/QmZKvgPxLAbGo1CqTA4AX6MCDPFLSSNt43ZKWRjvvzFp7S"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol":{"keccak256":"0x3a5c205c596d3d73c7afa63ffbbfac8204f6d6a26c151ef26b47278981c3c0fe","urls":["bzz-raw://4beb88bf5b7c7e614f0d87b157d7a4b67afbf1cc93f3127622bd66f696799241","dweb:/ipfs/QmWJKb6qsd69bWgpAHX6deCkJqmJdo9oBLQAXJk97gWEE2"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBase.sol":{"keccak256":"0x7e32ef76daf32e5eb5a93cecf204223e64243f42afe70c7ca71ad3db3925b9c4","urls":["bzz-raw://19c10aa22f2e86e27e946b65c434e541caa6af06fcdde46c3b5e9b42890bd221","dweb:/ipfs/QmPb5qDRdbJTniKSqsbjVhbtwdb72G9hWPYcHtVvj1zBxg"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/ServiceManagerBaseStorage.sol":{"keccak256":"0xa544114dbf6d973a815f997a2ac9237c531c40b08c91d3a65a23b152ed621e1e","urls":["bzz-raw://4cf69f9be7d3f3c4184b61b267280a829040973633ea9d95e2ec0dbf70f40a2e","dweb:/ipfs/QmT2HeCJWBLX2p4KAWnyU318MMx9USb2brqCKq1vn2pXpR"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol":{"keccak256":"0xc07a5edfd95ab4f16f16a8dc8e76eadf4b0e90fe49db90540d01daaad86898c5","urls":["bzz-raw://52b53266450a53da641e82d8ae3be93c5e09f8342b4ea0cc96bb9038d8406354","dweb:/ipfs/QmVuoiQyqPTLCGnyt8zDaxiyaj4ETdgTGKv4MDHWzqEDjp"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol":{"keccak256":"0xee5823a6674e553c71f5e127f08245827eb116d1ad418b5a7f2a9d6985fd95e0","urls":["bzz-raw://94aa26debddca6c0784585340cf891de4c2d7edaa3e5ec7229af9730312a5a51","dweb:/ipfs/QmWbHGbM7eVYTAmrCVaDU8b4YTm9VAN82XgLDR78uHC7vj"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol":{"keccak256":"0x83b2d56aacf27e65c4959a832c5de573e013908c044f6e48ea8284ac5282ae2b","urls":["bzz-raw://877af382587e96bb39bcc6db8bb5e4b871db5025c52347d4bee9afeaa4a6cc8d","dweb:/ipfs/QmdnhsQCChzq2o5NgbeT3JxSsEcMm1PC9QW6zenZNPjD9F"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol":{"keccak256":"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3","urls":["bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25","dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol":{"keccak256":"0xdd8effb082c1d5957d5ff43d7c59497b32866a6d82bcc7d5efa49ea9bc9b3385","urls":["bzz-raw://cb33a2a1446585b13b7a509e880c60d658d2d2522ec48a9f02e30d2cff54002d","dweb:/ipfs/QmVNG8ZPZkXzNEadPdTj1uBYLiZdCnYfsE5iGU6nJcJXiD"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol":{"keccak256":"0x7602cfb4397a114a0ed60e70e8e1d729fdcf406b585838181b3cb3ffa6ac9a9a","urls":["bzz-raw://b718fa016a13a2a5ce298bc5ea7495cc70cf9c358211c75595d5c9dde9a6cc0f","dweb:/ipfs/QmQNrVmU7P7pRqGBJuTQDkjf3wMDY2kJm7zXdtQwsQTbzY"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IServiceManagerUI.sol":{"keccak256":"0x365761699b4a5b7360ee6c75f12606eefc4b0394754c8b8e1e1eefec0cba7ffb","urls":["bzz-raw://ac14ada180b66cbbc5f9de0d6b4bb87b5946d2a9569ae88f2f62aaca47e879a8","dweb:/ipfs/QmcN9xKYF24naNWc6cYah9suz5gJSYE9nPj9eZFWnP35VX"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol":{"keccak256":"0x1b8b4d757c1b804bc4cf6fbbf8bf8f89ebdeb30a31014751fe7d01deb9d513d4","urls":["bzz-raw://984bf2777b898ed187d28997f9783f5c293a1a1848e3e9aa470ce9183d454c97","dweb:/ipfs/Qme3aTpBrkLu8wYHFMZbCfhXHoZ1M6SpXkeC237T9BuU5B"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0xb428c8d0c3b325507a88a61a80115493eb88606ccc19ed64a31e11294ab853b3","urls":["bzz-raw://d7b6fb935bfe0494e6ff970c8f30a86d5f4cf5c3e0967300c28cd383c043acae","dweb:/ipfs/QmUHfFZaVjLPXhkBmcxrZhAHZaSFQDqXtrLGpjGBQBa5Ki"],"license":"MIT"},"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol":{"keccak256":"0x44315ac460be30a6b18fd4df4d1b8afb46653bf4dc06ca9f93c32353fd0605c5","urls":["bzz-raw://da14f2ead3a375b02afd09d4a02edddf7b63a88945746b96789b2473184fdb04","dweb:/ipfs/QmRqcjxa2Vv2MrLdPeAwsktXdWTirapEDsRbJCyYRtKT6g"],"license":"MIT"},"src/core/AlignedLayerServiceManager.sol":{"keccak256":"0x162271a3a98c3b1a15e96593762e53ff41c23569e93f7949f34f9abfff761aad","urls":["bzz-raw://c2db54243afaa81c0f104e9cf126c0e061e0fed0e3515f513e991fc55ecd0f7d","dweb:/ipfs/QmZcSi3DcULHYCmqhLbcr46aQCQSPLbSziPd62918obkCP"],"license":"UNLICENSED"},"src/core/AlignedLayerServiceManagerStorage.sol":{"keccak256":"0xabc512eb0a600c2e6465b0813cc2d1b26edd0225f03d9c1de2f6fe96db531817","urls":["bzz-raw://64c7675966d4d3503e011ed3184ffaebb85128b04e892f81cb47996788ca744d","dweb:/ipfs/QmXqm57dvJCPUGgwMhf6k4sbPa3DUUTY3UVu2UCbHejY68"],"license":null},"src/core/IAlignedLayerServiceManager.sol":{"keccak256":"0x8d2bfeabfc2cde8b699778f7395c5efe44ded0bc57f0d0ea14cdc18a87d8433b","urls":["bzz-raw://b2f47bfa5a21219889cde76d1bf30800c7765648ab68e1148c268b83362e040b","dweb:/ipfs/QmWADSHQrj5qxMJ3kiksWDVe82w2WMPxgtLYxGnv8kGr9M"],"license":"UNLICENSED"}},"version":1},"id":171} diff --git a/contracts/bindings/AlignedLayerServiceManager/binding.go b/contracts/bindings/AlignedLayerServiceManager/binding.go index 95cffe3fe..a3767ce61 100644 --- a/contracts/bindings/AlignedLayerServiceManager/binding.go +++ b/contracts/bindings/AlignedLayerServiceManager/binding.go @@ -83,8 +83,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // ContractAlignedLayerServiceManagerMetaData contains all meta data concerning the ContractAlignedLayerServiceManager contract. var ContractAlignedLayerServiceManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__rewardsCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRewardsCoordinator\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"alignedAggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchesState\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"responded\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkPublicInput\",\"inputs\":[{\"name\":\"publicInput\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createNewTask\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositToBatcher\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeAggregator\",\"inputs\":[{\"name\":\"_alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToTaskV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsInitiator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setAggregator\",\"inputs\":[{\"name\":\"_alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsInitiator\",\"inputs\":[{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyBatchInclusion\",\"inputs\":[{\"name\":\"proofCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubInputCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\",\"internalType\":\"bytes20\"},{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"merkleProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyBatchInclusion\",\"inputs\":[{\"name\":\"proofCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubInputCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\",\"internalType\":\"bytes20\"},{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"merkleProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BatchVerified\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatcherBalanceUpdated\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatchV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsInitiatorUpdated\",\"inputs\":[{\"name\":\"prevRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BatchAlreadyResponded\",\"inputs\":[{\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"BatchAlreadySubmitted\",\"inputs\":[{\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"BatchDoesNotExist\",\"inputs\":[{\"name\":\"batchIdentifierHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"BatcherBalanceIsEmpty\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"BatcherHasNoBalance\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"required\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidDepositAmount\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidQuorumThreshold\",\"inputs\":[{\"name\":\"signedStake\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requiredStake\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"SenderIsNotAggregator\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"alignedAggregator\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162005635380380620056358339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516151b3620004826000396000818161063b01526117bc01526000818161039f01526119cf0152600081816103d301528181611bbc0152611dac01526000818161043a01528181610fe4015281816114780152818161161f0152611870015260008181610cf901528181610e5401528181610eeb01528181612a4001528181612bc30152612c62015260008181610b2001528181610baf01528181610c2f015281816122de015281816123aa0152818161297e0152612b1e01526000818161302f015281816130eb01526131d70152600081816104040152818161233201528181612406015261248501526151b36000f3fe6080604052600436106101f25760003560e01c8063800fb61f1161010d578063b98d0908116100a0578063f2fde38b1161006f578063f2fde38b14610672578063f9120af614610692578063fa534dc0146106b2578063fc299dee146106d2578063fce36c7d146106f257600080fd5b8063b98d0908146105ef578063c0c53b8b14610609578063df5cf72314610629578063e481af9d1461065d57600080fd5b8063a364f4da116100dc578063a364f4da14610533578063a98fb35514610553578063ab21739a14610573578063b099627e1461059357600080fd5b8063800fb61f146104b55780638da5cb5b146104d557806395c6d604146104f35780639926ee7d1461051357600080fd5b80634ae07c37116101855780636b3aa72e116101545780636b3aa72e146103f55780636d14a9871461042857806370a082311461045c578063715018a6146104a057600080fd5b80634ae07c371461034c5780635c0089941461037a5780635df459461461038d57806368304835146103c157600080fd5b80633bc28c8c116101c15780633bc28c8c146102c1578063416c7e5e146102e15780634223d551146103015780634a5bf6321461031457600080fd5b806306045a9114610208578063171f1d5b1461023d5780632e1a7d4d1461027457806333cfb7b71461029457600080fd5b36610203576102013334610712565b005b600080fd5b34801561021457600080fd5b50610228610223366004614164565b6107a4565b60405190151581526020015b60405180910390f35b34801561024957600080fd5b5061025d6102583660046142b6565b610899565b604080519215158352901515602083015201610234565b34801561028057600080fd5b5061020161028f366004614307565b610a23565b3480156102a057600080fd5b506102b46102af366004614320565b610afb565b604051610234919061433d565b3480156102cd57600080fd5b506102016102dc366004614320565b610fce565b3480156102ed57600080fd5b506102016102fc366004614398565b610fe2565b61020161030f366004614320565b611119565b34801561032057600080fd5b5060cb54610334906001600160a01b031681565b6040516001600160a01b039091168152602001610234565b34801561035857600080fd5b5061036c61036736600461466b565b611123565b604051610234929190614705565b610201610388366004614796565b612076565b34801561039957600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b3480156103cd57600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b34801561040157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610334565b34801561043457600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b34801561046857600080fd5b50610492610477366004614320565b6001600160a01b0316600090815260ca602052604090205490565b604051908152602001610234565b3480156104ac57600080fd5b506102016121fa565b3480156104c157600080fd5b506102016104d0366004614320565b61220e565b3480156104e157600080fd5b506033546001600160a01b0316610334565b3480156104ff57600080fd5b5061022861050e3660046147e1565b6122ae565b34801561051f57600080fd5b5061020161052e36600461482c565b6122d3565b34801561053f57600080fd5b5061020161054e366004614320565b61239f565b34801561055f57600080fd5b5061020161056e3660046148d7565b612466565b34801561057f57600080fd5b5061020161058e366004614927565b6124ba565b34801561059f57600080fd5b506105d36105ae366004614307565b60c96020526000908152604090205463ffffffff811690640100000000900460ff1682565b6040805163ffffffff9093168352901515602083015201610234565b3480156105fb57600080fd5b506097546102289060ff1681565b34801561061557600080fd5b5061020161062436600461494e565b61288e565b34801561063557600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b34801561066957600080fd5b506102b4612978565b34801561067e57600080fd5b5061020161068d366004614320565b612d41565b34801561069e57600080fd5b506102016106ad366004614320565b612db7565b3480156106be57600080fd5b506102286106cd366004614999565b612de1565b3480156106de57600080fd5b50606554610334906001600160a01b031681565b3480156106fe57600080fd5b5061020161070d366004614a16565b612e56565b8061073857604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca602052604081208054839290610760908490614aa0565b90915550506001600160a01b038216600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a25050565b6000806001600160a01b0383166107bc5750846107e8565b85836040516020016107cf929190614ab8565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff1661080b57600091505061088d565b600081815260c96020526040902054640100000000900460ff1661083357600091505061088d565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108878789838961320e565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106108e1576108e1614ad3565b60200201518951600160200201518a6020015160006002811061090657610906614ad3565b60200201518b6020015160016002811061092257610922614ad3565b602090810291909101518c518d83015160405161097f9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109a29190614ae9565b9050610a156109bb6109b48884613226565b86906132bd565b6109c3613351565b610a0b6109fc856109f6604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613226565b610a058c613411565b906132bd565b886201d4c06134a1565b909890975095505050505050565b33600090815260ca6020526040902054811115610a745733600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201839052604482015260640161072f565b33600090815260ca602052604081208054839290610a93908490614b0b565b909155505033600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610af7573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b9190614b22565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614b3b565b90506001600160c01b0381161580610cb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190614b64565b60ff16155b15610cd45760408051600080825260208201909252905b50949350505050565b6000610ce8826001600160c01b03166136c5565b90506000805b8251811015610dbe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610d3857610d38614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da09190614b22565b610daa9083614aa0565b915080610db681614b87565b915050610cee565b506000816001600160401b03811115610dd957610dd9614040565b604051908082528060200260200182016040528015610e02578160200160208202803683370190505b5090506000805b8451811015610fc1576000858281518110610e2657610e26614ad3565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf9190614b22565b905060005b81811015610fab576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d9190614bb7565b60000151868681518110610f7357610f73614ad3565b6001600160a01b039092166020928302919091019091015284610f9581614b87565b9550508080610fa390614b87565b915050610ec4565b5050508080610fb990614b87565b915050610e09565b5090979650505050505050565b610fd6613787565b610fdf816137e1565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110649190614bf8565b6001600160a01b0316336001600160a01b0316146111105760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161072f565b610fdf8161384a565b610fdf8134610712565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561117f57508260a0015151604051806040016040528060018152602001600081525051145b80156111a657508260c0015151604051806040016040528060018152602001600081525051145b80156111cd57508260e0015151604051806040016040528060018152602001600081525051145b6112375760405162461bcd60e51b8152602060048201526041602482015260008051602061515e83398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161072f565b825151602084015151146112af5760405162461bcd60e51b81526020600482015260446024820181905260008051602061515e833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161072f565b4363ffffffff168463ffffffff161061131e5760405162461bcd60e51b815260206004820152603c602482015260008051602061515e83398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161072f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156113df576113df614040565b604051908082528060200260200182016040528015611408578160200160208202803683370190505b5081526020860151516001600160401b0381111561142857611428614040565b604051908082528060200260200182016040528015611451578160200160208202803683370190505b50816020018190525060006114fd60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190614b64565b613891565b905060005b876020015151811015611798576115478860200151828151811061152857611528614ad3565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061155d5761155d614ad3565b6020908102919091010152801561161d57602083015161157e600183614b0b565b8151811061158e5761158e614ad3565b602002602001015160001c836020015182815181106115af576115af614ad3565b602002602001015160001c1161161d576040805162461bcd60e51b815260206004820152602481019190915260008051602061515e83398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161072f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061166257611662614ad3565b60200260200101518b8b60000151858151811061168157611681614ad3565b60200260200101516040518463ffffffff1660e01b81526004016116be9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff9190614b3b565b6001600160c01b03168360000151828151811061171e5761171e614ad3565b6020026020010181815250506117846109b4611758848660000151858151811061174a5761174a614ad3565b602002602001015116613924565b8a60200151848151811061176e5761176e614ad3565b602002602001015161394f90919063ffffffff16565b94508061179081614b87565b915050611502565b50506117a383613a33565b60975490935060ff166000816117ba57600061183c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c9190614b22565b905060005b604051806040016040528060018152602001600081525051811015611f475782156119cd578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118c5576118c5614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190614b22565b6119379190614aa0565b116119cd5760405162461bcd60e51b8152602060048201526066602482015260008051602061515e83398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161072f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a2457611a24614ad3565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a4957611a49614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190614c15565b6001600160401b031916611aec8a60400151838151811061152857611528614ad3565b67ffffffffffffffff191614611b885760405162461bcd60e51b8152602060048201526061602482015260008051602061515e83398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161072f565b611bb889604001518281518110611ba157611ba1614ad3565b6020026020010151876132bd90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c1157611c11614ad3565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c3657611c36614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190614c40565b85602001518281518110611ccc57611ccc614ad3565b6001600160601b03909216602092830291909101820152850151805182908110611cf857611cf8614ad3565b602002602001015185600001518281518110611d1657611d16614ad3565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f3257611da586600001518281518110611d6057611d60614ad3565b602002602001015160405180604001604052806001815260200160008152508581518110611d9057611d90614ad3565b016020015160f81c60ff161c60019081161490565b15611f20577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e0157611e01614ad3565b602001015160f81c60f81b60f81c8e89602001518581518110611e2657611e26614ad3565b60200260200101518f60e001518881518110611e4457611e44614ad3565b60200260200101518781518110611e5d57611e5d614ad3565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee59190614c40565b8751805185908110611ef957611ef9614ad3565b60200260200101818151611f0d9190614c5d565b6001600160601b03169052506001909101905b80611f2a81614b87565b915050611d3a565b50508080611f3f90614b87565b915050611841565b505050600080611f618a868a606001518b60800151610899565b9150915081611fd25760405162461bcd60e51b8152602060048201526043602482015260008051602061515e83398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161072f565b806120335760405162461bcd60e51b8152602060048201526039602482015260008051602061515e83398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161072f565b5050600087826020015160405160200161204e929190614c85565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b6000833360405160200161208b929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16156120da57604051630c40bc4360e21b81526004810182905260240161072f565b34156121375733600090815260ca6020526040812080543492906120ff908490614aa0565b909155505033600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a25b33600090815260ca602052604090205461216657604051632059498b60e11b815233600482015260240161072f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c99093529285902084518154925115156401000000000264ffffffffff19909316941693909317179091559151909186917f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437916121eb9133919089908990614ccd565b60405180910390a25050505050565b612202613787565b61220c6000613ace565b565b600054600290610100900460ff16158015612230575060005460ff8083169116105b61224c5760405162461bcd60e51b815260040161072f90614d1a565b6000805461ffff191660ff83161761010017905561226982612db7565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008184846040516122c1929190614d68565b60405180910390201490509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461231b5760405162461bcd60e51b815260040161072f90614d78565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906123699085908590600401614e3d565b600060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146123e75760405162461bcd60e51b815260040161072f90614d78565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b5050505050565b61246e613787565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612431908490600401614e88565b60cb546001600160a01b031633146124fa5760cb54604051632cbe419560e01b81523360048201526001600160a01b03909116602482015260440161072f565b60005a905060008484604051602001612514929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16612562576040516311cb69a760e11b81526004810182905260240161072f565b600081815260c96020526040902054640100000000900460ff161561259d57604051634e78d7f960e11b81526004810182905260240161072f565b6001600160a01b038416600090815260ca60205260409020546125de5760405163245bc73560e11b81526001600160a01b038516600482015260240161072f565b600081815260c960205260408120805464ff000000001981166401000000001790915561261390839063ffffffff1686611123565b509050604360ff16816020015160008151811061263257612632614ad3565b60200260200101516126449190614e9b565b6001600160601b03166064826000015160008151811061266657612666614ad3565b60200260200101516001600160601b03166126819190614eca565b101561271457606481600001516000815181106126a0576126a0614ad3565b60200260200101516001600160601b03166126bb9190614eca565b604360ff1682602001516000815181106126d7576126d7614ad3565b60200260200101516126e99190614e9b565b60405163530f5c4560e11b815260048101929092526001600160601b0316602482015260440161072f565b6040516001600160a01b038616815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a6127648387614b0b565b6127719062011170614aa0565b61277b9190614eca565b6001600160a01b038816600090815260ca60205260409020549091508111156127e1576001600160a01b038716600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201839052604482015260640161072f565b6001600160a01b038716600090815260ca602052604081208054839290612809908490614b0b565b90915550506001600160a01b038716600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612883573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156128ae5750600054600160ff909116105b806128c85750303b1580156128c8575060005460ff166001145b6128e45760405162461bcd60e51b815260040161072f90614d1a565b6000805460ff191660011790558015612907576000805461ff0019166101001790555b6129118484613b20565b60cb80546001600160a01b0319166001600160a01b0384161790558015612972576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190614b64565b60ff16905080612a1c57505060408051600081526020810190915290565b6000805b82811015612ad157604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab39190614b22565b612abd9083614aa0565b915080612ac981614b87565b915050612a20565b506000816001600160401b03811115612aec57612aec614040565b604051908082528060200260200182016040528015612b15578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e9190614b64565b60ff16811015612d3757604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c369190614b22565b905060005b81811015612d22576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd49190614bb7565b60000151858581518110612cea57612cea614ad3565b6001600160a01b039092166020928302919091019091015283612d0c81614b87565b9450508080612d1a90614b87565b915050612c3b565b50508080612d2f90614b87565b915050612b1c565b5090949350505050565b612d49613787565b6001600160a01b038116612dae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072f565b610fdf81613ace565b612dbf613787565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e15908b908b908b908b908b908b908b908b90600401614ee9565b602060405180830381865afa158015612e32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190614f4b565b6065546001600160a01b03163314612eeb5760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161072f565b60005b818110156131bf57828282818110612f0857612f08614ad3565b9050602002810190612f1a9190614f68565b612f2b906040810190602001614320565b6001600160a01b03166323b872dd3330868686818110612f4d57612f4d614ad3565b9050602002810190612f5f9190614f68565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fda9190614f4b565b506000838383818110612fef57612fef614ad3565b90506020028101906130019190614f68565b613012906040810190602001614320565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015613080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a49190614b22565b90508383838181106130b8576130b8614ad3565b90506020028101906130ca9190614f68565b6130db906040810190602001614320565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061311d5761311d614ad3565b905060200281019061312f9190614f68565b6040013561313d9190614aa0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ac9190614f4b565b5050806131b890614b87565b9050612eee565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d906123699085908590600401614fee565b60008361321c868585613b9d565b1495945050505050565b6040805180820190915260008082526020820152613242613f4e565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561327557613277565bfe5b50806132b55760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161072f565b505092915050565b60408051808201909152600080825260208201526132d9613f6c565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132755750806132b55760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161072f565b613359613f8a565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061344160008051602061511e83398151915286614ae9565b90505b61344d81613c97565b909350915060008051602061511e833981519152828309831415613487576040805180820190915290815260208101919091529392505050565b60008051602061511e833981519152600182089050613444565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134d3613faf565b60005b60028110156136985760006134ec826006614eca565b905084826002811061350057613500614ad3565b60200201515183613512836000614aa0565b600c811061352257613522614ad3565b602002015284826002811061353957613539614ad3565b602002015160200151838260016135509190614aa0565b600c811061356057613560614ad3565b602002015283826002811061357757613577614ad3565b602002015151518361358a836002614aa0565b600c811061359a5761359a614ad3565b60200201528382600281106135b1576135b1614ad3565b60200201515160016020020151836135ca836003614aa0565b600c81106135da576135da614ad3565b60200201528382600281106135f1576135f1614ad3565b60200201516020015160006002811061360c5761360c614ad3565b60200201518361361d836004614aa0565b600c811061362d5761362d614ad3565b602002015283826002811061364457613644614ad3565b60200201516020015160016002811061365f5761365f614ad3565b602002015183613670836005614aa0565b600c811061368057613680614ad3565b6020020152508061369081614b87565b9150506134d6565b506136a1613fce565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136d384613924565b61ffff166001600160401b038111156136ee576136ee614040565b6040519080825280601f01601f191660200182016040528015613718576020820181803683370190505b5090506000805b825182108015613730575061010081105b15612d37576001811b935085841615613777578060f81b83838151811061375957613759614ad3565b60200101906001600160f81b031916908160001a9053508160010191505b61378081614b87565b905061371f565b6033546001600160a01b0316331461220c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161072f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60008061389d84613d19565b9050808360ff166001901b1161391b5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161072f565b90505b92915050565b6000805b821561391e57613939600184614b0b565b9092169180613947816150fb565b915050613928565b60408051808201909152600080825260208201526102008261ffff16106139ab5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161072f565b8161ffff16600114156139bf57508161391e565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a2857600161ffff871660ff83161c81161415613a0b57613a0884846132bd565b93505b613a1583846132bd565b92506201fffe600192831b1691016139db565b509195945050505050565b60408051808201909152600080825260208201528151158015613a5857506020820151155b15613a76575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061511e8339815191528460200151613aa99190614ae9565b613ac19060008051602061511e833981519152614b0b565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613b8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161072f565b613b9482613ace565b610af7816137e1565b600060208451613bad9190614ae9565b15613c345760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161072f565b8260205b85518111610ccb57613c4b600285614ae9565b613c6c57816000528086015160205260406000209150600284049350613c85565b8086015160005281602052604060002091506002840493505b613c90602082614aa0565b9050613c38565b6000808060008051602061511e833981519152600360008051602061511e8339815191528660008051602061511e833981519152888909090890506000613d0d827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061511e833981519152613ea6565b91959194509092505050565b600061010082511115613da25760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161072f565b8151613db057506000919050565b60008083600081518110613dc657613dc6614ad3565b0160200151600160f89190911c81901b92505b8451811015613e9d57848181518110613df457613df4614ad3565b0160200151600160f89190911c1b9150828211613e895760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161072f565b91811791613e9681614b87565b9050613dd9565b50909392505050565b600080613eb1613fce565b613eb9613fec565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613275575082613f435760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161072f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613f9d61400a565b8152602001613faa61400a565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613ac957600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561407857614078614040565b60405290565b60405161010081016001600160401b038111828210171561407857614078614040565b604051601f8201601f191681016001600160401b03811182821017156140c9576140c9614040565b604052919050565b60006001600160401b038311156140ea576140ea614040565b6140fd601f8401601f19166020016140a1565b905082815283838301111561411157600080fd5b828260208301376000602084830101529392505050565b600082601f83011261413957600080fd5b614148838335602085016140d1565b9392505050565b6001600160a01b0381168114610fdf57600080fd5b600080600080600080600080610100898b03121561418157600080fd5b88359750602089013596506040890135955061419f60608a01614028565b94506080890135935060a08901356001600160401b038111156141c157600080fd5b6141cd8b828c01614128565b93505060c0890135915060e08901356141e58161414f565b809150509295985092959890939650565b60006040828403121561420857600080fd5b614210614056565b9050813581526020820135602082015292915050565b600082601f83011261423757600080fd5b61423f614056565b80604084018581111561425157600080fd5b845b8181101561426b578035845260209384019301614253565b509095945050505050565b60006080828403121561428857600080fd5b614290614056565b905061429c8383614226565b81526142ab8360408401614226565b602082015292915050565b60008060008061012085870312156142cd57600080fd5b843593506142de86602087016141f6565b92506142ed8660608701614276565b91506142fc8660e087016141f6565b905092959194509250565b60006020828403121561431957600080fd5b5035919050565b60006020828403121561433257600080fd5b813561391b8161414f565b6020808252825182820181905260009190848201906040850190845b8181101561437e5783516001600160a01b031683529284019291840191600101614359565b50909695505050505050565b8015158114610fdf57600080fd5b6000602082840312156143aa57600080fd5b813561391b8161438a565b803563ffffffff81168114613ac957600080fd5b60006001600160401b038211156143e2576143e2614040565b5060051b60200190565b600082601f8301126143fd57600080fd5b8135602061441261440d836143c9565b6140a1565b82815260059290921b8401810191818101908684111561443157600080fd5b8286015b8481101561445357614446816143b5565b8352918301918301614435565b509695505050505050565b600082601f83011261446f57600080fd5b8135602061447f61440d836143c9565b82815260069290921b8401810191818101908684111561449e57600080fd5b8286015b84811015614453576144b488826141f6565b8352918301916040016144a2565b600082601f8301126144d357600080fd5b813560206144e361440d836143c9565b82815260059290921b8401810191818101908684111561450257600080fd5b8286015b848110156144535780356001600160401b038111156145255760008081fd5b6145338986838b01016143ec565b845250918301918301614506565b6000610180828403121561455457600080fd5b61455c61407e565b905081356001600160401b038082111561457557600080fd5b614581858386016143ec565b8352602084013591508082111561459757600080fd5b6145a38583860161445e565b602084015260408401359150808211156145bc57600080fd5b6145c88583860161445e565b60408401526145da8560608601614276565b60608401526145ec8560e086016141f6565b608084015261012084013591508082111561460657600080fd5b614612858386016143ec565b60a084015261014084013591508082111561462c57600080fd5b614638858386016143ec565b60c084015261016084013591508082111561465257600080fd5b5061465f848285016144c2565b60e08301525092915050565b60008060006060848603121561468057600080fd5b83359250614690602085016143b5565b915060408401356001600160401b038111156146ab57600080fd5b6146b786828701614541565b9150509250925092565b600081518084526020808501945080840160005b838110156146fa5781516001600160601b0316875295820195908201906001016146d5565b509495945050505050565b604081526000835160408084015261472060808401826146c1565b90506020850151603f1984830301606085015261473d82826146c1565b925050508260208301529392505050565b60008083601f84011261476057600080fd5b5081356001600160401b0381111561477757600080fd5b60208301915083602082850101111561478f57600080fd5b9250929050565b6000806000604084860312156147ab57600080fd5b8335925060208401356001600160401b038111156147c857600080fd5b6147d48682870161474e565b9497909650939450505050565b6000806000604084860312156147f657600080fd5b83356001600160401b0381111561480c57600080fd5b6148188682870161474e565b909790965060209590950135949350505050565b6000806040838503121561483f57600080fd5b823561484a8161414f565b915060208301356001600160401b038082111561486657600080fd5b908401906060828703121561487a57600080fd5b60405160608101818110838211171561489557614895614040565b6040528235828111156148a757600080fd5b6148b388828601614128565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156148e957600080fd5b81356001600160401b038111156148ff57600080fd5b8201601f8101841361491057600080fd5b61491f848235602084016140d1565b949350505050565b60008060006060848603121561493c57600080fd5b8335925060208401356146908161414f565b60008060006060848603121561496357600080fd5b833561496e8161414f565b9250602084013561497e8161414f565b9150604084013561498e8161414f565b809150509250925092565b600080600080600080600060e0888a0312156149b457600080fd5b8735965060208801359550604088013594506149d260608901614028565b93506080880135925060a08801356001600160401b038111156149f457600080fd5b614a008a828b01614128565b92505060c0880135905092959891949750929550565b60008060208385031215614a2957600080fd5b82356001600160401b0380821115614a4057600080fd5b818501915085601f830112614a5457600080fd5b813581811115614a6357600080fd5b8660208260051b8501011115614a7857600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115614ab357614ab3614a8a565b500190565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b0657634e487b7160e01b600052601260045260246000fd5b500690565b600082821015614b1d57614b1d614a8a565b500390565b600060208284031215614b3457600080fd5b5051919050565b600060208284031215614b4d57600080fd5b81516001600160c01b038116811461391b57600080fd5b600060208284031215614b7657600080fd5b815160ff8116811461391b57600080fd5b6000600019821415614b9b57614b9b614a8a565b5060010190565b6001600160601b0381168114610fdf57600080fd5b600060408284031215614bc957600080fd5b614bd1614056565b8251614bdc8161414f565b81526020830151614bec81614ba2565b60208201529392505050565b600060208284031215614c0a57600080fd5b815161391b8161414f565b600060208284031215614c2757600080fd5b815167ffffffffffffffff198116811461391b57600080fd5b600060208284031215614c5257600080fd5b815161391b81614ba2565b60006001600160601b0383811690831681811015614c7d57614c7d614a8a565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cc057815185529382019390820190600101614ca4565b5092979650505050505050565b6001600160a01b038516815263ffffffff841660208201526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614e1657602081850181015186830182015201614dfa565b81811115614e28576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614e6760a0840182614df0565b90506020840151606084015260408401516080840152809150509392505050565b6020815260006141486020830184614df0565b60006001600160601b0380831681851681830481118215151615614ec157614ec1614a8a565b02949350505050565b6000816000190483118215151615614ee457614ee4614a8a565b500290565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f2581840187614df0565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614f5d57600080fd5b815161391b8161438a565b60008235609e19833603018112614f7e57600080fd5b9190910192915050565b8035613ac98161414f565b8183526000602080850194508260005b858110156146fa578135614fb68161414f565b6001600160a01b0316875281830135614fce81614ba2565b6001600160601b0316878401526040968701969190910190600101614fa3565b60208082528181018390526000906040808401600586901b8501820187855b888110156150ed57878303603f190184528135368b9003609e1901811261503357600080fd5b8a0160a0813536839003601e1901811261504c57600080fd5b820180356001600160401b0381111561506457600080fd5b8060061b360384131561507657600080fd5b828752615088838801828c8501614f93565b92505050615097888301614f88565b6001600160a01b031688860152818701358786015260606150b98184016143b5565b63ffffffff169086015260806150d08382016143b5565b63ffffffff1695019490945250928501929085019060010161500d565b509098975050505050505050565b600061ffff8083168181141561511357615113614a8a565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212208e01715b0708770e452336b0e323c81f585a18b9cbc054b73762e976599f81f964736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__rewardsCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRewardsCoordinator\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchesState\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"responded\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkPublicInput\",\"inputs\":[{\"name\":\"publicInput\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createNewTask\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToTask\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToTaskV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsInitiator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setRewardsInitiator\",\"inputs\":[{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyBatchInclusion\",\"inputs\":[{\"name\":\"proofCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubInputCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\",\"internalType\":\"bytes20\"},{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"merkleProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchVerified\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatcherBalanceUpdated\",\"inputs\":[{\"name\":\"batcher\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatch\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewBatchV2\",\"inputs\":[{\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"senderAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"batchDataPointer\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsInitiatorUpdated\",\"inputs\":[{\"name\":\"prevRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newRewardsInitiator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", + Bin: "0x6101806040523480156200001257600080fd5b506040516200563b3803806200563b8339810160408190526200003591620002e5565b6001600160a01b0380851660805280841660a05280831660c052811660e0528184848284620000636200020a565b50505050806001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e791906200034d565b6001600160a01b0316610120816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016691906200034d565b6001600160a01b0316610140816001600160a01b031681525050610120516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200034d565b6001600160a01b03166101605250620002006200020a565b5050505062000374565b600054610100900460ff1615620002775760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002ca576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e257600080fd5b50565b60008060008060808587031215620002fc57600080fd5b84516200030981620002cc565b60208601519094506200031c81620002cc565b60408601519093506200032f81620002cc565b60608601519092506200034281620002cc565b939692955090935050565b6000602082840312156200036057600080fd5b81516200036d81620002cc565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516151b9620004826000396000818161061001526119dc01526000818161039d0152611bef0152600081816103e901528181611ddc0152611fcc015260008181610450015281816110f9015281816116980152818161183f0152611a90015260008181610e0e01528181610f690152818161100001528181612b0801528181612c8b0152612d2a015260008181610c3501528181610cc401528181610d4401528181612503015281816125cf01528181612a460152612be601526000818161305801528181613114015261320001526000818161041a015281816125570152818161262b01526126aa01526151b96000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141a7565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004614308565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b636600461460f565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614655565b610c10565b60405161025b9190614672565b3480156102f657600080fd5b506102bb610305366004614655565b6110e3565b34801561031657600080fd5b506102bb6103253660046146cd565b6110f7565b34801561033657600080fd5b506102bb6103453660046146ea565b61122e565b34801561035657600080fd5b5061036a610365366004614723565b611343565b60405161025b9291906147bd565b6102bb61038636600461484e565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047e57600080fd5b506104a861048d366004614655565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124bf565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f610504366004614899565b6124d3565b34801561051557600080fd5b506102bb6105243660046148e4565b6124f8565b34801561053557600080fd5b506102bb610544366004614655565b6125c4565b34801561055557600080fd5b506102bb61056436600461498f565b61268b565b34801561057557600080fd5b506102bb6105843660046149df565b6126df565b34801561059557600080fd5b506105c86105a4366004614a06565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063e57600080fd5b506102dd612a40565b34801561065357600080fd5b506102bb610662366004614655565b612e09565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a1f565b612e7f565b60008085836040516020016106bd929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613237565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614aae565b60200201518951600160200201518a602001516000600281106107f3576107f3614aae565b60200201518b6020015160016002811061080f5761080f614aae565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ac4565b90506109026108a86108a1888461324f565b86906132e6565b6108b061337a565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061324f565b6108f28c61343a565b906132e6565b886201d4c06134ca565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614aae565b6020026020010151610aae9190614ae6565b6001600160601b031660648360000151600081518110610ad057610ad0614aae565b60200260200101516001600160601b0316610aeb9190614b15565b1015610b095760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614b92565b610b66906201117061406b565b610b709190614b15565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614b92565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c06565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c1f565b90506001600160c01b0381161580610dc957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c48565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b03166136ee565b90506000805b8251811015610ed3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c06565b610ebf908361406b565b915080610ecb81614c6b565b915050610e03565b506000816001600160401b03811115610eee57610eee614083565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614aae565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c06565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614c9b565b6000015186868151811061108857611088614aae565b6001600160a01b0390921660209283029190910190910152846110aa81614c6b565b95505080806110b890614c6b565b915050610fd9565b50505080806110ce90614c6b565b915050610f1e565b5090979650505050505050565b6110eb6137b0565b6110f48161380a565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cdc565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613873565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138ba565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061516483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615164833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061516483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614083565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614083565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c48565b61393b565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614aae565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614aae565b6020908102919091010152801561183d57602083015161179e600183614b92565b815181106117ae576117ae614aae565b602002602001015160001c836020015182815181106117cf576117cf614aae565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061516483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061188257611882614aae565b60200260200101518b8b6000015185815181106118a1576118a1614aae565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c1f565b6001600160c01b03168360000151828151811061193e5761193e614aae565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614aae565b6020026020010151166139ce565b8a60200151848151811061198e5761198e614aae565b60200260200101516139f990919063ffffffff16565b9450806119b081614c6b565b915050611722565b50506119c383613add565b60975490935060ff166000816119da576000611a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c06565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614aae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c06565b611b57919061406b565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061516483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614aae565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614cf9565b6001600160401b031916611d0c8a60400151838151811061174857611748614aae565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061516483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614aae565b6020026020010151876132e690919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614aae565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614aae565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d24565b85602001518281518110611eec57611eec614aae565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614aae565b602002602001015185600001518281518110611f3657611f36614aae565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614aae565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614aae565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614aae565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614aae565b60200260200101518f60e00151888151811061206457612064614aae565b6020026020010151878151811061207d5761207d614aae565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d24565b875180518590811061211957612119614aae565b6020026020010181815161212d9190614d41565b6001600160601b03169052506001909101905b8061214a81614c6b565b915050611f5a565b5050808061215f90614c6b565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061516483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061516483398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d69565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600083336040516020016122ab929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16156123265760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123955733600090815260ca60205260408120805434929061234b90849061406b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546123f15760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124729188908890614dda565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124b09493929190614e03565b60405180910390a25050505050565b6124c76137b0565b6124d16000613b78565b565b60008184846040516124e6929190614e3e565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125405760405162461bcd60e51b815260040161097f90614e4e565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061258e9085908590600401614f13565b600060405180830381600087803b1580156125a857600080fd5b505af11580156125bc573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461260c5760405162461bcd60e51b815260040161097f90614e4e565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b5050505050565b6126936137b0565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612656908490600401614f5e565b60005a9050600084846040516020016126f9929190614a93565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661276a5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127ca5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca60205260409020546128285760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061285e90849063ffffffff1687611343565b91509150604360ff16826020015160008151811061287e5761287e614aae565b60200260200101516128909190614ae6565b6001600160601b0316606483600001516000815181106128b2576128b2614aae565b60200260200101516001600160601b03166128cd9190614b15565b10156128eb5760405162461bcd60e51b815260040161097f90614b34565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61293b8388614b92565b612948906201117061406b565b6129529190614b15565b6001600160a01b038916600090815260ca602052604090205490915081111561298d5760405162461bcd60e51b815260040161097f90614ba9565b6001600160a01b038816600090815260ca6020526040812080548392906129b5908490614b92565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a34573d6000803e3d6000fd5b50505050505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac69190614c48565b60ff16905080612ae457505060408051600081526020810190915290565b6000805b82811015612b9957604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190614c06565b612b85908361406b565b915080612b9181614c6b565b915050612ae8565b506000816001600160401b03811115612bb457612bb4614083565b604051908082528060200260200182016040528015612bdd578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c669190614c48565b60ff16811015612dff57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614c06565b905060005b81811015612dea576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9c9190614c9b565b60000151858581518110612db257612db2614aae565b6001600160a01b039092166020928302919091019091015283612dd481614c6b565b9450508080612de290614c6b565b915050612d03565b50508080612df790614c6b565b915050612be4565b5090949350505050565b612e116137b0565b6001600160a01b038116612e765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b78565b6065546001600160a01b03163314612f145760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131e857828282818110612f3157612f31614aae565b9050602002810190612f439190614f71565b612f54906040810190602001614655565b6001600160a01b03166323b872dd3330868686818110612f7657612f76614aae565b9050602002810190612f889190614f71565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190614f9c565b50600083838381811061301857613018614aae565b905060200281019061302a9190614f71565b61303b906040810190602001614655565b604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cd9190614c06565b90508383838181106130e1576130e1614aae565b90506020028101906130f39190614f71565b613104906040810190602001614655565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000008387878781811061314657613146614aae565b90506020028101906131589190614f71565b60400135613166919061406b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d59190614f9c565b5050806131e190614c6b565b9050612f17565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d9061258e9085908590600401615014565b600083613245868585613bca565b1495945050505050565b604080518082019091526000808252602082015261326b613f7b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561329e576132a0565bfe5b50806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613302613f99565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561329e5750806132de5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613382613fb7565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061346a60008051602061514483398151915286614ac4565b90505b61347681613cc4565b90935091506000805160206151448339815191528283098314156134b0576040805180820190915290815260208101919091529392505050565b60008051602061514483398151915260018208905061346d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134fc613fdc565b60005b60028110156136c1576000613515826006614b15565b905084826002811061352957613529614aae565b6020020151518361353b83600061406b565b600c811061354b5761354b614aae565b602002015284826002811061356257613562614aae565b60200201516020015183826001613579919061406b565b600c811061358957613589614aae565b60200201528382600281106135a0576135a0614aae565b60200201515151836135b383600261406b565b600c81106135c3576135c3614aae565b60200201528382600281106135da576135da614aae565b60200201515160016020020151836135f383600361406b565b600c811061360357613603614aae565b602002015283826002811061361a5761361a614aae565b60200201516020015160006002811061363557613635614aae565b60200201518361364683600461406b565b600c811061365657613656614aae565b602002015283826002811061366d5761366d614aae565b60200201516020015160016002811061368857613688614aae565b60200201518361369983600561406b565b600c81106136a9576136a9614aae565b602002015250806136b981614c6b565b9150506134ff565b506136ca613ffb565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136fc846139ce565b61ffff166001600160401b0381111561371757613717614083565b6040519080825280601f01601f191660200182016040528015613741576020820181803683370190505b5090506000805b825182108015613759575061010081105b15612dff576001811b9350858416156137a0578060f81b83838151811061378257613782614aae565b60200101906001600160f81b031916908160001a9053508160010191505b6137a981614c6b565b9050613748565b6033546001600160a01b031633146124d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139255760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61392e82613b78565b6139378161380a565b5050565b60008061394784613d46565b9050808360ff166001901b116139c55760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139c8576139e3600184614b92565b90921691806139f181615121565b9150506139d2565b60408051808201909152600080825260208201526102008261ffff1610613a555760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a695750816139c8565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ad257600161ffff871660ff83161c81161415613ab557613ab284846132e6565b93505b613abf83846132e6565b92506201fffe600192831b169101613a85565b509195945050505050565b60408051808201909152600080825260208201528151158015613b0257506020820151155b15613b20575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151448339815191528460200151613b539190614ac4565b613b6b90600080516020615144833981519152614b92565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bda9190614ac4565b15613c615760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c78600285614ac4565b613c9957816000528086015160205260406000209150600284049350613cb2565b8086015160005281602052604060002091506002840493505b613cbd60208261406b565b9050613c65565b60008080600080516020615144833981519152600360008051602061514483398151915286600080516020615144833981519152888909090890506000613d3a827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615144833981519152613ed3565b91959194509092505050565b600061010082511115613dcf5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613ddd57506000919050565b60008083600081518110613df357613df3614aae565b0160200151600160f89190911c81901b92505b8451811015613eca57848181518110613e2157613e21614aae565b0160200151600160f89190911c1b9150828211613eb65760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ec381614c6b565b9050613e06565b50909392505050565b600080613ede613ffb565b613ee6614019565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561329e575082613f705760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fca614037565b8152602001613fd7614037565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561407e5761407e614055565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140bb576140bb614083565b60405290565b60405161010081016001600160401b03811182821017156140bb576140bb614083565b604051601f8201601f191681016001600160401b038111828210171561410c5761410c614083565b604052919050565b60006001600160401b0383111561412d5761412d614083565b614140601f8401601f19166020016140e4565b905082815283838301111561415457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261417c57600080fd5b61418b83833560208501614114565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141c457600080fd5b88359750602089013596506040890135955060608901356001600160601b0319811681146141f157600080fd5b94506080890135935060a08901356001600160401b0381111561421357600080fd5b61421f8b828c0161416b565b93505060c0890135915060e089013561423781614192565b809150509295985092959890939650565b60006040828403121561425a57600080fd5b614262614099565b9050813581526020820135602082015292915050565b600082601f83011261428957600080fd5b614291614099565b8060408401858111156142a357600080fd5b845b818110156142bd5780358452602093840193016142a5565b509095945050505050565b6000608082840312156142da57600080fd5b6142e2614099565b90506142ee8383614278565b81526142fd8360408401614278565b602082015292915050565b600080600080610120858703121561431f57600080fd5b843593506143308660208701614248565b925061433f86606087016142c8565b915061434e8660e08701614248565b905092959194509250565b60006001600160401b0382111561437257614372614083565b5060051b60200190565b803563ffffffff81168114613b7357600080fd5b600082601f8301126143a157600080fd5b813560206143b66143b183614359565b6140e4565b82815260059290921b840181019181810190868411156143d557600080fd5b8286015b848110156143f7576143ea8161437c565b83529183019183016143d9565b509695505050505050565b600082601f83011261441357600080fd5b813560206144236143b183614359565b82815260069290921b8401810191818101908684111561444257600080fd5b8286015b848110156143f7576144588882614248565b835291830191604001614446565b600082601f83011261447757600080fd5b813560206144876143b183614359565b82815260059290921b840181019181810190868411156144a657600080fd5b8286015b848110156143f75780356001600160401b038111156144c95760008081fd5b6144d78986838b0101614390565b8452509183019183016144aa565b600061018082840312156144f857600080fd5b6145006140c1565b905081356001600160401b038082111561451957600080fd5b61452585838601614390565b8352602084013591508082111561453b57600080fd5b61454785838601614402565b6020840152604084013591508082111561456057600080fd5b61456c85838601614402565b604084015261457e85606086016142c8565b60608401526145908560e08601614248565b60808401526101208401359150808211156145aa57600080fd5b6145b685838601614390565b60a08401526101408401359150808211156145d057600080fd5b6145dc85838601614390565b60c08401526101608401359150808211156145f657600080fd5b5061460384828501614466565b60e08301525092915050565b6000806040838503121561462257600080fd5b8235915060208301356001600160401b0381111561463f57600080fd5b61464b858286016144e5565b9150509250929050565b60006020828403121561466757600080fd5b81356139c581614192565b6020808252825182820181905260009190848201906040850190845b818110156146b35783516001600160a01b03168352928401929184019160010161468e565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146df57600080fd5b81356139c5816146bf565b600080604083850312156146fd57600080fd5b823561470881614192565b9150602083013561471881614192565b809150509250929050565b60008060006060848603121561473857600080fd5b833592506147486020850161437c565b915060408401356001600160401b0381111561476357600080fd5b61476f868287016144e5565b9150509250925092565b600081518084526020808501945080840160005b838110156147b25781516001600160601b03168752958201959082019060010161478d565b509495945050505050565b60408152600083516040808401526147d86080840182614779565b90506020850151603f198483030160608501526147f58282614779565b925050508260208301529392505050565b60008083601f84011261481857600080fd5b5081356001600160401b0381111561482f57600080fd5b60208301915083602082850101111561484757600080fd5b9250929050565b60008060006040848603121561486357600080fd5b8335925060208401356001600160401b0381111561488057600080fd5b61488c86828701614806565b9497909650939450505050565b6000806000604084860312156148ae57600080fd5b83356001600160401b038111156148c457600080fd5b6148d086828701614806565b909790965060209590950135949350505050565b600080604083850312156148f757600080fd5b823561490281614192565b915060208301356001600160401b038082111561491e57600080fd5b908401906060828703121561493257600080fd5b60405160608101818110838211171561494d5761494d614083565b60405282358281111561495f57600080fd5b61496b8882860161416b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149a157600080fd5b81356001600160401b038111156149b757600080fd5b8201601f810184136149c857600080fd5b6149d784823560208401614114565b949350505050565b6000806000606084860312156149f457600080fd5b83359250602084013561474881614192565b600060208284031215614a1857600080fd5b5035919050565b60008060208385031215614a3257600080fd5b82356001600160401b0380821115614a4957600080fd5b818501915085601f830112614a5d57600080fd5b813581811115614a6c57600080fd5b8660208260051b8501011115614a8157600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614ae157634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b0c57614b0c614055565b02949350505050565b6000816000190483118215151615614b2f57614b2f614055565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614ba457614ba4614055565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c1857600080fd5b5051919050565b600060208284031215614c3157600080fd5b81516001600160c01b03811681146139c557600080fd5b600060208284031215614c5a57600080fd5b815160ff811681146139c557600080fd5b6000600019821415614c7f57614c7f614055565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cad57600080fd5b614cb5614099565b8251614cc081614192565b81526020830151614cd081614c86565b60208201529392505050565b600060208284031215614cee57600080fd5b81516139c581614192565b600060208284031215614d0b57600080fd5b815167ffffffffffffffff19811681146139c557600080fd5b600060208284031215614d3657600080fd5b81516139c581614c86565b60006001600160601b0383811690831681811015614d6157614d61614055565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614da457815185529382019390820190600101614d88565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614dfa604083018486614db1565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e349083018486614db1565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614eec57602081850181015186830182015201614ed0565b81811115614efe576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f3d60a0840182614ec6565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061418b6020830184614ec6565b60008235609e19833603018112614f8757600080fd5b9190910192915050565b8035613b7381614192565b600060208284031215614fae57600080fd5b81516139c5816146bf565b8183526000602080850194508260005b858110156147b2578135614fdc81614192565b6001600160a01b0316875281830135614ff481614c86565b6001600160601b0316878401526040968701969190910190600101614fc9565b60208082528181018390526000906040808401600586901b8501820187855b8881101561511357878303603f190184528135368b9003609e1901811261505957600080fd5b8a0160a0813536839003601e1901811261507257600080fd5b820180356001600160401b0381111561508a57600080fd5b8060061b360384131561509c57600080fd5b8287526150ae838801828c8501614fb9565b925050506150bd888301614f91565b6001600160a01b031688860152818701358786015260606150df81840161437c565b63ffffffff169086015260806150f683820161437c565b63ffffffff16950194909452509285019290850190600101615033565b509098975050505050505050565b600061ffff8083168181141561513957615139614055565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212207c07849930c3fc43881ea132ac36e666158e05b68d72acd832cb538b6fe1a4cf64736f6c634300080c0033", } // ContractAlignedLayerServiceManagerABI is the input ABI used to generate the binding from. @@ -254,37 +254,6 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.contract.Transact(opts, method, params...) } -// AlignedAggregator is a free data retrieval call binding the contract method 0x4a5bf632. -// -// Solidity: function alignedAggregator() view returns(address) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCaller) AlignedAggregator(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractAlignedLayerServiceManager.contract.Call(opts, &out, "alignedAggregator") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AlignedAggregator is a free data retrieval call binding the contract method 0x4a5bf632. -// -// Solidity: function alignedAggregator() view returns(address) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) AlignedAggregator() (common.Address, error) { - return _ContractAlignedLayerServiceManager.Contract.AlignedAggregator(&_ContractAlignedLayerServiceManager.CallOpts) -} - -// AlignedAggregator is a free data retrieval call binding the contract method 0x4a5bf632. -// -// Solidity: function alignedAggregator() view returns(address) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCallerSession) AlignedAggregator() (common.Address, error) { - return _ContractAlignedLayerServiceManager.Contract.AlignedAggregator(&_ContractAlignedLayerServiceManager.CallOpts) -} - // AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. // // Solidity: function avsDirectory() view returns(address) @@ -810,37 +779,6 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCal return _ContractAlignedLayerServiceManager.Contract.VerifyBatchInclusion(&_ContractAlignedLayerServiceManager.CallOpts, proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex, senderAddress) } -// VerifyBatchInclusion0 is a free data retrieval call binding the contract method 0xfa534dc0. -// -// Solidity: function verifyBatchInclusion(bytes32 proofCommitment, bytes32 pubInputCommitment, bytes32 provingSystemAuxDataCommitment, bytes20 proofGeneratorAddr, bytes32 batchMerkleRoot, bytes merkleProof, uint256 verificationDataBatchIndex) view returns(bool) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCaller) VerifyBatchInclusion0(opts *bind.CallOpts, proofCommitment [32]byte, pubInputCommitment [32]byte, provingSystemAuxDataCommitment [32]byte, proofGeneratorAddr [20]byte, batchMerkleRoot [32]byte, merkleProof []byte, verificationDataBatchIndex *big.Int) (bool, error) { - var out []interface{} - err := _ContractAlignedLayerServiceManager.contract.Call(opts, &out, "verifyBatchInclusion0", proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// VerifyBatchInclusion0 is a free data retrieval call binding the contract method 0xfa534dc0. -// -// Solidity: function verifyBatchInclusion(bytes32 proofCommitment, bytes32 pubInputCommitment, bytes32 provingSystemAuxDataCommitment, bytes20 proofGeneratorAddr, bytes32 batchMerkleRoot, bytes merkleProof, uint256 verificationDataBatchIndex) view returns(bool) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) VerifyBatchInclusion0(proofCommitment [32]byte, pubInputCommitment [32]byte, provingSystemAuxDataCommitment [32]byte, proofGeneratorAddr [20]byte, batchMerkleRoot [32]byte, merkleProof []byte, verificationDataBatchIndex *big.Int) (bool, error) { - return _ContractAlignedLayerServiceManager.Contract.VerifyBatchInclusion0(&_ContractAlignedLayerServiceManager.CallOpts, proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex) -} - -// VerifyBatchInclusion0 is a free data retrieval call binding the contract method 0xfa534dc0. -// -// Solidity: function verifyBatchInclusion(bytes32 proofCommitment, bytes32 pubInputCommitment, bytes32 provingSystemAuxDataCommitment, bytes20 proofGeneratorAddr, bytes32 batchMerkleRoot, bytes merkleProof, uint256 verificationDataBatchIndex) view returns(bool) -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerCallerSession) VerifyBatchInclusion0(proofCommitment [32]byte, pubInputCommitment [32]byte, provingSystemAuxDataCommitment [32]byte, proofGeneratorAddr [20]byte, batchMerkleRoot [32]byte, merkleProof []byte, verificationDataBatchIndex *big.Int) (bool, error) { - return _ContractAlignedLayerServiceManager.Contract.VerifyBatchInclusion0(&_ContractAlignedLayerServiceManager.CallOpts, proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, verificationDataBatchIndex) -} - // CreateAVSRewardsSubmission is a paid mutator transaction binding the contract method 0xfce36c7d. // // Solidity: function createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() @@ -883,27 +821,6 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.CreateNewTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, batchDataPointer) } -// DepositToBatcher is a paid mutator transaction binding the contract method 0x4223d551. -// -// Solidity: function depositToBatcher(address account) payable returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) DepositToBatcher(opts *bind.TransactOpts, account common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "depositToBatcher", account) -} - -// DepositToBatcher is a paid mutator transaction binding the contract method 0x4223d551. -// -// Solidity: function depositToBatcher(address account) payable returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) DepositToBatcher(account common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.DepositToBatcher(&_ContractAlignedLayerServiceManager.TransactOpts, account) -} - -// DepositToBatcher is a paid mutator transaction binding the contract method 0x4223d551. -// -// Solidity: function depositToBatcher(address account) payable returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) DepositToBatcher(account common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.DepositToBatcher(&_ContractAlignedLayerServiceManager.TransactOpts, account) -} - // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // // Solidity: function deregisterOperatorFromAVS(address operator) returns() @@ -925,46 +842,25 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractAlignedLayerServiceManager.TransactOpts, operator) } -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _initialOwner, address _rewardsInitiator, address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _rewardsInitiator common.Address, _alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "initialize", _initialOwner, _rewardsInitiator, _alignedAggregator) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _initialOwner, address _rewardsInitiator, address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address, _alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator, _alignedAggregator) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function initialize(address _initialOwner, address _rewardsInitiator, address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address, _alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator, _alignedAggregator) +// Solidity: function initialize(address _initialOwner, address _rewardsInitiator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _rewardsInitiator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "initialize", _initialOwner, _rewardsInitiator) } -// InitializeAggregator is a paid mutator transaction binding the contract method 0x800fb61f. +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function initializeAggregator(address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) InitializeAggregator(opts *bind.TransactOpts, _alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "initializeAggregator", _alignedAggregator) +// Solidity: function initialize(address _initialOwner, address _rewardsInitiator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator) } -// InitializeAggregator is a paid mutator transaction binding the contract method 0x800fb61f. +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function initializeAggregator(address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) InitializeAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.InitializeAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) -} - -// InitializeAggregator is a paid mutator transaction binding the contract method 0x800fb61f. -// -// Solidity: function initializeAggregator(address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) InitializeAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.InitializeAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) +// Solidity: function initialize(address _initialOwner, address _rewardsInitiator) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) Initialize(_initialOwner common.Address, _rewardsInitiator common.Address) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.Initialize(&_ContractAlignedLayerServiceManager.TransactOpts, _initialOwner, _rewardsInitiator) } // RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. @@ -1009,6 +905,27 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.RenounceOwnership(&_ContractAlignedLayerServiceManager.TransactOpts) } +// RespondToTask is a paid mutator transaction binding the contract method 0x2dd94eba. +// +// Solidity: function respondToTask(bytes32 batchMerkleRoot, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) RespondToTask(opts *bind.TransactOpts, batchMerkleRoot [32]byte, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.contract.Transact(opts, "respondToTask", batchMerkleRoot, nonSignerStakesAndSignature) +} + +// RespondToTask is a paid mutator transaction binding the contract method 0x2dd94eba. +// +// Solidity: function respondToTask(bytes32 batchMerkleRoot, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) RespondToTask(batchMerkleRoot [32]byte, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.RespondToTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, nonSignerStakesAndSignature) +} + +// RespondToTask is a paid mutator transaction binding the contract method 0x2dd94eba. +// +// Solidity: function respondToTask(bytes32 batchMerkleRoot, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) RespondToTask(batchMerkleRoot [32]byte, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (*types.Transaction, error) { + return _ContractAlignedLayerServiceManager.Contract.RespondToTask(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, nonSignerStakesAndSignature) +} + // RespondToTaskV2 is a paid mutator transaction binding the contract method 0xab21739a. // // Solidity: function respondToTaskV2(bytes32 batchMerkleRoot, address senderAddress, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) returns() @@ -1030,27 +947,6 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.RespondToTaskV2(&_ContractAlignedLayerServiceManager.TransactOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) } -// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. -// -// Solidity: function setAggregator(address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) SetAggregator(opts *bind.TransactOpts, _alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "setAggregator", _alignedAggregator) -} - -// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. -// -// Solidity: function setAggregator(address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) SetAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.SetAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) -} - -// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. -// -// Solidity: function setAggregator(address _alignedAggregator) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) SetAggregator(_alignedAggregator common.Address) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.SetAggregator(&_ContractAlignedLayerServiceManager.TransactOpts, _alignedAggregator) -} - // SetRewardsInitiator is a paid mutator transaction binding the contract method 0x3bc28c8c. // // Solidity: function setRewardsInitiator(address newRewardsInitiator) returns() @@ -1135,27 +1031,6 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTra return _ContractAlignedLayerServiceManager.Contract.UpdateAVSMetadataURI(&_ContractAlignedLayerServiceManager.TransactOpts, _metadataURI) } -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. -// -// Solidity: function withdraw(uint256 amount) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactor) Withdraw(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.contract.Transact(opts, "withdraw", amount) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. -// -// Solidity: function withdraw(uint256 amount) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerSession) Withdraw(amount *big.Int) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.Withdraw(&_ContractAlignedLayerServiceManager.TransactOpts, amount) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. -// -// Solidity: function withdraw(uint256 amount) returns() -func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerTransactorSession) Withdraw(amount *big.Int) (*types.Transaction, error) { - return _ContractAlignedLayerServiceManager.Contract.Withdraw(&_ContractAlignedLayerServiceManager.TransactOpts, amount) -} - // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -1601,6 +1476,152 @@ func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFil return event, nil } +// ContractAlignedLayerServiceManagerNewBatchIterator is returned from FilterNewBatch and is used to iterate over the raw logs and unpacked data for NewBatch events raised by the ContractAlignedLayerServiceManager contract. +type ContractAlignedLayerServiceManagerNewBatchIterator struct { + Event *ContractAlignedLayerServiceManagerNewBatch // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAlignedLayerServiceManagerNewBatch) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAlignedLayerServiceManagerNewBatch) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAlignedLayerServiceManagerNewBatchIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAlignedLayerServiceManagerNewBatch represents a NewBatch event raised by the ContractAlignedLayerServiceManager contract. +type ContractAlignedLayerServiceManagerNewBatch struct { + BatchMerkleRoot [32]byte + TaskCreatedBlock uint32 + BatchDataPointer string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewBatch is a free log retrieval operation binding the contract event 0x1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5. +// +// Solidity: event NewBatch(bytes32 indexed batchMerkleRoot, uint32 taskCreatedBlock, string batchDataPointer) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) FilterNewBatch(opts *bind.FilterOpts, batchMerkleRoot [][32]byte) (*ContractAlignedLayerServiceManagerNewBatchIterator, error) { + + var batchMerkleRootRule []interface{} + for _, batchMerkleRootItem := range batchMerkleRoot { + batchMerkleRootRule = append(batchMerkleRootRule, batchMerkleRootItem) + } + + logs, sub, err := _ContractAlignedLayerServiceManager.contract.FilterLogs(opts, "NewBatch", batchMerkleRootRule) + if err != nil { + return nil, err + } + return &ContractAlignedLayerServiceManagerNewBatchIterator{contract: _ContractAlignedLayerServiceManager.contract, event: "NewBatch", logs: logs, sub: sub}, nil +} + +// WatchNewBatch is a free log subscription operation binding the contract event 0x1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5. +// +// Solidity: event NewBatch(bytes32 indexed batchMerkleRoot, uint32 taskCreatedBlock, string batchDataPointer) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) WatchNewBatch(opts *bind.WatchOpts, sink chan<- *ContractAlignedLayerServiceManagerNewBatch, batchMerkleRoot [][32]byte) (event.Subscription, error) { + + var batchMerkleRootRule []interface{} + for _, batchMerkleRootItem := range batchMerkleRoot { + batchMerkleRootRule = append(batchMerkleRootRule, batchMerkleRootItem) + } + + logs, sub, err := _ContractAlignedLayerServiceManager.contract.WatchLogs(opts, "NewBatch", batchMerkleRootRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAlignedLayerServiceManagerNewBatch) + if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatch", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNewBatch is a log parse operation binding the contract event 0x1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5. +// +// Solidity: event NewBatch(bytes32 indexed batchMerkleRoot, uint32 taskCreatedBlock, string batchDataPointer) +func (_ContractAlignedLayerServiceManager *ContractAlignedLayerServiceManagerFilterer) ParseNewBatch(log types.Log) (*ContractAlignedLayerServiceManagerNewBatch, error) { + event := new(ContractAlignedLayerServiceManagerNewBatch) + if err := _ContractAlignedLayerServiceManager.contract.UnpackLog(event, "NewBatch", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ContractAlignedLayerServiceManagerNewBatchV2Iterator is returned from FilterNewBatchV2 and is used to iterate over the raw logs and unpacked data for NewBatchV2 events raised by the ContractAlignedLayerServiceManager contract. type ContractAlignedLayerServiceManagerNewBatchV2Iterator struct { Event *ContractAlignedLayerServiceManagerNewBatchV2 // Event containing the contract specifics and raw log diff --git a/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json b/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json index 59ebc1e59..51f06218b 100644 --- a/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json +++ b/contracts/scripts/anvil/state/alignedlayer-deployed-anvil-state.json @@ -1 +1 @@ -{"block":{"number":"0xa","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x66d9c51d","gas_limit":"0x1c9c380","basefee":"0x16757f11","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x1f1eccb","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0xc9":"0x94af000f6f71feb2b8401e668d95fd208038580e89d240930f90ba827aa34858","0xcb":"0x3e80000000000001c2018a0f92ad9645385e8a8f3db7d0f6cf7abbb0ad4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x09635f643e140090a9a8dcd712ed6285858cebef":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220adda763858b2ee86f27467db7ec8b893c350cd0ddfa605ad6608601ca5e1cf3664736f6c634300080c0033","storage":{}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102895760003560e01c80636d21117e1161015c578063bf21a8aa116100ce578063f2fde38b11610087578063f2fde38b1461071c578063f698da251461072f578063f8cd844814610737578063fabc1cbc1461074a578063fbf1e2c11461075d578063fce36c7d1461077057600080fd5b8063bf21a8aa14610667578063c46db6061461068e578063d4540a55146106bc578063e221b245146106cf578063e810ce21146106e2578063ea4d3c9b146106f557600080fd5b8063886f119511610120578063886f1195146105ce5780638da5cb5b146105e15780639104c319146105f25780639d45c2811461060d578063a0169ddd14610634578063bb7e451f1461064757600080fd5b80636d21117e14610552578063715018a6146105805780637b8f8b0514610588578063863cb9a914610590578063865c6953146105a357600080fd5b806337838ed01161020057806358baaa3e116101b957806358baaa3e146104c4578063595c6a67146104d75780635971b3f8146104df5780635ac86ab7146105145780635c975abb146105375780635e9d83481461053f57600080fd5b806337838ed01461042257806339b70e38146104495780633a8c0786146104705780633ccc861d146104875780633efe1db61461049a5780634d18cc35146104ad57600080fd5b8063131433b411610252578063131433b414610352578063136439dd14610379578063149bc8721461038c57806322f19a64146103ad5780632b9f64a4146103ce57806336af41fa1461040f57600080fd5b806218572c1461028e57806304a0c502146102c6578063092db007146103025780630eb383451461032a57806310d67a2f1461033f575b600080fd5b6102b161029c366004613120565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102ed7f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016102bd565b60cb5461031790600160e01b900461ffff1681565b60405161ffff90911681526020016102bd565b61033d61033836600461314b565b610783565b005b61033d61034d366004613120565b610805565b6102ed7f0000000000000000000000000000000000000000000000000000000065fb788081565b61033d610387366004613184565b6108c1565b61039f61039a3660046131b5565b610a00565b6040519081526020016102bd565b6103176103bb3660046131d1565b505060cb54600160e01b900461ffff1690565b6103f76103dc366004613120565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102bd565b61033d61041d3660046131ff565b610a76565b6102ed7f000000000000000000000000000000000000000000000000000000000076a70081565b6103f77f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b60cb546102ed90600160a01b900463ffffffff1681565b61033d610495366004613287565b610cb0565b61033d6104a83660046132e7565b611065565b60cb546102ed90600160c01b900463ffffffff1681565b61033d6104d2366004613313565b611365565b61033d611376565b6104f26104ed366004613184565b61143d565b6040805193845263ffffffff92831660208501529116908201526060016102bd565b6102b161052236600461332e565b606654600160ff9092169190911b9081161490565b60665461039f565b6102b161054d366004613351565b61147d565b6102b1610560366004613386565b60cf60209081526000928352604080842090915290825290205460ff1681565b61033d6114fb565b60ca5461039f565b61033d61059e366004613120565b61150f565b61039f6105b13660046131d1565b60cd60209081526000928352604080842090915290825290205481565b6065546103f7906001600160a01b031681565b6033546001600160a01b03166103f7565b6103f773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102ed7f0000000000000000000000000000000000000000000000000000000000093a8081565b61033d610642366004613120565b611520565b61039f610655366004613120565b60ce6020526000908152604090205481565b6102ed7f00000000000000000000000000000000000000000000000000000000005c490081565b6102b161069c366004613386565b60d060209081526000928352604080842090915290825290205460ff1681565b61033d6106ca3660046133cf565b61157f565b61033d6106dd366004613442565b6116c7565b6102ed6106f0366004613184565b6116d8565b6103f77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61033d61072a366004613120565b6117ba565b61039f611830565b61039f6107453660046131b5565b61186e565b61033d610758366004613184565b61187f565b60cb546103f7906001600160a01b031681565b61033d61077e3660046131ff565b6119db565b61078b611b5a565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087c919061345d565b6001600160a01b0316336001600160a01b0316146108b55760405162461bcd60e51b81526004016108ac9061347a565b60405180910390fd5b6108be81611bb4565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906134c4565b6109495760405162461bcd60e51b81526004016108ac906134e1565b606654818116146109c25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610a106020840184613120565b8360200135604051602001610a599392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610a9f5760405162461bcd60e51b81526004016108ac90613529565b33600090815260d1602052604090205460ff16610b3e5760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a4016108ac565b60026097541415610b615760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110610b8457610b84613597565b9050602002810190610b9691906135ad565b33600081815260ce60209081526040808320549051949550939192610bc192909185918791016136f2565b604051602081830303815290604052805190602001209050610be283611cab565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610c15908390613738565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610c5d908890613750565b60405180910390a4610c8f333060408601803590610c7e9060208901613120565b6001600160a01b0316929190612483565b5050508080610c9d90613763565b915050610b69565b505060016097555050565b60665460029060049081161415610cd95760405162461bcd60e51b81526004016108ac90613529565b60026097541415610cfc5760405162461bcd60e51b81526004016108ac90613560565b6002609755600060ca610d126020860186613313565b63ffffffff1681548110610d2857610d28613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091529050610d7a84826124f4565b6000610d8c6080860160608701613120565b6001600160a01b03808216600090815260cc60205260409020549192501680610db25750805b336001600160a01b03821614610e305760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d65720000000060648201526084016108ac565b60005b610e4060a088018861377e565b90508110156110575736610e5760e08901896137cf565b83818110610e6757610e67613597565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610e9c90850185613120565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610f565760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a4016108ac565b6000610f66826020850135613819565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610f949087613120565b6001600160a01b0316815260208082019290925260400160002091909155610fd6908a908390610fc690870187613120565b6001600160a01b0316919061279d565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061101a6020890189613120565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050808061104f90613763565b915050610e33565b505060016097555050505050565b6066546003906008908116141561108e5760405162461bcd60e51b81526004016108ac90613529565b60cb546001600160a01b031633146111055760405162461bcd60e51b815260206004820152603460248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6044820152733a103a3432903932bbb0b93239aab83230ba32b960611b60648201526084016108ac565b60cb5463ffffffff600160c01b9091048116908316116111a15760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a4016108ac565b428263ffffffff161061123a5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a4016108ac565b60ca5460cb5460009061125a90600160a01b900463ffffffff1642613830565b6040805160608101825287815263ffffffff878116602080840182815286841685870181815260ca805460018101825560009190915296517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029098029788015591517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee29096018054925196861667ffffffffffffffff19909316929092176401000000009686169690960295909517905560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b61136d611b5a565b6108be816127cd565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e291906134c4565b6113fe5760405162461bcd60e51b81526004016108ac906134e1565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60ca818154811061144d57600080fd5b60009182526020909120600290910201805460019091015490915063ffffffff8082169164010000000090041683565b60006114f38260ca6114926020830183613313565b63ffffffff16815481106114a8576114a8613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091526124f4565b506001919050565b611503611b5a565b61150d600061283e565b565b611517611b5a565b6108be81612890565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff161580801561159f5750600054600160ff909116105b806115b95750303b1580156115b9575060005460ff166001145b61161c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108ac565b6000805460ff19166001179055801561163f576000805461ff0019166101001790555b6116476128ec565b60c9556116548686612983565b61165d8761283e565b61166684612890565b61166f836127cd565b61167882612a6d565b80156116be576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6116cf611b5a565b6108be81612a6d565b60ca546000905b63ffffffff81161561174b578260ca6116f9600184613858565b63ffffffff168154811061170f5761170f613597565b906000526020600020906002020160000154141561173957611732600182613858565b9392505050565b806117438161387d565b9150506116df565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e6400000000000000000060648201526084016108ac565b6117c2611b5a565b6001600160a01b0381166118275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ac565b6108be8161283e565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415611861575060c95490565b6118696128ec565b905090565b60006001610a106020840184613120565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f6919061345d565b6001600160a01b0316336001600160a01b0316146119265760405162461bcd60e51b81526004016108ac9061347a565b6066541981196066541916146119a45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016109f5565b60665460009060019081161415611a045760405162461bcd60e51b81526004016108ac90613529565b60026097541415611a275760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110611a4a57611a4a613597565b9050602002810190611a5c91906135ad565b33600081815260ce60209081526040808320549051949550939192611a8792909185918791016136f2565b604051602081830303815290604052805190602001209050611aa883611cab565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611adb908390613738565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611b23908890613750565b60405180910390a4611b44333060408601803590610c7e9060208901613120565b5050508080611b5290613763565b915050611a2f565b6033546001600160a01b0316331461150d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ac565b6001600160a01b038116611c425760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016108ac565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611cb782806137cf565b905011611d1c576040805162461bcd60e51b81526020600482015260248101919091526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206e6f20737472617465676965732073657460648201526084016108ac565b6000816040013511611d8e5760405162461bcd60e51b815260206004820152604160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a4016108ac565b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611e065760405162461bcd60e51b815260206004820152603f60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c617267650060648201526084016108ac565b63ffffffff7f00000000000000000000000000000000000000000000000000000000005c490016611e3d60a0830160808401613313565b63ffffffff161115611ec25760405162461bcd60e51b815260206004820152605460248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611ef360a0830160808401613313565b611efd91906138b3565b63ffffffff1615611f9d5760405162461bcd60e51b815260206004820152606a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611fce6080830160608401613313565b611fd891906138b3565b63ffffffff161561207e5760405162461bcd60e51b815260206004820152607060248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c4016108ac565b61208e6080820160608301613313565b63ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426120c69190613819565b1115801561210f57506120df6080820160608301613313565b63ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6121895760405162461bcd60e51b815260206004820152605160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a4016108ac565b6121b963ffffffff7f0000000000000000000000000000000000000000000000000000000000278d001642613738565b6121c96080830160608401613313565b63ffffffff16111561224d5760405162461bcd60e51b815260206004820152605360248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a4016108ac565b6000805b61225b83806137cf565b905081101561247e57600061227084806137cf565b8381811061228057612280613597565b6122969260206040909202019081019150613120565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c99091169063663c1de490602401602060405180830381865afa158015612301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232591906134c4565b8061234c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6123bf5760405162461bcd60e51b815260206004820152604a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a4016108ac565b806001600160a01b0316836001600160a01b03161061246c5760405162461bcd60e51b815260206004820152606960248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c4016108ac565b915061247781613763565b9050612251565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526124ee9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ad8565b50505050565b806040015163ffffffff1642101561256d5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a206044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b60648201526084016108ac565b61257a60c083018361377e565b905061258960a084018461377e565b9050146126135760405162461bcd60e51b815260206004820152604c60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a4016108ac565b61262060e08301836137cf565b905061262f60c084018461377e565b9050146126b75760405162461bcd60e51b815260206004820152604a60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a4016108ac565b80516126e3906126cd6040850160208601613313565b6126da60408601866138d6565b86606001612baa565b60005b6126f360a084018461377e565b905081101561247e5761278d608084013561271160a086018661377e565b8481811061272157612721613597565b90506020020160208101906127369190613313565b61274360c087018761377e565b8581811061275357612753613597565b905060200281019061276591906138d6565b61277260e08901896137cf565b8781811061278257612782613597565b905060400201612d1e565b61279681613763565b90506126e6565b6040516001600160a01b03831660248201526044810182905261247e90849063a9059cbb60e01b906064016124b7565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156129a457506001600160a01b03821615155b612a265760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612a6982611bb4565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6000612b2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e6f9092919063ffffffff16565b80519091501561247e5780806020019051810190612b4b91906134c4565b61247e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108ac565b612bb560208361391d565b6001901b8463ffffffff1610612c3f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a4016108ac565b6000612c4a82610a00565b9050612c9584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a4016108ac565b505050505050565b612d2960208361391d565b6001901b8463ffffffff1610612da75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e6465780000000060648201526084016108ac565b6000612db28261186e565b9050612dfd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f660060648201526084016108ac565b6060612e7e8484600085612e9e565b949350505050565b600083612e94868585612fcf565b1495945050505050565b606082471015612eff5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108ac565b6001600160a01b0385163b612f565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108ac565b600080866001600160a01b03168587604051612f72919061395d565b60006040518083038185875af1925050503d8060008114612faf576040519150601f19603f3d011682016040523d82523d6000602084013e612fb4565b606091505b5091509150612fc48282866130d2565b979650505050505050565b600060208451612fdf919061396f565b156130665760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a4016108ac565b8260205b855181116130c95761307d60028561396f565b61309e578160005280860151602052604060002091506002840493506130b7565b8086015160005281602052604060002091506002840493505b6130c2602082613738565b905061306a565b50949350505050565b606083156130e1575081611732565b8251156130f15782518084602001fd5b8160405162461bcd60e51b81526004016108ac9190613983565b6001600160a01b03811681146108be57600080fd5b60006020828403121561313257600080fd5b81356117328161310b565b80151581146108be57600080fd5b6000806040838503121561315e57600080fd5b82356131698161310b565b915060208301356131798161313d565b809150509250929050565b60006020828403121561319657600080fd5b5035919050565b6000604082840312156131af57600080fd5b50919050565b6000604082840312156131c757600080fd5b611732838361319d565b600080604083850312156131e457600080fd5b82356131ef8161310b565b915060208301356131798161310b565b6000806020838503121561321257600080fd5b823567ffffffffffffffff8082111561322a57600080fd5b818501915085601f83011261323e57600080fd5b81358181111561324d57600080fd5b8660208260051b850101111561326257600080fd5b60209290920196919550909350505050565b600061010082840312156131af57600080fd5b6000806040838503121561329a57600080fd5b823567ffffffffffffffff8111156132b157600080fd5b6132bd85828601613274565b92505060208301356131798161310b565b803563ffffffff811681146132e257600080fd5b919050565b600080604083850312156132fa57600080fd5b8235915061330a602084016132ce565b90509250929050565b60006020828403121561332557600080fd5b611732826132ce565b60006020828403121561334057600080fd5b813560ff8116811461173257600080fd5b60006020828403121561336357600080fd5b813567ffffffffffffffff81111561337a57600080fd5b612e7e84828501613274565b6000806040838503121561339957600080fd5b82356133a48161310b565b946020939093013593505050565b80356132e28161310b565b803561ffff811681146132e257600080fd5b60008060008060008060c087890312156133e857600080fd5b86356133f38161310b565b955060208701356134038161310b565b945060408701359350606087013561341a8161310b565b9250613428608088016132ce565b915061343660a088016133bd565b90509295509295509295565b60006020828403121561345457600080fd5b611732826133bd565b60006020828403121561346f57600080fd5b81516117328161310b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156134d657600080fd5b81516117328161313d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235609e198336030181126135c357600080fd5b9190910192915050565b818352600060208085019450826000805b868110156136325782356135f18161310b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461361a578384fd5b898601525060409788019792909201916001016135de565b50959695505050505050565b60008135601e1983360301811261365457600080fd5b8201803567ffffffffffffffff81111561366d57600080fd5b8060061b360384131561367f57600080fd5b60a0855261369460a0860182602085016135cd565b9150506136a3602084016133b2565b6001600160a01b03166020850152604083810135908501526136c7606084016132ce565b63ffffffff1660608501526136de608084016132ce565b63ffffffff81166080860152509392505050565b60018060a01b0384168152826020820152606060408201526000613719606083018461363e565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561374b5761374b613722565b500190565b602081526000611732602083018461363e565b600060001982141561377757613777613722565b5060010190565b6000808335601e1984360301811261379557600080fd5b83018035915067ffffffffffffffff8211156137b057600080fd5b6020019150600581901b36038213156137c857600080fd5b9250929050565b6000808335601e198436030181126137e657600080fd5b83018035915067ffffffffffffffff82111561380157600080fd5b6020019150600681901b36038213156137c857600080fd5b60008282101561382b5761382b613722565b500390565b600063ffffffff80831681851680830382111561384f5761384f613722565b01949350505050565b600063ffffffff8381169083168181101561387557613875613722565b039392505050565b600063ffffffff82168061389357613893613722565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806138ca576138ca61389d565b92169190910692915050565b6000808335601e198436030181126138ed57600080fd5b83018035915067ffffffffffffffff82111561390857600080fd5b6020019150368190038213156137c857600080fd5b60008261392c5761392c61389d565b500490565b60005b8381101561394c578181015183820152602001613934565b838111156124ee5750506000910152565b600082516135c3818460208701613931565b60008261397e5761397e61389d565b500690565b60208152600082518060208401526139a2816040850160208701613931565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212200d2a9250dcdf7eccff848dd9455a337efdd8ac02e415dd44de3502264f250c4964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e6102193660046129e8565b61057d565b005b61021e61022e366004612a05565b610639565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b366004612a34565b610778565b6102a77f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f4366004612b3d565b610a66565b61021e610a9e565b61032461030f366004612b76565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a3660046129e8565b60d16020526000908152604090205460ff1681565b61021e610b65565b61025a610375366004612b99565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a03660046129e8565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d33660046129e8565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc366004612bc7565b610b79565b6033546001600160a01b03166102a7565b6104256104203660046129e8565b610bd2565b604051610264929190612c08565b60cb546102a7906001600160a01b031681565b6103246104543660046129e8565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b61021e61049e366004612cd1565b610d52565b61021e6104b1366004612d13565b610ec6565b61021e6104c4366004612d64565b610f1a565b61021e6104d73660046129e8565b610fd2565b6102a76104ea366004612db7565b610fe3565b61021e6104fd366004612d13565b61101b565b61021e610510366004612de3565b61114f565b6102a77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61025a61054a366004612bc7565b611378565b61021e61055d3660046129e8565b611441565b61025a6114b7565b61021e610578366004612a05565b6114f5565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612e4f565b6001600160a01b0316336001600160a01b03161461062d5760405162461bcd60e51b815260040161062490612e6c565b60405180910390fd5b61063681611651565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190612eb6565b6106c15760405162461bcd60e51b815260040161062490612ed3565b6098548181161461073a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156107cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156108225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b60026065556001600160a01b038816600090815260d3602052604090205460ff16156108c95760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a401610624565b4284101561094b5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610624565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a036114b7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610a46888288611748565b610a52888c8c8c611907565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610a905760405162461bcd60e51b815260040161062490612f1b565b610a9a8282611ad6565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190612eb6565b610b265760405162461bcd60e51b815260040161062490612ed3565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610b6d611b44565b610b776000611b9e565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610bc15760405162461bcd60e51b815260040161062490612f85565b610bcc838383611bf0565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c0a57610c0a612a1e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b82811015610cc4576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610c7857610c78612fe3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610cb157610cb1612fe3565b6020908102919091010152600101610c39565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610d4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d22575b50505050509150935093505050915091565b60cb546001600160a01b03163314610d7c5760405162461bcd60e51b815260040161062490612f1b565b8060005b81811015610bcc5760d16000858584818110610d9e57610d9e612fe3565b9050602002016020810190610db391906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1615610ebe57600060d16000868685818110610ded57610ded612fe3565b9050602002016020810190610e0291906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610e5d57610e5d612fe3565b9050602002016020810190610e7291906129e8565b6040516001600160a01b03909116815260200160405180910390a1610ebe848483818110610ea257610ea2612fe3565b9050602002016020810190610eb791906129e8565b6000611ad6565b600101610d80565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f0e5760405162461bcd60e51b815260040161062490612f85565b610bcc84848484611d4c565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f625760405162461bcd60e51b815260040161062490612f85565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b5050505050505050565b610fda611b44565b61063681611fd9565b60ce6020528160005260406000208181548110610fff57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff161580801561103b5750600054600160ff909116105b806110555750303b158015611055575060005460ff166001145b6110b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610624565b6000805460ff1916600117905580156110db576000805461ff0019166101001790555b6110e3612042565b60c9556110f083836120d9565b6110f985611b9e565b61110284611fd9565b8015611148576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146111795760405162461bcd60e51b815260040161062490612f1b565b8281146112025760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a401610624565b8260005b818110156113705760d1600087878481811061122457611224612fe3565b905060200201602081019061123991906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1661136857600160d1600088888581811061127257611272612fe3565b905060200201602081019061128791906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106112e2576112e2612fe3565b90506020020160208101906112f791906129e8565b6040516001600160a01b03909116815260200160405180910390a161136886868381811061132757611327612fe3565b905060200201602081019061133c91906129e8565b85858481811061134e5761134e612fe3565b90506020020160208101906113639190612ff9565b611ad6565b600101611206565b505050505050565b6098546000908190600190811614156113cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156114225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b600260655561143333868686611907565b600160655595945050505050565b611449611b44565b6001600160a01b0381166114ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610624565b61063681611b9e565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156114e8575060c95490565b6114f0612042565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190612e4f565b6001600160a01b0316336001600160a01b03161461159c5760405162461bcd60e51b815260040161062490612e6c565b60985419811960985419161461161a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161076d565b6001600160a01b0381166116df5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610624565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561186757604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90611788908690869060040161306e565b602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613087565b6001600160e01b031916146118625760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610624565b505050565b826001600160a01b031661187b83836121bf565b6001600160a01b0316146118625760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610624565b6001600160a01b038316600090815260d16020526040812054849060ff166119ad5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610624565b6119c26001600160a01b0385163387866121e3565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3591906130b1565b9150611a4386858785611d4c565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b158015611ab557600080fd5b505af1158015611ac9573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610b775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610624565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611c655760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610624565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611cf75760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610624565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611d3f57611d35858561223d565b6001915050611d45565b60009150505b9392505050565b6001600160a01b038416611dc85760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610624565b80611e345760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610624565b6001600160a01b03808516600090815260cd6020908152604080832093861683529290522054611f45576001600160a01b038416600090815260ce602090815260409091205410611f065760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610624565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081208054839290611f7c9084906130e0565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b03161580156120fa57506001600160a01b03821615155b61217c5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610a9a82611651565b60008060006121ce858561242f565b915091506121db8161249f565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610bcc90859061265a565b6001600160a01b038216600090815260ce6020526040812054905b81811015612358576001600160a01b03848116600090815260ce602052604090208054918516918390811061228f5761228f612fe3565b6000918252602090912001546001600160a01b03161415612350576001600160a01b038416600090815260ce6020526040902080546122d0906001906130f8565b815481106122e0576122e0612fe3565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061231d5761231d612fe3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612358565b600101612258565b818114156123e05760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610624565b6001600160a01b038416600090815260ce602052604090208054806124075761240761310f565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156124665760208301516040840151606085015160001a61245a8782858561272c565b94509450505050612498565b8251604014156124905760208301516040840151612485868383612819565b935093505050612498565b506000905060025b9250929050565b60008160048111156124b3576124b3613125565b14156124bc5750565b60018160048111156124d0576124d0613125565b141561251e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610624565b600281600481111561253257612532613125565b14156125805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610624565b600381600481111561259457612594613125565b14156125ed5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610624565b600481600481111561260157612601613125565b14156106365760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610624565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128529092919063ffffffff16565b80519091501561186257808060200190518101906126cd9190612eb6565b6118625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610624565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156127635750600090506003612810565b8460ff16601b1415801561277b57508460ff16601c14155b1561278c5750600090506004612810565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661280957600060019250925050612810565b9150600090505b94509492505050565b6000806001600160ff1b0383168161283660ff86901c601b6130e0565b90506128448782888561272c565b935093505050935093915050565b60606128618484600085612869565b949350505050565b6060824710156128ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610624565b6001600160a01b0385163b6129215760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610624565b600080866001600160a01b0316858760405161293d919061313b565b60006040518083038185875af1925050503d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b509150915061298f82828661299a565b979650505050505050565b606083156129a9575081611d45565b8251156129b95782518084602001fd5b8160405162461bcd60e51b81526004016106249190613157565b6001600160a01b038116811461063657600080fd5b6000602082840312156129fa57600080fd5b8135611d45816129d3565b600060208284031215612a1757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215612a4d57600080fd5b8635612a58816129d3565b95506020870135612a68816129d3565b9450604087013593506060870135612a7f816129d3565b92506080870135915060a087013567ffffffffffffffff80821115612aa357600080fd5b818901915089601f830112612ab757600080fd5b813581811115612ac957612ac9612a1e565b604051601f8201601f19908116603f01168101908382118183101715612af157612af1612a1e565b816040528281528c6020848701011115612b0a57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b801515811461063657600080fd5b60008060408385031215612b5057600080fd5b8235612b5b816129d3565b91506020830135612b6b81612b2f565b809150509250929050565b600060208284031215612b8857600080fd5b813560ff81168114611d4557600080fd5b60008060408385031215612bac57600080fd5b8235612bb7816129d3565b91506020830135612b6b816129d3565b600080600060608486031215612bdc57600080fd5b8335612be7816129d3565b92506020840135612bf7816129d3565b929592945050506040919091013590565b604080825283519082018190526000906020906060840190828701845b82811015612c4a5781516001600160a01b031684529284019290840190600101612c25565b5050508381038285015284518082528583019183019060005b81811015612c7f57835183529284019291840191600101612c63565b5090979650505050505050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b850101111561249857600080fd5b60008060208385031215612ce457600080fd5b823567ffffffffffffffff811115612cfb57600080fd5b612d0785828601612c8c565b90969095509350505050565b60008060008060808587031215612d2957600080fd5b8435612d34816129d3565b93506020850135612d44816129d3565b92506040850135612d54816129d3565b9396929550929360600135925050565b60008060008060808587031215612d7a57600080fd5b8435612d85816129d3565b93506020850135612d95816129d3565b9250604085013591506060850135612dac816129d3565b939692955090935050565b60008060408385031215612dca57600080fd5b8235612dd5816129d3565b946020939093013593505050565b60008060008060408587031215612df957600080fd5b843567ffffffffffffffff80821115612e1157600080fd5b612e1d88838901612c8c565b90965094506020870135915080821115612e3657600080fd5b50612e4387828801612c8c565b95989497509550505050565b600060208284031215612e6157600080fd5b8151611d45816129d3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612ec857600080fd5b8151611d4581612b2f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561300b57600080fd5b8135611d4581612b2f565b60005b83811015613031578181015183820152602001613019565b83811115610bcc5750506000910152565b6000815180845261305a816020860160208601613016565b601f01601f19169290920160200192915050565b8281526040602082015260006128616040830184613042565b60006020828403121561309957600080fd5b81516001600160e01b031981168114611d4557600080fd5b6000602082840312156130c357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156130f3576130f36130ca565b500190565b60008282101561310a5761310a6130ca565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161314d818460208701613016565b9190910192915050565b602081526000611d45602083018461304256fea264697066735822122078a77ee71704c26ce62db1149f0906c813c896ae6dd2117779e31e5f8a79defd64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0xcb":"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x809d550fca64d94bd9f66e60752a544199cfac3d","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061012e5760003560e01c80635c975abb116100ab578063a69df4b51161006f578063a69df4b5146103a5578063c0c53b8b146103ba578063c8910913146103da578063d5453ac614610431578063f2fde38b14610451578063f83d08ba1461047157600080fd5b80635c975abb1461031a578063715018a61461033d5780638456cb59146103525780638da5cb5b14610367578063953ef8071461038557600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b857806358b96e27146102cd5780635a3f631a1461030557600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611c4a565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611c77565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611c77565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611c94565b610486565b005b34801561024357600080fd5b50610235610252366004611c77565b6105c3565b34801561026357600080fd5b506102356106a3565b34801561027857600080fd5b506101cc610287366004611c77565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611cc3565b6106b5565b3480156102c457600080fd5b506101cc610786565b3480156102d957600080fd5b5060fc546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016101d6565b34801561031157600080fd5b506101cc606481565b34801561032657600080fd5b5060655460ff1660405190151581526020016101d6565b34801561034957600080fd5b50610235610839565b34801561035e57600080fd5b5061023561084b565b34801561037357600080fd5b506033546001600160a01b03166102ed565b34801561039157600080fd5b5060fb546102ed906001600160a01b031681565b3480156103b157600080fd5b5061023561085b565b3480156103c657600080fd5b506102356103d5366004611d87565b6108ef565b3480156103e657600080fd5b506104166103f5366004611c77565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b34801561043d57600080fd5b5061023561044c366004611e17565b610a44565b34801561045d57600080fd5b5061023561046c366004611c77565b610c93565b34801561047d57600080fd5b50610235610d09565b61048e610d7d565b33600090815260fd6020526040902080548211156104d15780546040516321c3d50f60e01b81526004810191909152602481018390526044015b60405180910390fd5b600181015415806104e55750438160010154115b15610512576001810154604051635f6e272d60e11b815260048101919091524360248201526044016104c8565b818160000160008282546105269190611efb565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f19350505050158015610589573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316141561060c5760405162461bcd60e51b81526004016104c890611f12565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b031661065560008051602061221d833981519152546001600160a01b031690565b6001600160a01b03161461067b5760405162461bcd60e51b81526004016104c890611f5e565b61068481610dc3565b604080516000808252602082019092526106a091839190610dcb565b50565b6106ab610f3b565b6106b3610f95565b565b306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba31614156106fe5760405162461bcd60e51b81526004016104c890611f12565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b031661074760008051602061221d833981519152546001600160a01b031690565b6001600160a01b03161461076d5760405162461bcd60e51b81526004016104c890611f5e565b61077682610dc3565b61078282826001610dcb565b5050565b6000306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316146108265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104c8565b5060008051602061221d83398151915290565b610841610f3b565b6106b36000610fe7565b610853610f3b565b6106b3611039565b610863610d7d565b33600090815260fd60205260409020546108925760405163b38340cf60e01b81523360048201526024016104c8565b61089d606443611c4a565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed843916108e591815260200190565b60405180910390a2565b600054610100900460ff161580801561090f5750600054600160ff909116105b806109295750303b158015610929575060005460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c8565b6000805460ff1916600117905580156109af576000805461ff0019166101001790555b6109b7611076565b6109bf6110a5565b6109c883610fe7565b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc8054928516929091169190911790558015610a3e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60fc546001600160a01b03163314610a71576040516302a5785160e31b81523360048201526024016104c8565b610a79610d7d565b848381610a995760405163e5180e0360e01b815260040160405180910390fd5b80610ab757604051630c9d0b0160e21b815260040160405180910390fd5b80821015610ae25760405163320f0a1b60e01b815260048101839052602481018290526044016104c8565b610aed600183611efb565b821615610b1057604051636b1651e160e01b8152600481018390526024016104c8565b83610b2e57604051633a91b5a960e21b815260040160405180910390fd5b82610b4c5760405163459e386d60e01b815260040160405180910390fd5b83610b578285611faa565b11610b895783610b678285611faa565b60405163ca3b0e0f60e01b8152600481019290925260248201526044016104c8565b610b9788888d8989886110cc565b60fb54604051631700226560e21b81526001600160a01b0390911690635c008994908690610bcd908f908f908f90600401611fc9565b6000604051808303818588803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50505050508a7f4f9439a5aed9cb470d2e0756e7d293accfe5223e719a9a1a256646378ec4375884604051610c3191815260200190565b60405180910390a260fc546001600160a01b03166108fc85610c538487611faa565b610c5d9190611efb565b6040518115909202916000818181858888f19350505050158015610c85573d6000803e3d6000fd5b505050505050505050505050565b610c9b610f3b565b6001600160a01b038116610d005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c8565b6106a081610fe7565b610d11610d7d565b33600090815260fd6020526040902054610d405760405163366095e160e11b81523360048201526024016104c8565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106b35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c8565b6106a0610f3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610e0357610dfe8361145c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e5d575060408051601f3d908101601f19168201909252610e5a91810190611fff565b60015b610ec05760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104c8565b60008051602061221d8339815191528114610f2f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104c8565b50610dfe8383836114f8565b6033546001600160a01b031633146106b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c8565b610f9d61151d565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611041610d7d565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610fca3390565b600054610100900460ff1661109d5760405162461bcd60e51b81526004016104c890612018565b6106b3611566565b600054610100900460ff166106b35760405162461bcd60e51b81526004016104c890612018565b60006110d9600287612063565b905060008167ffffffffffffffff8111156110f6576110f6611cad565b60405190808252806020026020018201604052801561111f578160200160208202803683370190505b50905060005b828163ffffffff16101561124a578888611140836002612085565b63ffffffff16818110611155576111556120b1565b90506020020135898983600261116b9190612085565b6111769060016120c7565b63ffffffff1681811061118b5761118b6120b1565b905060200201356040516020016111ac929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff16815181106111da576111da6120b1565b60200260200101818152505061123889898363ffffffff16818110611201576112016120b1565b9050602002013587878463ffffffff16818110611220576112206120b1565b905060200281019061123291906120ef565b86611596565b806112428161210f565b915050611125565b63ffffffff81168511156112855761127389898363ffffffff16818110611201576112016120b1565b8061127d8161210f565b91505061124a565b611290600284612063565b92505b8215611383575060005b828163ffffffff16101561137157816112b7826002612085565b63ffffffff16815181106112cd576112cd6120b1565b6020026020010151828260026112e39190612085565b6112ee9060016120c7565b63ffffffff1681518110611304576113046120b1565b6020026020010151604051602001611326929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611354576113546120b1565b6020908102919091010152806113698161210f565b91505061129d565b61137c600284612063565b9250611293565b60018814156113f05786898960008181106113a0576113a06120b1565b90506020020135146113eb5786898960008181106113c0576113c06120b1565b905060200201356040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b611451565b8682600081518110611404576114046120b1565b602002602001015114611451578682600081518110611425576114256120b1565b60200260200101516040516327c4ed9760e21b81526004016104c8929190918252602082015260400190565b505050505050505050565b6001600160a01b0381163b6114c95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104c8565b60008051602061221d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6115018361174b565b60008251118061150e5750805b15610dfe57610a3e838361178b565b60655460ff166106b35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c8565b600054610100900460ff1661158d5760405162461bcd60e51b81526004016104c890612018565b6106b333610fe7565b80826040013510156115c85760408051637acd6fa560e11b8152908301356004820152602481018290526044016104c8565b6040805160208181018690528401358183015290830135606082015246608082015260009060a00160408051601f198184030181529190528051602090910120905060006116566116198580612133565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061187f9050565b90506001600160a01b03811661167f57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146116d55760028101546040516306427aeb60e01b81526004810191909152602086013560248201526044016104c8565b6002810180549060006116e78361217a565b9091555050805484111561172a578054604051632557019960e21b81526001600160a01b03841660048201526024810191909152604481018590526064016104c8565b8381600001600082825461173e9190611efb565b9091555050505050505050565b6117548161145c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6117f35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c8565b600080846001600160a01b03168460405161180e91906121c1565b600060405180830381855af49150503d8060008114611849576040519150601f19603f3d011682016040523d82523d6000602084013e61184e565b606091505b5091509150611876828260405180606001604052806027815260200161223d602791396118a3565b95945050505050565b600080600061188e85856118e3565b9150915061189b81611953565b509392505050565b606083156118b25750816118dc565b8251156118c25782518084602001fd5b8160405162461bcd60e51b81526004016104c891906121d3565b9392505050565b60008082516041141561191a5760208301516040840151606085015160001a61190e87828585611b0e565b9450945050505061194c565b8251604014156119445760208301516040840151611939868383611bfb565b93509350505061194c565b506000905060025b9250929050565b600081600481111561196757611967612206565b14156119705750565b600181600481111561198457611984612206565b14156119d25760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104c8565b60028160048111156119e6576119e6612206565b1415611a345760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104c8565b6003816004811115611a4857611a48612206565b1415611aa15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104c8565b6004816004811115611ab557611ab5612206565b14156106a05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b455750600090506003611bf2565b8460ff16601b14158015611b5d57508460ff16601c14155b15611b6e5750600090506004611bf2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611bc2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611beb57600060019250925050611bf2565b9150600090505b94509492505050565b6000806001600160ff1b03831681611c1860ff86901c601b611c4a565b9050611c2687828885611b0e565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611c5d57611c5d611c34565b500190565b6001600160a01b03811681146106a057600080fd5b600060208284031215611c8957600080fd5b81356118dc81611c62565b600060208284031215611ca657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611cd657600080fd5b8235611ce181611c62565b9150602083013567ffffffffffffffff80821115611cfe57600080fd5b818501915085601f830112611d1257600080fd5b813581811115611d2457611d24611cad565b604051601f8201601f19908116603f01168101908382118183101715611d4c57611d4c611cad565b81604052828152886020848701011115611d6557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600060608486031215611d9c57600080fd5b8335611da781611c62565b92506020840135611db781611c62565b91506040840135611dc781611c62565b809150509250925092565b60008083601f840112611de457600080fd5b50813567ffffffffffffffff811115611dfc57600080fd5b6020830191508360208260051b850101111561194c57600080fd5b600080600080600080600080600060c08a8c031215611e3557600080fd5b8935985060208a013567ffffffffffffffff80821115611e5457600080fd5b818c0191508c601f830112611e6857600080fd5b813581811115611e7757600080fd5b8d6020828501011115611e8957600080fd5b602083019a508099505060408c0135915080821115611ea757600080fd5b611eb38d838e01611dd2565b909850965060608c0135915080821115611ecc57600080fd5b50611ed98c828d01611dd2565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b600082821015611f0d57611f0d611c34565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000816000190483118215151615611fc457611fc4611c34565b500290565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561201157600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261208057634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516818304811182151516156120a8576120a8611c34565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156120e6576120e6611c34565b01949350505050565b60008235605e1983360301811261210557600080fd5b9190910192915050565b600063ffffffff8083168181141561212957612129611c34565b6001019392505050565b6000808335601e1984360301811261214a57600080fd5b83018035915067ffffffffffffffff82111561216557600080fd5b60200191503681900382131561194c57600080fd5b600060001982141561218e5761218e611c34565b5060010190565b60005b838110156121b0578181015183820152602001612198565b83811115610a3e5750506000910152565b60008251612105818460208701612195565b60208152600082518060208401526121f2816040850160208701612195565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201489ebc4a06e5078c62dd165f10db4c3ddbb8cc07d7a233f67fd8f3d0f98985664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103265760003560e01c80635b0b829f116101b85780639e9923c211610104578063d72d8dd6116100a2578063e65797ad1161007c578063e65797ad1461083b578063f2fde38b146108de578063fabc1cbc146108f1578063fd39105a1461090457600080fd5b8063d72d8dd61461080d578063d75b4c8814610815578063dd8283f31461082857600080fd5b8063a96f783e116100de578063a96f783e146107aa578063c391425e146107b3578063ca0de882146107d3578063ca4f2d97146107fa57600080fd5b80639e9923c2146107495780639feab85914610770578063a50857bf1461079757600080fd5b8063715018a611610171578063886f11951161014b578063886f1195146106f65780638da5cb5b1461070f5780639aa1653d146107175780639b5d177b1461073657600080fd5b8063715018a6146106c857806384ca5213146106d0578063871ef049146106e357600080fd5b80635b0b829f146106395780635c975abb1461064c5780635df45946146106545780636347c9001461067b578063683048351461068e5780636e3b17db146106b557600080fd5b8063249a0c42116102775780633998fdd3116102305780635140a5481161020a5780635140a548146105df5780635865c60c146105f2578063595c6a67146106125780635ac86ab71461061a57600080fd5b80633998fdd31461056c5780633af32abf146105935780633c2a7f4c146105bf57600080fd5b8063249a0c42146104ed57806328f61b311461050d57806329092d0e14610520578063296bb0641461053357806329d1e0c3146105465780632cdd1e861461055957600080fd5b80630d3f2134116102e457806313542a4e116102be57806313542a4e14610435578063136439dd1461045e5780631478851f146104715780631eb812da146104a457600080fd5b80630d3f2134146103ef57806310d67a2f14610402578063125e05841461041557600080fd5b8062cf2ab51461032b57806303fd34921461034057806304ec635114610373578063054310e61461039e5780630a3b0a4f146103c95780630cf4b767146103dc575b600080fd5b61033e610339366004614429565b610940565b005b61036061034e36600461446a565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b610386610381366004614495565b610a56565b6040516001600160c01b03909116815260200161036a565b609d546103b1906001600160a01b031681565b6040516001600160a01b03909116815260200161036a565b61033e6103d73660046144f2565b610b66565b61033e6103ea3660046145f6565b610b92565b61033e6103fd36600461446a565b610c3c565b61033e6104103660046144f2565b610c49565b6103606104233660046144f2565b609f6020526000908152604090205481565b6103606104433660046144f2565b6001600160a01b031660009081526099602052604090205490565b61033e61046c36600461446a565b610cfc565b61049461047f36600461446a565b609a6020526000908152604090205460ff1681565b604051901515815260200161036a565b6104b76104b2366004614646565b610e39565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b03169082015260600161036a565b6103606104fb366004614679565b609b6020526000908152604090205481565b609e546103b1906001600160a01b031681565b61033e61052e3660046144f2565b610eca565b6103b161054136600461446a565b610ef3565b61033e6105543660046144f2565b610f7f565b61033e6105673660046144f2565b610f90565b6103b17f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e881565b6104946105a13660046144f2565b6001600160a01b0316600090815260c8602052604090205460ff1690565b6105d26105cd3660046144f2565b610fa1565b60405161036a9190614694565b61033e6105ed3660046146ec565b611020565b6106056106003660046144f2565b611406565b60405161036a919061478f565b61033e61147a565b610494610628366004614679565b6001805460ff9092161b9081161490565b61033e610647366004614814565b611546565b600154610360565b6103b17f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6103b161068936600461446a565b6115a0565b6103b17f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b61033e6106c3366004614848565b6115ca565b61033e61171f565b6103606106de3660046148ff565b611733565b6103866106f136600461446a565b61177d565b6000546103b1906201000090046001600160a01b031681565b6103b1611788565b6096546107249060ff1681565b60405160ff909116815260200161036a565b61033e610744366004614a98565b6117a1565b6103b17f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3681565b6103607f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b61033e6107a5366004614b91565b611abb565b61036060a05481565b6107c66107c1366004614c39565b611c21565b60405161036a9190614cde565b6103607f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b61033e610808366004614d28565b611cda565b609c54610360565b61033e610823366004614e0e565b611d41565b61033e610836366004614fc1565b611d54565b6108aa610849366004614679565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff90811691830191909152928201519092169082015260600161036a565b61033e6108ec3660046144f2565b61201e565b61033e6108ff36600461446a565b612094565b6109336109123660046144f2565b6001600160a01b031660009081526099602052604090206001015460ff1690565b60405161036a9190615095565b600154600290600490811614156109725760405162461bcd60e51b8152600401610969906150a3565b60405180910390fd5b60005b82811015610a50576000848483818110610991576109916150da565b90506020020160208101906109a691906144f2565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156109f1576109f1614757565b6002811115610a0257610a02614757565b90525080519091506000610a15826121f0565b90506000610a2b826001600160c01b0316612259565b9050610a38858583612325565b50505050508080610a4890615106565b915050610975565b50505050565b6000838152609860205260408120805482919084908110610a7957610a796150da565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610aff5760405162461bcd60e51b8152602060048201526003602482015262189b8f60ea1b6044820152606401610969565b602081015163ffffffff161580610b255750806020015163ffffffff168463ffffffff16105b610b5a5760405162461bcd60e51b81526004016109699060208082526004908201526331371e1960e11b604082015260600190565b60400151949350505050565b610b6e612412565b6001600160a01b0316600090815260c860205260409020805460ff19166001179055565b60013360009081526099602052604090206001015460ff166002811115610bbb57610bbb614757565b14610bf05760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610969565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c3190849061516e565b60405180910390a250565b610c44612412565b60a055565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190615181565b6001600160a01b0316336001600160a01b031614610cf05760405162461bcd60e51b81526004016109699061519e565b610cf981612471565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d91906151e8565b610d895760405162461bcd60e51b81526004016109699061520a565b60015481811614610e025760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610969565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c31565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e7657610e766150da565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b610ed2612412565b6001600160a01b0316600090815260c860205260409020805460ff19169055565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b0316906347b314e890602401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615181565b610f87612412565b610cf981612576565b610f98612412565b610cf9816125df565b6040805180820190915260008082526020820152610ec461101b7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de6846040516020016110009291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612648565b612696565b600154600290600490811614156110495760405162461bcd60e51b8152600401610969906150a3565b600061109184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506127269050565b90508483146110cb5760405162461bcd60e51b81526020600482015260066024820152653931a8a632b760d11b6044820152606401610969565b60005b838110156113fd5760008585838181106110ea576110ea6150da565b919091013560f81c9150369050600089898581811061110b5761110b6150da565b905060200281019061111d9190615252565b6040516379a0849160e11b815260ff8616600482015291935091507f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b03169063f341092290602401602060405180830381865afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061529b565b63ffffffff1681146111ec5760405162461bcd60e51b81526020600482015260086024820152673931a8a7b82632b760c11b6044820152606401610969565b6000805b8281101561139c57600084848381811061120c5761120c6150da565b905060200201602081019061122191906144f2565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561126c5761126c614757565b600281111561127d5761127d614757565b90525080519091506000611290826121f0565b905060016001600160c01b03821660ff8b161c8116146112dd5760405162461bcd60e51b815260206004820152600860248201526772634f702152656760c01b6044820152606401610969565b856001600160a01b0316846001600160a01b0316116113285760405162461bcd60e51b8152602060048201526007602482015266072634475704f760cc1b6044820152606401610969565b5061138683838f8f8d908e600161133f91906152b8565b9261134c939291906152d0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061232592505050565b50909250611395905081615106565b90506111f0565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a250505050806113f690615106565b90506110ce565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561146057611460614757565b600281111561147157611471614757565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb91906151e8565b6115075760405162461bcd60e51b81526004016109699061520a565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61154e612412565b609654829060ff908116908216106115915760405162461bcd60e51b815260206004820152600660248201526552433a71214560d01b6044820152606401610969565b61159b83836127b7565b505050565b609c81815481106115b057600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146116115760405162461bcd60e51b815260206004820152600a602482015269292190b2b532b1ba37b960b11b6044820152606401610969565b6001600160a01b0383166000908152609f602090815260408083204290556099825280832080548251601f870185900485028101850190935285835290939092909161167e9187908790819084018382808284376000920191909152505060965460ff1691506127269050565b9050600061168b836121f0565b905060018085015460ff1660028111156116a7576116a7614757565b1480156116bc57506001600160c01b03821615155b80156116da57506116da6001600160c01b0383811690831681161490565b156113fd576113fd8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b611727612412565b6117316000612bec565b565b60006117737f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001611000969594939291906152fa565b9695505050505050565b6000610ec4826121f0565b600061179c6064546001600160a01b031690565b905090565b6001805460009190811614156117c95760405162461bcd60e51b8152600401610969906150a3565b33600090815260c8602052604090205460ff1661181a5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610969565b8389146118525760405162461bcd60e51b81526004016109699060208082526004908201526338a632b760e11b604082015260600190565b600061185e3388612c3e565b90506118be33828888808060200260200160405190810160405280939291908181526020016000905b828210156118b3576118a46040830286013681900381019061537f565b81526020019060010190611887565b505050505087612d6f565b600061190533838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e4b915050565b90506000609760008e8e6000818110611920576119206150da565b919091013560f81c825250602080820192909252604090810160009081208251606081018452905463ffffffff811680835261ffff600160201b8304811696840196909652600160301b90910490941692810192909252845180519294509161198b5761198b6150da565b602002602001015163ffffffff161115611aac57611a308d8d60008181106119b5576119b56150da565b9050013560f81c60f81b60f81c83604001516000815181106119d9576119d96150da565b60200260200101513385602001516000815181106119f9576119f96150da565b60200260200101518c8c6000818110611a1457611a146150da565b905060400201803603810190611a2a919061537f565b8661330f565b611aac88886000818110611a4657611a466150da565b9050604002016020016020810190611a5e91906144f2565b8e8e600090600192611a72939291906152d0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b50505050505050505050505050565b600180546000919081161415611ae35760405162461bcd60e51b8152600401610969906150a3565b33600090815260c8602052604090205460ff16611b345760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610969565b6000611b403385612c3e565b90506000611b8933838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e4b915050565b51600080805260976020527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c754825192935063ffffffff1691839190611bd157611bd16150da565b602002602001015163ffffffff161115611c165760405162461bcd60e51b81526020600482015260066024820152650714d61784f760d41b6044820152606401610969565b505050505050505050565b6060600082516001600160401b03811115611c3e57611c3e61450f565b604051908082528060200260200182016040528015611c67578160200160208202803683370190505b50905060005b8351811015611cd257611c9985858381518110611c8c57611c8c6150da565b60200260200101516134df565b828281518110611cab57611cab6150da565b63ffffffff9092166020928302919091019091015280611cca81615106565b915050611c6d565b509392505050565b6001805460029081161415611d015760405162461bcd60e51b8152600401610969906150a3565b61159b3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b611d49612412565b61159b8383836135a2565b600054610100900460ff1615808015611d745750600054600160ff909116105b80611d8e5750303b158015611d8e575060005460ff166001145b611df15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610969565b6000805460ff191660011790558015611e14576000805461ff0019166101001790555b82518451148015611e26575081518351145b611e575760405162461bcd60e51b8152602060048201526002602482015261494560f01b6044820152606401610969565b611e6089612bec565b611e6a8686613784565b611e7388612576565b611e7c876125df565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881166001600160a01b03199283161790925585548085018755850180547f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e841690831617905585549384019095559190920180547f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3690921691909316179091555b8451811015611fcd57611fbb858281518110611f7a57611f7a6150da565b6020026020010151858381518110611f9457611f946150da565b6020026020010151858481518110611fae57611fae6150da565b60200260200101516135a2565b80611fc581615106565b915050611f5c565b508015611c16576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b612026612412565b6001600160a01b03811661208b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b610cf981612bec565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210b9190615181565b6001600160a01b0316336001600160a01b03161461213b5760405162461bcd60e51b81526004016109699061519e565b6001541981196001541916146121b95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610969565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c31565b6000818152609860205260408120548061220d5750600092915050565b600083815260986020526040902061222660018361539b565b81548110612236576122366150da565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061226784613874565b61ffff166001600160401b038111156122825761228261450f565b6040519080825280601f01601f1916602001820160405280156122ac576020820181803683370190505b5090506000805b8251821080156122c4575061010081105b1561231b576001811b93508584161561230b578060f81b8383815181106122ed576122ed6150da565b60200101906001600160f81b031916908160001a9053508160010191505b61231481615106565b90506122b3565b5090949350505050565b60018260200151600281111561233d5761233d614757565b1461234757505050565b81516040516333567f7f60e11b81526000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816906366acfefe9061239c908890869088906004016153b2565b6020604051808303816000875af11580156123bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123df91906153e2565b90506001600160c01b0381161561240b5761240b85612406836001600160c01b0316612259565b612864565b5050505050565b3361241b611788565b6001600160a01b0316146117315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610969565b6001600160a01b0381166124ff5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610969565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ec461265561389f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806126c66000805160206158a283398151915286615421565b90505b6126d2816139c6565b90935091506000805160206158a283398151915282830983141561270c576040805180820190915290815260208101919091529392505050565b6000805160206158a28339815191526001820890506126c9565b60008061273284613a48565b9050808360ff166001901b116127b05760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610969565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561289857612898614757565b146128cd5760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610969565b6096546000906128e190859060ff16612726565b905060006128ee836121f0565b90506001600160c01b03821661292f5760405162461bcd60e51b815260040161096990602080825260049082015263071456d760e41b604082015260600190565b6129466001600160c01b0383811690831681161490565b61297b5760405162461bcd60e51b81526004016109699060208082526004908201526310a9bab160e11b604082015260600190565b6001600160c01b03828116198216166129948482613bd5565b6001600160c01b038116612a635760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169063a364f4da90602401600060405180830381600087803b158015612a1457600080fd5b505af1158015612a28573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e169063f4e24fe590612ab1908a908a90600401615435565b600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063bd29b8cd9150612b319087908a90600401615459565b600060405180830381600087803b158015612b4b57600080fd5b505af1158015612b5f573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3616925063bd29b8cd9150612bb19087908a90600401615459565b600060405180830381600087803b158015612bcb57600080fd5b505af1158015612bdf573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e909116906313542a4e90602401602060405180830381865afa158015612ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccd9190615472565b905080610ec4577f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031663bf79ce588484612d0e87610fa1565b6040518463ffffffff1660e01b8152600401612d2c9392919061548b565b6020604051808303816000875af1158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615472565b6020808201516000908152609a909152604090205460ff1615612dbd5760405162461bcd60e51b815260206004820152600660248201526518da14d85b1d60d21b6044820152606401610969565b4281604001511015612df95760405162461bcd60e51b8152602060048201526005602482015264063684578760dc1b6044820152606401610969565b602080820180516000908152609a909252604091829020805460ff19166001179055609d54905191830151610a50926001600160a01b0390921691612e449188918891889190611733565b8351613d95565b612e6f60405180606001604052806060815260200160608152602001606081525090565b6000612eb786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506127269050565b90506000612ec4886121f0565b90506001600160c01b038216612f055760405162461bcd60e51b815260040161096990602080825260049082015263071456d760e41b604082015260600190565b8082166001600160c01b031615612f475760405162461bcd60e51b81526004016109699060208082526004908201526308509a5d60e21b604082015260600190565b60a0546001600160a01b038a166000908152609f60205260409020546001600160c01b0383811690851617914291612f7f91906152b8565b10612fb45760405162461bcd60e51b815260206004820152600560248201526410b7b822b560d91b6044820152606401610969565b612fbe8982613bd5565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051612fee919061516e565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561302857613028614757565b14613141576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561308357613083614757565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169150639926ee7d906130d8908d90899060040161550a565b600060405180830381600087803b1580156130f257600080fd5b505af1158015613106573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e1690633fb2795290613191908d908c908c9060040161557e565b600060405180830381600087803b1580156131ab57600080fd5b505af11580156131bf573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063255047779150613215908d908d908d908d906004016155a3565b6000604051808303816000875af1158015613234573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261325c919081019061562f565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36169062bff04d906132b9908c908c908c90600401615692565b6000604051808303816000875af11580156132d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261330091908101906156ac565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156133695760405162461bcd60e51b815260206004820152600360248201526206368360ec1b6044820152606401610969565b8760ff16846000015160ff16146133a85760405162461bcd60e51b815260206004820152600360248201526263683160e81b6044820152606401610969565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690635401ed2790604401602060405180830381865afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190615745565b90506134498185613f4f565b6001600160601b0316866001600160601b03161161348f5760405162461bcd60e51b815260206004820152600360248201526231b41960e91b6044820152606401610969565b6134998885613f73565b6001600160601b0316816001600160601b031610611c165760405162461bcd60e51b815260206004820152600360248201526263683360e81b6044820152606401610969565b600081815260986020526040812054815b81811015613571576001613504828461539b565b61350e919061539b565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110613541576135416150da565b60009182526020909120015463ffffffff161161355f575050610ec4565b8061356981615106565b9150506134f0565b5060405162461bcd60e51b81526020600482015260056024820152644f2152656760d81b6044820152606401610969565b60965460ff1660c081106135e15760405162461bcd60e51b8152600401610969906020808252600490820152630e29ac2f60e31b604082015260600190565b6135ec816001615762565b6096805460ff191660ff929092169190911790558061360b81866127b7565b60405160016296b58960e01b031981526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778169063ff694a779061365e90849088908890600401615787565b600060405180830381600087803b15801561367857600080fd5b505af115801561368c573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b031692506326d941f29150602401600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031692506326d941f29150602401600060405180830381600087803b15801561377057600080fd5b505af1158015611c16573d6000803e3d6000fd5b6000546201000090046001600160a01b03161580156137ab57506001600160a01b03821615155b61382d5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610969565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261387082612471565b5050565b6000805b8215610ec45761388960018461539b565b909216918061389781615800565b915050613878565b6000306001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd00161480156138f857507f0000000000000000000000000000000000000000000000000000000000007a6946145b1561392257507fc6374306ca0c3d05fd3f0cebbec8fc4308f71679c06b0e30a95d8c9709d43dae90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600080806000805160206158a283398151915260036000805160206158a2833981519152866000805160206158a2833981519152888909090890506000613a3c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206158a2833981519152613f8d565b91959194509092505050565b600061010082511115613ad15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610969565b8151613adf57506000919050565b60008083600081518110613af557613af56150da565b0160200151600160f89190911c81901b92505b8451811015613bcc57848181518110613b2357613b236150da565b0160200151600160f89190911c1b9150828211613bb85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610969565b91811791613bc581615106565b9050613b08565b50909392505050565b60008281526098602052604090205480613c7a576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b6000838152609860205260408120613c9360018461539b565b81548110613ca357613ca36150da565b600091825260209091200180549091504363ffffffff90811691161415613ce75780546001600160401b0316600160401b6001600160c01b03851602178155610a50565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b15613eaf57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90613dd59086908690600401615459565b602060405180830381865afa158015613df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e169190615822565b6001600160e01b0319161461159b5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610969565b826001600160a01b0316613ec3838361403c565b6001600160a01b03161461159b5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610969565b602081015160009061271090613f699061ffff168561584c565b6127b0919061587b565b604081015160009061271090613f699061ffff168561584c565b600080613f986143a9565b613fa06143c7565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613fe157613fe3565bfe5b50826140315760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610969565b505195945050505050565b600080600061404b8585614058565b91509150611cd2816140c8565b60008082516041141561408f5760208301516040840151606085015160001a61408387828585614283565b945094505050506140c1565b8251604014156140b957602083015160408401516140ae868383614370565b9350935050506140c1565b506000905060025b9250929050565b60008160048111156140dc576140dc614757565b14156140e55750565b60018160048111156140f9576140f9614757565b14156141475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610969565b600281600481111561415b5761415b614757565b14156141a95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610969565b60038160048111156141bd576141bd614757565b14156142165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610969565b600481600481111561422a5761422a614757565b1415610cf95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610969565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156142ba5750600090506003614367565b8460ff16601b141580156142d257508460ff16601c14155b156142e35750600090506004614367565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614337573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661436057600060019250925050614367565b9150600090505b94509492505050565b6000806001600160ff1b0383168161438d60ff86901c601b6152b8565b905061439b87828885614283565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126143f757600080fd5b5081356001600160401b0381111561440e57600080fd5b6020830191508360208260051b85010111156140c157600080fd5b6000806020838503121561443c57600080fd5b82356001600160401b0381111561445257600080fd5b61445e858286016143e5565b90969095509350505050565b60006020828403121561447c57600080fd5b5035919050565b63ffffffff81168114610cf957600080fd5b6000806000606084860312156144aa57600080fd5b8335925060208401356144bc81614483565b929592945050506040919091013590565b6001600160a01b0381168114610cf957600080fd5b80356144ed816144cd565b919050565b60006020828403121561450457600080fd5b81356127b0816144cd565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156145475761454761450f565b60405290565b604080519081016001600160401b03811182821017156145475761454761450f565b604051601f8201601f191681016001600160401b03811182821017156145975761459761450f565b604052919050565b60006001600160401b038311156145b8576145b861450f565b6145cb601f8401601f191660200161456f565b90508281528383830111156145df57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561460857600080fd5b81356001600160401b0381111561461e57600080fd5b8201601f8101841361462f57600080fd5b61463e8482356020840161459f565b949350505050565b6000806040838503121561465957600080fd5b50508035926020909101359150565b803560ff811681146144ed57600080fd5b60006020828403121561468b57600080fd5b6127b082614668565b815181526020808301519082015260408101610ec4565b60008083601f8401126146bd57600080fd5b5081356001600160401b038111156146d457600080fd5b6020830191508360208285010111156140c157600080fd5b6000806000806040858703121561470257600080fd5b84356001600160401b038082111561471957600080fd5b614725888389016143e5565b9096509450602087013591508082111561473e57600080fd5b5061474b878288016146ab565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061478b57634e487b7160e01b600052602160045260246000fd5b9052565b8151815260208083015160408301916147aa9084018261476d565b5092915050565b803561ffff811681146144ed57600080fd5b6000606082840312156147d557600080fd5b6147dd614525565b905081356147ea81614483565b81526147f8602083016147b1565b6020820152614809604083016147b1565b604082015292915050565b6000806080838503121561482757600080fd5b61483083614668565b915061483f84602085016147c3565b90509250929050565b60008060006040848603121561485d57600080fd5b8335614868816144cd565b925060208401356001600160401b0381111561488357600080fd5b61488f868287016146ab565b9497909650939450505050565b60006001600160401b038211156148b5576148b561450f565b5060051b60200190565b6000604082840312156148d157600080fd5b6148d961454d565b90506148e482614668565b815260208201356148f4816144cd565b602082015292915050565b600080600080600060a0868803121561491757600080fd5b8535614922816144cd565b945060208681013594506040808801356001600160401b0381111561494657600080fd5b8801601f81018a1361495757600080fd5b803561496a6149658261489c565b61456f565b81815260069190911b8201840190848101908c83111561498957600080fd5b928501925b828410156149af576149a08d856148bf565b8252928401929085019061498e565b999c989b5098996060810135995060800135979650505050505050565b600061010082840312156149df57600080fd5b50919050565b60008083601f8401126149f757600080fd5b5081356001600160401b03811115614a0e57600080fd5b6020830191508360208260061b85010111156140c157600080fd5b600060608284031215614a3b57600080fd5b614a43614525565b905081356001600160401b03811115614a5b57600080fd5b8201601f81018413614a6c57600080fd5b614a7b8482356020840161459f565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614ab757600080fd5b89356001600160401b0380821115614ace57600080fd5b614ada8d838e016146ab565b909b50995060208c0135915080821115614af357600080fd5b614aff8d838e016146ab565b9099509750879150614b148d60408e016149cc565b96506101408c0135915080821115614b2b57600080fd5b614b378d838e016149e5565b90965094506101608c0135915080821115614b5157600080fd5b614b5d8d838e01614a29565b93506101808c0135915080821115614b7457600080fd5b50614b818c828d01614a29565b9150509295985092959850929598565b6000806000806000806101608789031215614bab57600080fd5b86356001600160401b0380821115614bc257600080fd5b614bce8a838b016146ab565b90985096506020890135915080821115614be757600080fd5b614bf38a838b016146ab565b9096509450849150614c088a60408b016149cc565b9350610140890135915080821115614c1f57600080fd5b50614c2c89828a01614a29565b9150509295509295509295565b60008060408385031215614c4c57600080fd5b8235614c5781614483565b91506020838101356001600160401b03811115614c7357600080fd5b8401601f81018613614c8457600080fd5b8035614c926149658261489c565b81815260059190911b82018301908381019088831115614cb157600080fd5b928401925b82841015614ccf57833582529284019290840190614cb6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614d1c57835163ffffffff1683529284019291840191600101614cfa565b50909695505050505050565b60008060208385031215614d3b57600080fd5b82356001600160401b03811115614d5157600080fd5b61445e858286016146ab565b6001600160601b0381168114610cf957600080fd5b600082601f830112614d8357600080fd5b81356020614d936149658361489c565b82815260069290921b84018101918181019086841115614db257600080fd5b8286015b84811015614e035760408189031215614dcf5760008081fd5b614dd761454d565b8135614de2816144cd565b815281850135614df181614d5d565b81860152835291830191604001614db6565b509695505050505050565b600080600060a08486031215614e2357600080fd5b614e2d85856147c3565b92506060840135614e3d81614d5d565b915060808401356001600160401b03811115614e5857600080fd5b614e6486828701614d72565b9150509250925092565b600082601f830112614e7f57600080fd5b81356020614e8f6149658361489c565b82815260609283028501820192828201919087851115614eae57600080fd5b8387015b85811015614ed157614ec489826147c3565b8452928401928101614eb2565b5090979650505050505050565b600082601f830112614eef57600080fd5b81356020614eff6149658361489c565b82815260059290921b84018101918181019086841115614f1e57600080fd5b8286015b84811015614e03578035614f3581614d5d565b8352918301918301614f22565b600082601f830112614f5357600080fd5b81356020614f636149658361489c565b82815260059290921b84018101918181019086841115614f8257600080fd5b8286015b84811015614e035780356001600160401b03811115614fa55760008081fd5b614fb38986838b0101614d72565b845250918301918301614f86565b600080600080600080600080610100898b031215614fde57600080fd5b614fe7896144e2565b9750614ff560208a016144e2565b965061500360408a016144e2565b955061501160608a016144e2565b94506080890135935060a08901356001600160401b038082111561503457600080fd5b6150408c838d01614e6e565b945060c08b013591508082111561505657600080fd5b6150628c838d01614ede565b935060e08b013591508082111561507857600080fd5b506150858b828c01614f42565b9150509295985092959890939650565b60208101610ec4828461476d565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561511a5761511a6150f0565b5060010190565b6000815180845260005b818110156151475760208185018101518683018201520161512b565b81811115615159576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006127b06020830184615121565b60006020828403121561519357600080fd5b81516127b0816144cd565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156151fa57600080fd5b815180151581146127b057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e1984360301811261526957600080fd5b8301803591506001600160401b0382111561528357600080fd5b6020019150600581901b36038213156140c157600080fd5b6000602082840312156152ad57600080fd5b81516127b081614483565b600082198211156152cb576152cb6150f0565b500190565b600080858511156152e057600080fd5b838611156152ed57600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b8181101561535f578651805160ff1684528601518516868401529585019591830191600101615335565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561539157600080fd5b6127b083836148bf565b6000828210156153ad576153ad6150f0565b500390565b60018060a01b03841681528260208201526060604082015260006153d96060830184615121565b95945050505050565b6000602082840312156153f457600080fd5b81516001600160c01b03811681146127b057600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826154305761543061540b565b500690565b6001600160a01b038316815260406020820181905260009061463e90830184615121565b82815260406020820152600061463e6040830184615121565b60006020828403121561548457600080fd5b5051919050565b6001600160a01b038416815261016081016154b3602083018580358252602090810135910152565b6154cd606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b038316815260406020820152600082516060604084015261553460a0840182615121565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906153d99083018486615555565b60018060a01b0385168152836020820152606060408201526000611773606083018486615555565b600082601f8301126155dc57600080fd5b815160206155ec6149658361489c565b82815260059290921b8401810191818101908684111561560b57600080fd5b8286015b84811015614e0357805161562281614d5d565b835291830191830161560f565b6000806040838503121561564257600080fd5b82516001600160401b038082111561565957600080fd5b615665868387016155cb565b9350602085015191508082111561567b57600080fd5b50615688858286016155cb565b9150509250929050565b8381526040602082015260006153d9604083018486615555565b600060208083850312156156bf57600080fd5b82516001600160401b038111156156d557600080fd5b8301601f810185136156e657600080fd5b80516156f46149658261489c565b81815260059190911b8201830190838101908783111561571357600080fd5b928401925b8284101561573a57835161572b81614483565b82529284019290840190615718565b979650505050505050565b60006020828403121561575757600080fd5b81516127b081614d5d565b600060ff821660ff84168060ff0382111561577f5761577f6150f0565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b818110156157f057865180516001600160a01b0316845286015185168684015295850195918301916001016157c0565b50909a9950505050505050505050565b600061ffff80831681811415615818576158186150f0565b6001019392505050565b60006020828403121561583457600080fd5b81516001600160e01b0319811681146127b057600080fd5b60006001600160601b0380831681851681830481118215151615615872576158726150f0565b02949350505050565b60006001600160601b03808416806158955761589561540b565b9216919091049291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220ff8c287943c6fe11e0027554d61cfa2a42e48467b12f2c24712aef8bead3996364736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5bc5b424ff8db9bd8202cae3beb193c946b905d8ebddb990e36a723af40eb1c4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614c9f565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000077359400081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614cdc565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614d6f565b610764565b34801561036757600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561039b57600080fd5b506103af6103aa366004614e80565b610caf565b60405161020f9190614ef9565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614f07565b610d14565b60405161020f9190614f20565b34801561041557600080fd5b506103af610424366004614f07565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000424242424242424242424242424242424242424281565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614f68565b610dc1565b3480156104ba57600080fd5b5061022d6104c9366004614fdb565b610f6e565b3480156104da57600080fd5b506103fc6104e9366004614e80565b611304565b3480156104fa57600080fd5b5061022d6113f7565b34801561050f57600080fd5b5061022d61051e366004615085565b611462565b34801561052f57600080fd5b5061022d61053e3660046150b1565b61169f565b34801561054f57600080fd5b5061022d61055e3660046151cb565b611877565b34801561056f57600080fd5b5061022d61057e36600461529c565b611a4a565b34801561058f57600080fd5b5061022d61059e366004615085565b611e15565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190615397565b156106ad5760405162461bcd60e51b81526004016106a4906153b9565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a49061545e565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611ff8565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190615397565b156108375760405162461bcd60e51b81526004016106a4906153b9565b603454600160401b900460ff166108af5760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b85841480156108bd57508382145b61094d5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b603354600160a01b90046001600160401b031615806109a2575060335461098c9061098790600160a01b90046001600160401b031661202c565b612116565b6001600160401b0316896001600160401b031610155b610a2e5760405162461bcd60e51b815260206004820152605160248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2070726f6f66206d75737420626520696e207468652065706f63686064820152701030b33a32b91030b1ba34bb30ba34b7b760791b608482015260a4016106a4565b42610a44613f486001600160401b038c16614c9f565b1015610acd5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152610b76907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906154ad565b8935610b7160208c018c6154c6565b612163565b6000805b87811015610c1a57610bfc8b8b358b8b85818110610b9a57610b9a61550c565b9050602002016020810190610baf9190615522565b8a8a86818110610bc157610bc161550c565b9050602002810190610bd391906154c6565b8a8a88818110610be557610be561550c565b9050602002810190610bf79190615549565b6122f1565b610c069083614c9f565b915080610c1281615592565b915050610b7a565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c2c51c40906044015b600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050505050505050505050505050565b600080610cf184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610d3c6040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610da757610da7614ec1565b6002811115610db857610db8614ec1565b90525092915050565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe61614610e095760405162461bcd60e51b81526004016106a4906155ad565b346801bc16d674ec80000014610e955760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663228951186801bc16d674ec8000008787610ed86128a5565b8888886040518863ffffffff1660e01b8152600401610efc9695949392919061567f565b6000604051808303818588803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610f5f9291906156ce565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190615397565b156110175760405162461bcd60e51b81526004016106a4906153b9565b868414801561102557508382145b6110ae5760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b426110c4613f486001600160401b038c16614c9f565b10156111465760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a1660048201526111ea907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906154ad565b8735610b7160208a018a6154c6565b6000805b8881101561128e576112708b8b8b8481811061120c5761120c61550c565b90506020020160208101906112219190615522565b8a358a8a868181106112355761123561550c565b905060200281019061124791906154c6565b8a8a888181106112595761125961550c565b905060200281019061126b9190615549565b6128ea565b61127a90836156e2565b91508061128681615592565b9150506111ee565b506033546001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169163c2c51c4091166112d3633b9aca0085615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610c71565b61132c6040805160808101825260008082526020820181905291810182905290606082015290565b6036600061136f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff1660028111156113dc576113dc614ec1565b60028111156113ed576113ed614ec1565b9052509392505050565b6033546001600160a01b031633146114215760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff161561144b5760405162461bcd60e51b81526004016106a49061545e565b603354611460906001600160a01b0316611ff8565b565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146114aa5760405162461bcd60e51b81526004016106a4906155ad565b6114b8633b9aca00826157be565b156115425760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b6000611552633b9aca00836157d2565b6034549091506001600160401b03908116908216111561160b5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906116299084906001600160401b03166157e6565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161168891815260200190565b60405180910390a261169a8383612dc8565b505050565b600054610100900460ff16158080156116bf5750600054600160ff909116105b806116d95750303b1580156116d9575060005460ff166001145b61173c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff19166001179055801561175f576000805461ff0019166101001790555b6001600160a01b0382166117d25760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611873576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118a15760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190615397565b1561194a5760405162461bcd60e51b81526004016106a4906153b9565b82518451146119d55760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b8451811015611a4357611a31838583815181106119f7576119f761550c565b6020026020010151878481518110611a1157611a1161550c565b60200260200101516001600160a01b0316612dd29092919063ffffffff16565b80611a3b81615592565b9150506119d8565b5050505050565b604051635ac86ab760e01b81526004808201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad59190615397565b15611af25760405162461bcd60e51b81526004016106a4906153b9565b8386148015611b0057508588145b8015611b0b57508782145b611b7f576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611c23907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1491906154ad565b8b35610b7160208e018e6154c6565b604080518082019091526000808252602082015260005b83811015611d23576000611cde8d358d8d85818110611c5b57611c5b61550c565b9050602002810190611c6d919061580e565b8c8c86818110611c7f57611c7f61550c565b9050602002810190611c9191906154c6565b8c8c88818110611ca357611ca361550c565b9050602002810190611cb59190615549565b8c8c8a818110611cc757611cc761550c565b9050602002810190611cd99190615549565b612e24565b80518451919250908490611cf3908390614c9f565b9052506020808201519084018051611d0c9083906156e2565b905250819050611d1b81615592565b915050611c3a565b50805115611d52576033548151611d52916001600160a01b031690611d4d90633b9aca009061582f565b61339c565b602081015115611e075760335460208201516001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169263c2c51c4092911690611da890633b9aca0090615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611dee57600080fd5b505af1158015611e02573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611e3f5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190615397565b15611ee85760405162461bcd60e51b81526004016106a4906153b9565b603754821115611f995760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611fab919061584e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261169a838361339c565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755612029814761339c565b50565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b031610156120d65760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b6120e2600c6020615865565b61210c7f000000000000000000000000000000000000000000000000000000006059f460846157e6565b610d0e9190615894565b6000612124600c6020615865565b61212f8360016158ba565b6121399190615865565b610d0e907f000000000000000000000000000000000000000000000000000000006059f4606158ba565b61216f6003602061582f565b81146121ff5760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61224482828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506003905061342a565b6122eb5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061233084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561239f5761239f614ec1565b60028111156123b0576123b0614ec1565b90525090506000816060015160028111156123cd576123cd614ec1565b146124765760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b61247e6128a5565b612487906158e5565b6124c386868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061346692505050565b1461254a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b600061258886868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b90506125988a87878b8b8e6134a0565b603980549060006125a883615592565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f00000000000000000000000000000000000000000000000000000007735940008116908216111561262e576001600160401b037f000000000000000000000000000000000000000000000000000000077359400016602083015261263e565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156126dc576126dc614ec1565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516127779392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b031661279c919061582f565b9b9a5050505050505050505050565b600081516030146128345760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b60405160029061284b908490600090602001615909565b60408051601f198184030181529082905261286591615938565b602060405180830381855afa158015612882573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d0e91906154ad565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061292984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b9050600061296985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156129d8576129d8614ec1565b60028111156129e9576129e9614ec1565b8152505090508a6001600160401b031681604001516001600160401b031610612aa05760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b600181606001516002811115612ab857612ab8614ec1565b14612b205760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b612b298b61202c565b6001600160401b0316612b6e8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b031611612c11576000836001600160401b031611612c115760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612c1f8987878b8b8f6134a0565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000077359400081169086161115612c8157507f0000000000000000000000000000000000000000000000000000000773594000612c84565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612d2c57612d2c614ec1565b0217905550905050816001600160401b0316816001600160401b031614612db8577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612da39392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612db5818361370f565b95505b5050505050979650505050505050565b611873828261372e565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261169a908490613847565b6040805180820190915260008082526020820152612e49612e44896159b9565b613919565b6033546001600160401b03600160a01b90910481169082161015612f0b5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60448201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520617460648201527f206f72206166746572206d6f7374526563656e745769746864726177616c546960848201526606d657374616d760cc1b60a482015260c4016106a4565b6000612f19612e448b6159b9565b90506000612f5988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612f8657612f86614ec1565b141561303d5760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff16156130fc5760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506131d98c87878e7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d49190615af5565b613929565b600061321787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061434a92505050565b90506132278d8a8a8e8e866134a0565b600061326588888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061436292505050565b90506132a38a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b03166132bd6132b88f6159b9565b61437a565b6001600160401b03161061337557603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261336a93869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561335157613351614ec1565b600281111561336257613362614ec1565b90525061438c565b95505050505061338f565b60335461336a90839086906001600160a01b0316846145ca565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3189091169063c0db354c9083906044016000604051808303818588803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b50505050505050565b6000836134388685856146a8565b1495945050505050565b6000816000815181106134575761345761550c565b60200260200101519050919050565b6000816001815181106134575761345761550c565b6000610d0e826002815181106134935761349361550c565b60200260200101516147f4565b6134ac60036002615bf6565b84146135375760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561354560286001614c9f565b61354f9190614c9f565b61355a90602061582f565b82146135da5760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166135f060286001614c9f565b600b901b179050600061363587878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b905061367b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925085915086905061342a565b6136ed5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b6000610d0e826007815181106134935761349361550c565b60006137276001600160401b03808416908516615c02565b9392505050565b8047101561377e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137cb576040519150601f19603f3d011682016040523d82523d6000602084013e6137d0565b606091505b505090508061169a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b600061389c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614b089092919063ffffffff16565b80519091501561169a57808060200190518101906138ba9190615397565b61169a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610d0e8261014001516147f4565b613934600280615bf6565b83146139a85760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b6139b4600d6002615bf6565b6139c460c0840160a08501615c41565b6001600160401b031610613a2e5760405162461bcd60e51b815260206004820152603f6024820152600080516020615c8983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b613a3a60046002615bf6565b613a4b610100840160e08501615c41565b6001600160401b031610613ab7576040805162461bcd60e51b8152602060048201526024810191909152600080516020615c8983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b613ac360186002615bf6565b613ad360e0840160c08501615c41565b6001600160401b031610613b4d5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613b65612e44856159b9565b6001600160401b031610613b7a576005613b7d565b60045b9050613b8a600482614c9f565b613b95906001614c9f565b613ba090602061582f565b613baa84806154c6565b905014613c1e5760405162461bcd60e51b81526020600482015260486024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613c2a60046003614c9f565b613c3590602061582f565b613c4260408501856154c6565b905014613cbc5760405162461bcd60e51b815260206004820152604e6024820152600080516020615c8983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613cc86003602061582f565b613cd560208501856154c6565b905014613d435760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613d4e81602061582f565b613d5b60608501856154c6565b905014613dce5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613ddc60186001614c9f565b613de7906005614c9f565b613df2906001614c9f565b613dfc9190614c9f565b613e0790602061582f565b613e1460808501856154c6565b905014613e9d5760405162461bcd60e51b81526020600482015260586024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613eaf60c0850160a08601615c41565b6001600160401b03166000613ec6600d6001614c9f565b613ed660e0880160c08901615c41565b6001600160401b0316901b600d613eef60186001614c9f565b613efa906001614c9f565b613f049190614c9f565b601b901b1717179050613f5f613f1d60808601866154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925050506101008701358461342a565b613fd25760405162461bcd60e51b815260206004820152604a6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b614029613fe260208601866154c6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a01359250905061342a565b6140895760405162461bcd60e51b815260206004820152603d6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b60496140e161409b60408701876154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008701356101608801358461342a565b6141535760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506141ab61416460608601866154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160860135610140870135600961342a565b6142165760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b6000614229610100860160e08701615c41565b6001600160401b031661423e60046001614c9f565b600e901b179050600061428388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b90506142d361429287806154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160880135838561342a565b61433f5760405162461bcd60e51b81526020600482015260436024820152600080516020615c8983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610d0e826001815181106134935761349361550c565b6000610d0e826003815181106134935761349361550c565b6000602061210c8361012001516147f4565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000007735940006001600160401b0316846001600160401b0316111561440357507f0000000000000000000000000000000000000000000000000000000773594000614406565b50825b604080518082019091526000808252602082015261442482866157e6565b6001600160401b039081168252603480548492600091614446918591166158ba565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061447882856020015161370f565b602082015260028460600151600281111561449557614495614ec1565b146144b757603980549060006144aa83615c5e565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561455c5761455c614ec1565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a26038805483919060009061465b9084906001600160401b03166158ba565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b600083516000141580156146c75750602084516146c591906157be565b155b6147565760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b855181116147ea5761477a6002856157be565b6147ad578151600052808601516020526020826040600060026107d05a03fa6147a257600080fd5b6002840493506147d8565b8086015160005281516020526020826040600060026107d05a03fa6147d157600080fd5b6002840493505b6147e3602082614c9f565b9050614767565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161486c91906157d2565b90506000816001600160401b03811115614888576148886150ce565b6040519080825280602002602001820160405280156148b1578160200160208202803683370190505b50905060005b828110156149b8576002856148cc838361582f565b815181106148dc576148dc61550c565b6020026020010151868360026148f2919061582f565b6148fd906001614c9f565b8151811061490d5761490d61550c565b602002602001015160405160200161492f929190918252602082015260400190565b60408051601f198184030181529082905261494991615938565b602060405180830381855afa158015614966573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061498991906154ad565b82828151811061499b5761499b61550c565b6020908102919091010152806149b081615592565b9150506148b7565b506149c46002836157d2565b91505b8115614ae45760005b82811015614ad1576002826149e5838361582f565b815181106149f5576149f561550c565b602002602001015183836002614a0b919061582f565b614a16906001614c9f565b81518110614a2657614a2661550c565b6020026020010151604051602001614a48929190918252602082015260400190565b60408051601f1981840301815290829052614a6291615938565b602060405180830381855afa158015614a7f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614aa291906154ad565b828281518110614ab457614ab461550c565b602090810291909101015280614ac981615592565b9150506149d0565b50614add6002836157d2565b91506149c7565b80600081518110614af757614af761550c565b602002602001015192505050919050565b6060614b178484600085614b1f565b949350505050565b606082471015614b805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614bd75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614bf39190615938565b60006040518083038185875af1925050503d8060008114614c30576040519150601f19603f3d011682016040523d82523d6000602084013e614c35565b606091505b5091509150614c45828286614c50565b979650505050505050565b60608315614c5f575081613727565b825115614c6f5782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615c75565b634e487b7160e01b600052601160045260246000fd5b60008219821115614cb257614cb2614c89565b500190565b6001600160401b038116811461202957600080fd5b8035614cd781614cb7565b919050565b60008060408385031215614cef57600080fd5b823591506020830135614d0181614cb7565b809150509250929050565b600060408284031215614d1e57600080fd5b50919050565b60008083601f840112614d3657600080fd5b5081356001600160401b03811115614d4d57600080fd5b6020830191508360208260051b8501011115614d6857600080fd5b9250929050565b60008060008060008060008060a0898b031215614d8b57600080fd5b8835614d9681614cb7565b975060208901356001600160401b0380821115614db257600080fd5b614dbe8c838d01614d0c565b985060408b0135915080821115614dd457600080fd5b614de08c838d01614d24565b909850965060608b0135915080821115614df957600080fd5b614e058c838d01614d24565b909650945060808b0135915080821115614e1e57600080fd5b50614e2b8b828c01614d24565b999c989b5096995094979396929594505050565b60008083601f840112614e5157600080fd5b5081356001600160401b03811115614e6857600080fd5b602083019150836020828501011115614d6857600080fd5b60008060208385031215614e9357600080fd5b82356001600160401b03811115614ea957600080fd5b614eb585828601614e3f565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614ef557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d0e8284614ed7565b600060208284031215614f1957600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614f616060840182614ed7565b5092915050565b600080600080600060608688031215614f8057600080fd5b85356001600160401b0380821115614f9757600080fd5b614fa389838a01614e3f565b90975095506020880135915080821115614fbc57600080fd5b50614fc988828901614e3f565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614ff757600080fd5b883561500281614cb7565b975060208901356001600160401b038082111561501e57600080fd5b61502a8c838d01614d24565b909950975060408b013591508082111561504357600080fd5b61504f8c838d01614d0c565b965060608b0135915080821115614df957600080fd5b6001600160a01b038116811461202957600080fd5b8035614cd781615065565b6000806040838503121561509857600080fd5b82356150a381615065565b946020939093013593505050565b6000602082840312156150c357600080fd5b813561372781615065565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715615107576151076150ce565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615135576151356150ce565b604052919050565b60006001600160401b03821115615156576151566150ce565b5060051b60200190565b600082601f83011261517157600080fd5b813560206151866151818361513d565b61510d565b82815260059290921b840181019181810190868411156151a557600080fd5b8286015b848110156151c057803583529183019183016151a9565b509695505050505050565b6000806000606084860312156151e057600080fd5b83356001600160401b03808211156151f757600080fd5b818601915086601f83011261520b57600080fd5b8135602061521b6151818361513d565b82815260059290921b8401810191818101908a84111561523a57600080fd5b948201945b8386101561526157853561525281615065565b8252948201949082019061523f565b9750508701359250508082111561527757600080fd5b5061528486828701615160565b9250506152936040850161507a565b90509250925092565b60008060008060008060008060008060c08b8d0312156152bb57600080fd5b6152c48b614ccc565b995060208b01356001600160401b03808211156152e057600080fd5b6152ec8e838f01614d0c565b9a5060408d013591508082111561530257600080fd5b61530e8e838f01614d24565b909a50985060608d013591508082111561532757600080fd5b6153338e838f01614d24565b909850965060808d013591508082111561534c57600080fd5b6153588e838f01614d24565b909650945060a08d013591508082111561537157600080fd5b5061537e8d828e01614d24565b915080935050809150509295989b9194979a5092959850565b6000602082840312156153a957600080fd5b8151801515811461372757600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6000602082840312156154bf57600080fd5b5051919050565b6000808335601e198436030181126154dd57600080fd5b8301803591506001600160401b038211156154f757600080fd5b602001915036819003821315614d6857600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561553457600080fd5b813564ffffffffff8116811461372757600080fd5b6000808335601e1984360301811261556057600080fd5b8301803591506001600160401b0382111561557a57600080fd5b6020019150600581901b3603821315614d6857600080fd5b60006000198214156155a6576155a6614c89565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561564257818101518382015260200161562a565b838111156122eb5750506000910152565b6000815180845261566b816020860160208601615627565b601f01601f19169290920160200192915050565b60808152600061569360808301888a6155fe565b82810360208401526156a58188615653565b905082810360408401526156ba8186886155fe565b915050826060830152979650505050505050565b602081526000614b176020830184866155fe565b600080821280156001600160ff1b038490038513161561570457615704614c89565b600160ff1b839003841281161561571d5761571d614c89565b50500190565b60006001600160ff1b038184138284138082168684048611161561574957615749614c89565b600160ff1b600087128281168783058912161561576857615768614c89565b6000871292508782058712848416161561578457615784614c89565b8785058712818416161561579a5761579a614c89565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826157cd576157cd6157a8565b500690565b6000826157e1576157e16157a8565b500490565b60006001600160401b038381169083168181101561580657615806614c89565b039392505050565b6000823561017e1983360301811261582557600080fd5b9190910192915050565b600081600019048311821515161561584957615849614c89565b500290565b60008282101561586057615860614c89565b500390565b60006001600160401b038083168185168183048111821515161561588b5761588b614c89565b02949350505050565b60006001600160401b03808416806158ae576158ae6157a8565b92169190910492915050565b60006001600160401b038083168185168083038211156158dc576158dc614c89565b01949350505050565b80516020808301519190811015614d1e5760001960209190910360031b1b16919050565b6000835161591b818460208801615627565b6001600160801b0319939093169190920190815260100192915050565b60008251615825818460208701615627565b600082601f83011261595b57600080fd5b81356001600160401b03811115615974576159746150ce565b615987601f8201601f191660200161510d565b81815284602083860101111561599c57600080fd5b816020850160208301376000918101602001919091529392505050565b600061018082360312156159cc57600080fd5b6159d46150e4565b82356001600160401b03808211156159eb57600080fd5b6159f73683870161594a565b83526020850135915080821115615a0d57600080fd5b615a193683870161594a565b60208401526040850135915080821115615a3257600080fd5b615a3e3683870161594a565b60408401526060850135915080821115615a5757600080fd5b615a633683870161594a565b60608401526080850135915080821115615a7c57600080fd5b50615a893682860161594a565b608083015250615a9b60a08401614ccc565b60a0820152615aac60c08401614ccc565b60c0820152615abd60e08401614ccc565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600060208284031215615b0757600080fd5b815161372781614cb7565b600181815b80851115615b4d578160001904821115615b3357615b33614c89565b80851615615b4057918102915b93841c9390800290615b17565b509250929050565b600082615b6457506001610d0e565b81615b7157506000610d0e565b8160018114615b875760028114615b9157615bad565b6001915050610d0e565b60ff841115615ba257615ba2614c89565b50506001821b610d0e565b5060208310610133831016604e8410600b8410161715615bd0575081810a610d0e565b615bda8383615b12565b8060001904821115615bee57615bee614c89565b029392505050565b60006137278383615b55565b60008083128015600160ff1b850184121615615c2057615c20614c89565b6001600160ff1b0384018313811615615c3b57615c3b614c89565b50500390565b600060208284031215615c5357600080fd5b813561372781614cb7565b600081615c6d57615c6d614c89565b506000190190565b602081526000613727602083018461565356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212207b802debd88fb1da4ddbc8905d28e36a41d34702e4e56687893b2f6ebf09657264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x68b1d87f95878fe05b998f19b66f4baba5de1aed":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220380280a60a6f9ee66649ea48441e32dc6c7a726b1bf36930736c05eabb03978964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610ec7565b610268565b6040516100d89190610f43565b60405180910390f35b6100f46100ef366004610fb7565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fea565b610410565b005b6100f4610138366004611005565b610534565b6101647f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fea565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610fb7565b610601565b6040516100d89190611048565b61018f6101e1366004610fb7565b61076b565b6101286101f4366004610ec7565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611080565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fea565b6108f0565b6060336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146102bb5760405162461bcd60e51b81526004016102b2906110aa565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d661111d565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf57600085858381811061032157610321611133565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b290611149565b60006103658361090f565b905061037c89846103776001856111b4565b610a08565b8085858151811061038f5761038f611133565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b7906111d9565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104585760405162461bcd60e51b81526004016102b2906110aa565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061058157610581611133565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff8111156106325761063261111d565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610c61565b82828151811061068c5761068c611133565b6020026020010181815250506000801b8282815181106106ae576106ae611133565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a816111d9565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a9611133565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461082a5760405162461bcd60e51b81526004016102b2906110aa565b60005b818110156108ea57600083838381811061084957610849611133565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b290611149565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610d38565b905060006108be8583610d72565b90508089146108d2576108d2818685610a08565b505050505080806108e2906111d9565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff1660016111f4565b9050610948848383610d9c565b60ff84166000908152600260205260408120906109666001846111b4565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f6001846111b4565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610e3c565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac360018361121c565b81548110610ad357610ad3611133565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a60018361121c565b81548110610b1a57610b1a611133565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bd45760ff85166000908152600360205260408120610b6460018461121c565b81548110610b7457610b74611133565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610bc15760200151925061040a915050565b5080610bcc81611233565b915050610b41565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d2c5760ff8616600090815260026020908152604080832063ffffffff891684529091528120610cbb60018461121c565b81548110610ccb57610ccb611133565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d19576020015192506103c3915050565b5080610d2481611233565b915050610c87565b50600095945050505050565b600080610d4483610aea565b8054909150600090610d6590600190600160201b900463ffffffff166111b4565b90506103c3848383610d9c565b600080610d7f8484610a92565b6001810154909150610d948585846000610e3c565b949350505050565b81544363ffffffff90811691161415610dd357815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610e5b57600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610edc57600080fd5b83359250602084013567ffffffffffffffff80821115610efb57600080fd5b818601915086601f830112610f0f57600080fd5b813581811115610f1e57600080fd5b876020828501011115610f3057600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835163ffffffff1683529284019291840191600101610f5f565b50909695505050505050565b803560ff81168114610f9e57600080fd5b919050565b803563ffffffff81168114610f9e57600080fd5b60008060408385031215610fca57600080fd5b610fd383610f8d565b9150610fe160208401610fa3565b90509250929050565b600060208284031215610ffc57600080fd5b6103c382610f8d565b60008060006060848603121561101a57600080fd5b61102384610f8d565b925061103160208501610fa3565b915061103f60408501610fa3565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835183529284019291840191600101611064565b6000806040838503121561109357600080fd5b61109c83610f8d565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff838116908316818110156111d1576111d161119e565b039392505050565b60006000198214156111ed576111ed61119e565b5060010190565b600063ffffffff8083168185168083038211156112135761121361119e565b01949350505050565b60008282101561122e5761122e61119e565b500390565b6000816112425761124261119e565b50600019019056fea26469706673582212207f70dacd13e12bd4d8ca024088f99b1851332333bcefaec855541f3cb20e8b6764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x7969c5ed335650692bc04293b07f5bf2e7a673c0":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e838360405180606001604052806027815260200161025e602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b60606001600160a01b0384163b6101305760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161014b919061020e565b600060405180830381855af49150503d8060008114610186576040519150601f19603f3d011682016040523d82523d6000602084013e61018b565b606091505b509150915061019b8282866101a5565b9695505050505050565b606083156101b457508161004e565b8251156101c45782518084602001fd5b8160405162461bcd60e51b8152600401610127919061022a565b60005b838110156101f95781810151838201526020016101e1565b83811115610208576000848401525b50505050565b600082516102208184602087016101de565b9190910192915050565b60208152600082518060208401526102498160408501602087016101de565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220168c9171386e78d19614294924c2aaf713ec506abcf73d5cabd15564835e5e0964736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0x14dc79964da2c08b23698b3d3cc7ca32193d9955","0xfb":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8","0xfc":"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220ee4f89775fd0df7e89f51555e886f738dfe996deea6e76052fa01c5ef77f152864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x809d550fca64d94bd9f66e60752a544199cfac3d":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101f25760003560e01c8063800fb61f1161010d578063b98d0908116100a0578063f2fde38b1161006f578063f2fde38b14610672578063f9120af614610692578063fa534dc0146106b2578063fc299dee146106d2578063fce36c7d146106f257600080fd5b8063b98d0908146105ef578063c0c53b8b14610609578063df5cf72314610629578063e481af9d1461065d57600080fd5b8063a364f4da116100dc578063a364f4da14610533578063a98fb35514610553578063ab21739a14610573578063b099627e1461059357600080fd5b8063800fb61f146104b55780638da5cb5b146104d557806395c6d604146104f35780639926ee7d1461051357600080fd5b80634ae07c37116101855780636b3aa72e116101545780636b3aa72e146103f55780636d14a9871461042857806370a082311461045c578063715018a6146104a057600080fd5b80634ae07c371461034c5780635c0089941461037a5780635df459461461038d57806368304835146103c157600080fd5b80633bc28c8c116101c15780633bc28c8c146102c1578063416c7e5e146102e15780634223d551146103015780634a5bf6321461031457600080fd5b806306045a9114610208578063171f1d5b1461023d5780632e1a7d4d1461027457806333cfb7b71461029457600080fd5b36610203576102013334610712565b005b600080fd5b34801561021457600080fd5b50610228610223366004614164565b6107a4565b60405190151581526020015b60405180910390f35b34801561024957600080fd5b5061025d6102583660046142b6565b610899565b604080519215158352901515602083015201610234565b34801561028057600080fd5b5061020161028f366004614307565b610a23565b3480156102a057600080fd5b506102b46102af366004614320565b610afb565b604051610234919061433d565b3480156102cd57600080fd5b506102016102dc366004614320565b610fce565b3480156102ed57600080fd5b506102016102fc366004614398565b610fe2565b61020161030f366004614320565b611119565b34801561032057600080fd5b5060cb54610334906001600160a01b031681565b6040516001600160a01b039091168152602001610234565b34801561035857600080fd5b5061036c61036736600461466b565b611123565b604051610234929190614705565b610201610388366004614796565b612076565b34801561039957600080fd5b506103347f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b3480156103cd57600080fd5b506103347f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b34801561040157600080fd5b507f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707610334565b34801561043457600080fd5b506103347f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b34801561046857600080fd5b50610492610477366004614320565b6001600160a01b0316600090815260ca602052604090205490565b604051908152602001610234565b3480156104ac57600080fd5b506102016121fa565b3480156104c157600080fd5b506102016104d0366004614320565b61220e565b3480156104e157600080fd5b506033546001600160a01b0316610334565b3480156104ff57600080fd5b5061022861050e3660046147e1565b6122ae565b34801561051f57600080fd5b5061020161052e36600461482c565b6122d3565b34801561053f57600080fd5b5061020161054e366004614320565b61239f565b34801561055f57600080fd5b5061020161056e3660046148d7565b612466565b34801561057f57600080fd5b5061020161058e366004614927565b6124ba565b34801561059f57600080fd5b506105d36105ae366004614307565b60c96020526000908152604090205463ffffffff811690640100000000900460ff1682565b6040805163ffffffff9093168352901515602083015201610234565b3480156105fb57600080fd5b506097546102289060ff1681565b34801561061557600080fd5b5061020161062436600461494e565b61288e565b34801561063557600080fd5b506103347f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561066957600080fd5b506102b4612978565b34801561067e57600080fd5b5061020161068d366004614320565b612d41565b34801561069e57600080fd5b506102016106ad366004614320565b612db7565b3480156106be57600080fd5b506102286106cd366004614999565b612de1565b3480156106de57600080fd5b50606554610334906001600160a01b031681565b3480156106fe57600080fd5b5061020161070d366004614a16565b612e56565b8061073857604051632097692160e11b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260ca602052604081208054839290610760908490614aa0565b90915550506001600160a01b038216600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a25050565b6000806001600160a01b0383166107bc5750846107e8565b85836040516020016107cf929190614ab8565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff1661080b57600091505061088d565b600081815260c96020526040902054640100000000900460ff1661083357600091505061088d565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f19818403018152919052805160208201209091506108878789838961320e565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106108e1576108e1614ad3565b60200201518951600160200201518a6020015160006002811061090657610906614ad3565b60200201518b6020015160016002811061092257610922614ad3565b602090810291909101518c518d83015160405161097f9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109a29190614ae9565b9050610a156109bb6109b48884613226565b86906132bd565b6109c3613351565b610a0b6109fc856109f6604080518082018252600080825260209182015281518083019092526001825260029082015290565b90613226565b610a058c613411565b906132bd565b886201d4c06134a1565b909890975095505050505050565b33600090815260ca6020526040902054811115610a745733600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201839052604482015260640161072f565b33600090815260ca602052604081208054839290610a93908490614b0b565b909155505033600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610af7573d6000803e3d6000fd5b5050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16906313542a4e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b9190614b22565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c169063871ef04990602401602060405180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614b3b565b90506001600160c01b0381161580610cb457507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190614b64565b60ff16155b15610cd45760408051600080825260208201909252905b50949350505050565b6000610ce8826001600160c01b03166136c5565b90506000805b8251811015610dbe577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b0316633ca5a5f5848381518110610d3857610d38614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da09190614b22565b610daa9083614aa0565b915080610db681614b87565b915050610cee565b506000816001600160401b03811115610dd957610dd9614040565b604051908082528060200260200182016040528015610e02578160200160208202803683370190505b5090506000805b8451811015610fc1576000858281518110610e2657610e26614ad3565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137781690633ca5a5f590602401602060405180830381865afa158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf9190614b22565b905060005b81811015610fab576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d9190614bb7565b60000151868681518110610f7357610f73614ad3565b6001600160a01b039092166020928302919091019091015284610f9581614b87565b9550508080610fa390614b87565b915050610ec4565b5050508080610fb990614b87565b915050610e09565b5090979650505050505050565b610fd6613787565b610fdf816137e1565b50565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110649190614bf8565b6001600160a01b0316336001600160a01b0316146111105760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161072f565b610fdf8161384a565b610fdf8134610712565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561117f57508260a0015151604051806040016040528060018152602001600081525051145b80156111a657508260c0015151604051806040016040528060018152602001600081525051145b80156111cd57508260e0015151604051806040016040528060018152602001600081525051145b6112375760405162461bcd60e51b8152602060048201526041602482015260008051602061515e83398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161072f565b825151602084015151146112af5760405162461bcd60e51b81526020600482015260446024820181905260008051602061515e833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161072f565b4363ffffffff168463ffffffff161061131e5760405162461bcd60e51b815260206004820152603c602482015260008051602061515e83398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161072f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156113df576113df614040565b604051908082528060200260200182016040528015611408578160200160208202803683370190505b5081526020860151516001600160401b0381111561142857611428614040565b604051908082528060200260200182016040528015611451578160200160208202803683370190505b50816020018190525060006114fd60405180604001604052806001815260200160008152507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190614b64565b613891565b905060005b876020015151811015611798576115478860200151828151811061152857611528614ad3565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061155d5761155d614ad3565b6020908102919091010152801561161d57602083015161157e600183614b0b565b8151811061158e5761158e614ad3565b602002602001015160001c836020015182815181106115af576115af614ad3565b602002602001015160001c1161161d576040805162461bcd60e51b815260206004820152602481019190915260008051602061515e83398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161072f565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03166304ec63518460200151838151811061166257611662614ad3565b60200260200101518b8b60000151858151811061168157611681614ad3565b60200260200101516040518463ffffffff1660e01b81526004016116be9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff9190614b3b565b6001600160c01b03168360000151828151811061171e5761171e614ad3565b6020026020010181815250506117846109b4611758848660000151858151811061174a5761174a614ad3565b602002602001015116613924565b8a60200151848151811061176e5761176e614ad3565b602002602001015161394f90919063ffffffff16565b94508061179081614b87565b915050611502565b50506117a383613a33565b60975490935060ff166000816117ba57600061183c565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c9190614b22565b905060005b604051806040016040528060018152602001600081525051811015611f475782156119cd578963ffffffff16827f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663249a0c42604051806040016040528060018152602001600081525085815181106118c5576118c5614ad3565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190614b22565b6119379190614aa0565b116119cd5760405162461bcd60e51b8152602060048201526066602482015260008051602061515e83398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161072f565b7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611a2457611a24614ad3565b602001015160f81c60f81b60f81c8c8c60a001518581518110611a4957611a49614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190614c15565b6001600160401b031916611aec8a60400151838151811061152857611528614ad3565b67ffffffffffffffff191614611b885760405162461bcd60e51b8152602060048201526061602482015260008051602061515e83398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161072f565b611bb889604001518281518110611ba157611ba1614ad3565b6020026020010151876132bd90919063ffffffff16565b95507f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611c1157611c11614ad3565b602001015160f81c60f81b60f81c8c8c60c001518581518110611c3657611c36614ad3565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190614c40565b85602001518281518110611ccc57611ccc614ad3565b6001600160601b03909216602092830291909101820152850151805182908110611cf857611cf8614ad3565b602002602001015185600001518281518110611d1657611d16614ad3565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611f3257611da586600001518281518110611d6057611d60614ad3565b602002602001015160405180604001604052806001815260200160008152508581518110611d9057611d90614ad3565b016020015160f81c60ff161c60019081161490565b15611f20577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663f2be94ae60405180604001604052806001815260200160008152508581518110611e0157611e01614ad3565b602001015160f81c60f81b60f81c8e89602001518581518110611e2657611e26614ad3565b60200260200101518f60e001518881518110611e4457611e44614ad3565b60200260200101518781518110611e5d57611e5d614ad3565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee59190614c40565b8751805185908110611ef957611ef9614ad3565b60200260200101818151611f0d9190614c5d565b6001600160601b03169052506001909101905b80611f2a81614b87565b915050611d3a565b50508080611f3f90614b87565b915050611841565b505050600080611f618a868a606001518b60800151610899565b9150915081611fd25760405162461bcd60e51b8152602060048201526043602482015260008051602061515e83398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161072f565b806120335760405162461bcd60e51b8152602060048201526039602482015260008051602061515e83398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161072f565b5050600087826020015160405160200161204e929190614c85565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b6000833360405160200161208b929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16156120da57604051630c40bc4360e21b81526004810182905260240161072f565b34156121375733600090815260ca6020526040812080543492906120ff908490614aa0565b909155505033600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a25b33600090815260ca602052604090205461216657604051632059498b60e11b815233600482015260240161072f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c99093529285902084518154925115156401000000000264ffffffffff19909316941693909317179091559151909186917f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437916121eb9133919089908990614ccd565b60405180910390a25050505050565b612202613787565b61220c6000613ace565b565b600054600290610100900460ff16158015612230575060005460ff8083169116105b61224c5760405162461bcd60e51b815260040161072f90614d1a565b6000805461ffff191660ff83161761010017905561226982612db7565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008184846040516122c1929190614d68565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461231b5760405162461bcd60e51b815260040161072f90614d78565b604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071690639926ee7d906123699085908590600401614e3d565b600060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146123e75760405162461bcd60e51b815260040161072f90614d78565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a364f4da906024015b600060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b5050505050565b61246e613787565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a98fb35590612431908490600401614e88565b60cb546001600160a01b031633146124fa5760cb54604051632cbe419560e01b81523360048201526001600160a01b03909116602482015260440161072f565b60005a905060008484604051602001612514929190614ab8565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff16612562576040516311cb69a760e11b81526004810182905260240161072f565b600081815260c96020526040902054640100000000900460ff161561259d57604051634e78d7f960e11b81526004810182905260240161072f565b6001600160a01b038416600090815260ca60205260409020546125de5760405163245bc73560e11b81526001600160a01b038516600482015260240161072f565b600081815260c960205260408120805464ff000000001981166401000000001790915561261390839063ffffffff1686611123565b509050604360ff16816020015160008151811061263257612632614ad3565b60200260200101516126449190614e9b565b6001600160601b03166064826000015160008151811061266657612666614ad3565b60200260200101516001600160601b03166126819190614eca565b101561271457606481600001516000815181106126a0576126a0614ad3565b60200260200101516001600160601b03166126bb9190614eca565b604360ff1682602001516000815181106126d7576126d7614ad3565b60200260200101516126e99190614e9b565b60405163530f5c4560e11b815260048101929092526001600160601b0316602482015260440161072f565b6040516001600160a01b038616815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a6127648387614b0b565b6127719062011170614aa0565b61277b9190614eca565b6001600160a01b038816600090815260ca60205260409020549091508111156127e1576001600160a01b038716600081815260ca602052604090819020549051632e2a182f60e11b8152600481019290925260248201839052604482015260640161072f565b6001600160a01b038716600090815260ca602052604081208054839290612809908490614b0b565b90915550506001600160a01b038716600081815260ca602090815260409182902054915191825260008051602061513e833981519152910160405180910390a260cb546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612883573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16158080156128ae5750600054600160ff909116105b806128c85750303b1580156128c8575060005460ff166001145b6128e45760405162461bcd60e51b815260040161072f90614d1a565b6000805460ff191660011790558015612907576000805461ff0019166101001790555b6129118484613b20565b60cb80546001600160a01b0319166001600160a01b0384161790558015612972576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b606060007f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190614b64565b60ff16905080612a1c57505060408051600081526020810190915290565b6000805b82811015612ad157604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab39190614b22565b612abd9083614aa0565b915080612ac981614b87565b915050612a20565b506000816001600160401b03811115612aec57612aec614040565b604051908082528060200260200182016040528015612b15578160200160208202803683370190505b5090506000805b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e9190614b64565b60ff16811015612d3757604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c369190614b22565b905060005b81811015612d22576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa158015612cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd49190614bb7565b60000151858581518110612cea57612cea614ad3565b6001600160a01b039092166020928302919091019091015283612d0c81614b87565b9450508080612d1a90614b87565b915050612c3b565b50508080612d2f90614b87565b915050612b1c565b5090949350505050565b612d49613787565b6001600160a01b038116612dae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072f565b610fdf81613ace565b612dbf613787565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516306045a9160e01b815260009030906306045a9190612e15908b908b908b908b908b908b908b908b90600401614ee9565b602060405180830381865afa158015612e32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190614f4b565b6065546001600160a01b03163314612eeb5760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161072f565b60005b818110156131bf57828282818110612f0857612f08614ad3565b9050602002810190612f1a9190614f68565b612f2b906040810190602001614320565b6001600160a01b03166323b872dd3330868686818110612f4d57612f4d614ad3565b9050602002810190612f5f9190614f68565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fda9190614f4b565b506000838383818110612fef57612fef614ad3565b90506020028101906130019190614f68565b613012906040810190602001614320565b604051636eb1769f60e11b81523060048201526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81166024830152919091169063dd62ed3e90604401602060405180830381865afa158015613080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a49190614b22565b90508383838181106130b8576130b8614ad3565b90506020028101906130ca9190614f68565b6130db906040810190602001614320565b6001600160a01b031663095ea7b37f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f8387878781811061311d5761311d614ad3565b905060200281019061312f9190614f68565b6040013561313d9190614aa0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ac9190614f4b565b5050806131b890614b87565b9050612eee565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063fce36c7d906123699085908590600401614fee565b60008361321c868585613b9d565b1495945050505050565b6040805180820190915260008082526020820152613242613f4e565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561327557613277565bfe5b50806132b55760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161072f565b505092915050565b60408051808201909152600080825260208201526132d9613f6c565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132755750806132b55760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161072f565b613359613f8a565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061344160008051602061511e83398151915286614ae9565b90505b61344d81613c97565b909350915060008051602061511e833981519152828309831415613487576040805180820190915290815260208101919091529392505050565b60008051602061511e833981519152600182089050613444565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906134d3613faf565b60005b60028110156136985760006134ec826006614eca565b905084826002811061350057613500614ad3565b60200201515183613512836000614aa0565b600c811061352257613522614ad3565b602002015284826002811061353957613539614ad3565b602002015160200151838260016135509190614aa0565b600c811061356057613560614ad3565b602002015283826002811061357757613577614ad3565b602002015151518361358a836002614aa0565b600c811061359a5761359a614ad3565b60200201528382600281106135b1576135b1614ad3565b60200201515160016020020151836135ca836003614aa0565b600c81106135da576135da614ad3565b60200201528382600281106135f1576135f1614ad3565b60200201516020015160006002811061360c5761360c614ad3565b60200201518361361d836004614aa0565b600c811061362d5761362d614ad3565b602002015283826002811061364457613644614ad3565b60200201516020015160016002811061365f5761365f614ad3565b602002015183613670836005614aa0565b600c811061368057613680614ad3565b6020020152508061369081614b87565b9150506134d6565b506136a1613fce565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000806136d384613924565b61ffff166001600160401b038111156136ee576136ee614040565b6040519080825280601f01601f191660200182016040528015613718576020820181803683370190505b5090506000805b825182108015613730575061010081105b15612d37576001811b935085841615613777578060f81b83838151811061375957613759614ad3565b60200101906001600160f81b031916908160001a9053508160010191505b61378081614b87565b905061371f565b6033546001600160a01b0316331461220c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161072f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60008061389d84613d19565b9050808360ff166001901b1161391b5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161072f565b90505b92915050565b6000805b821561391e57613939600184614b0b565b9092169180613947816150fb565b915050613928565b60408051808201909152600080825260208201526102008261ffff16106139ab5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161072f565b8161ffff16600114156139bf57508161391e565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613a2857600161ffff871660ff83161c81161415613a0b57613a0884846132bd565b93505b613a1583846132bd565b92506201fffe600192831b1691016139db565b509195945050505050565b60408051808201909152600080825260208201528151158015613a5857506020820151155b15613a76575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061511e8339815191528460200151613aa99190614ae9565b613ac19060008051602061511e833981519152614b0b565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613b8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161072f565b613b9482613ace565b610af7816137e1565b600060208451613bad9190614ae9565b15613c345760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161072f565b8260205b85518111610ccb57613c4b600285614ae9565b613c6c57816000528086015160205260406000209150600284049350613c85565b8086015160005281602052604060002091506002840493505b613c90602082614aa0565b9050613c38565b6000808060008051602061511e833981519152600360008051602061511e8339815191528660008051602061511e833981519152888909090890506000613d0d827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061511e833981519152613ea6565b91959194509092505050565b600061010082511115613da25760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161072f565b8151613db057506000919050565b60008083600081518110613dc657613dc6614ad3565b0160200151600160f89190911c81901b92505b8451811015613e9d57848181518110613df457613df4614ad3565b0160200151600160f89190911c1b9150828211613e895760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161072f565b91811791613e9681614b87565b9050613dd9565b50909392505050565b600080613eb1613fce565b613eb9613fec565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613275575082613f435760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161072f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613f9d61400a565b8152602001613faa61400a565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160601b031981168114613ac957600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561407857614078614040565b60405290565b60405161010081016001600160401b038111828210171561407857614078614040565b604051601f8201601f191681016001600160401b03811182821017156140c9576140c9614040565b604052919050565b60006001600160401b038311156140ea576140ea614040565b6140fd601f8401601f19166020016140a1565b905082815283838301111561411157600080fd5b828260208301376000602084830101529392505050565b600082601f83011261413957600080fd5b614148838335602085016140d1565b9392505050565b6001600160a01b0381168114610fdf57600080fd5b600080600080600080600080610100898b03121561418157600080fd5b88359750602089013596506040890135955061419f60608a01614028565b94506080890135935060a08901356001600160401b038111156141c157600080fd5b6141cd8b828c01614128565b93505060c0890135915060e08901356141e58161414f565b809150509295985092959890939650565b60006040828403121561420857600080fd5b614210614056565b9050813581526020820135602082015292915050565b600082601f83011261423757600080fd5b61423f614056565b80604084018581111561425157600080fd5b845b8181101561426b578035845260209384019301614253565b509095945050505050565b60006080828403121561428857600080fd5b614290614056565b905061429c8383614226565b81526142ab8360408401614226565b602082015292915050565b60008060008061012085870312156142cd57600080fd5b843593506142de86602087016141f6565b92506142ed8660608701614276565b91506142fc8660e087016141f6565b905092959194509250565b60006020828403121561431957600080fd5b5035919050565b60006020828403121561433257600080fd5b813561391b8161414f565b6020808252825182820181905260009190848201906040850190845b8181101561437e5783516001600160a01b031683529284019291840191600101614359565b50909695505050505050565b8015158114610fdf57600080fd5b6000602082840312156143aa57600080fd5b813561391b8161438a565b803563ffffffff81168114613ac957600080fd5b60006001600160401b038211156143e2576143e2614040565b5060051b60200190565b600082601f8301126143fd57600080fd5b8135602061441261440d836143c9565b6140a1565b82815260059290921b8401810191818101908684111561443157600080fd5b8286015b8481101561445357614446816143b5565b8352918301918301614435565b509695505050505050565b600082601f83011261446f57600080fd5b8135602061447f61440d836143c9565b82815260069290921b8401810191818101908684111561449e57600080fd5b8286015b84811015614453576144b488826141f6565b8352918301916040016144a2565b600082601f8301126144d357600080fd5b813560206144e361440d836143c9565b82815260059290921b8401810191818101908684111561450257600080fd5b8286015b848110156144535780356001600160401b038111156145255760008081fd5b6145338986838b01016143ec565b845250918301918301614506565b6000610180828403121561455457600080fd5b61455c61407e565b905081356001600160401b038082111561457557600080fd5b614581858386016143ec565b8352602084013591508082111561459757600080fd5b6145a38583860161445e565b602084015260408401359150808211156145bc57600080fd5b6145c88583860161445e565b60408401526145da8560608601614276565b60608401526145ec8560e086016141f6565b608084015261012084013591508082111561460657600080fd5b614612858386016143ec565b60a084015261014084013591508082111561462c57600080fd5b614638858386016143ec565b60c084015261016084013591508082111561465257600080fd5b5061465f848285016144c2565b60e08301525092915050565b60008060006060848603121561468057600080fd5b83359250614690602085016143b5565b915060408401356001600160401b038111156146ab57600080fd5b6146b786828701614541565b9150509250925092565b600081518084526020808501945080840160005b838110156146fa5781516001600160601b0316875295820195908201906001016146d5565b509495945050505050565b604081526000835160408084015261472060808401826146c1565b90506020850151603f1984830301606085015261473d82826146c1565b925050508260208301529392505050565b60008083601f84011261476057600080fd5b5081356001600160401b0381111561477757600080fd5b60208301915083602082850101111561478f57600080fd5b9250929050565b6000806000604084860312156147ab57600080fd5b8335925060208401356001600160401b038111156147c857600080fd5b6147d48682870161474e565b9497909650939450505050565b6000806000604084860312156147f657600080fd5b83356001600160401b0381111561480c57600080fd5b6148188682870161474e565b909790965060209590950135949350505050565b6000806040838503121561483f57600080fd5b823561484a8161414f565b915060208301356001600160401b038082111561486657600080fd5b908401906060828703121561487a57600080fd5b60405160608101818110838211171561489557614895614040565b6040528235828111156148a757600080fd5b6148b388828601614128565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156148e957600080fd5b81356001600160401b038111156148ff57600080fd5b8201601f8101841361491057600080fd5b61491f848235602084016140d1565b949350505050565b60008060006060848603121561493c57600080fd5b8335925060208401356146908161414f565b60008060006060848603121561496357600080fd5b833561496e8161414f565b9250602084013561497e8161414f565b9150604084013561498e8161414f565b809150509250925092565b600080600080600080600060e0888a0312156149b457600080fd5b8735965060208801359550604088013594506149d260608901614028565b93506080880135925060a08801356001600160401b038111156149f457600080fd5b614a008a828b01614128565b92505060c0880135905092959891949750929550565b60008060208385031215614a2957600080fd5b82356001600160401b0380821115614a4057600080fd5b818501915085601f830112614a5457600080fd5b813581811115614a6357600080fd5b8660208260051b8501011115614a7857600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115614ab357614ab3614a8a565b500190565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614b0657634e487b7160e01b600052601260045260246000fd5b500690565b600082821015614b1d57614b1d614a8a565b500390565b600060208284031215614b3457600080fd5b5051919050565b600060208284031215614b4d57600080fd5b81516001600160c01b038116811461391b57600080fd5b600060208284031215614b7657600080fd5b815160ff8116811461391b57600080fd5b6000600019821415614b9b57614b9b614a8a565b5060010190565b6001600160601b0381168114610fdf57600080fd5b600060408284031215614bc957600080fd5b614bd1614056565b8251614bdc8161414f565b81526020830151614bec81614ba2565b60208201529392505050565b600060208284031215614c0a57600080fd5b815161391b8161414f565b600060208284031215614c2757600080fd5b815167ffffffffffffffff198116811461391b57600080fd5b600060208284031215614c5257600080fd5b815161391b81614ba2565b60006001600160601b0383811690831681811015614c7d57614c7d614a8a565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614cc057815185529382019390820190600101614ca4565b5092979650505050505050565b6001600160a01b038516815263ffffffff841660208201526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614e1657602081850181015186830182015201614dfa565b81811115614e28576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614e6760a0840182614df0565b90506020840151606084015260408401516080840152809150509392505050565b6020815260006141486020830184614df0565b60006001600160601b0380831681851681830481118215151615614ec157614ec1614a8a565b02949350505050565b6000816000190483118215151615614ee457614ee4614a8a565b500290565b60006101008a83528960208401528860408401526001600160601b0319881660608401528660808401528060a0840152614f2581840187614df0565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b600060208284031215614f5d57600080fd5b815161391b8161438a565b60008235609e19833603018112614f7e57600080fd5b9190910192915050565b8035613ac98161414f565b8183526000602080850194508260005b858110156146fa578135614fb68161414f565b6001600160a01b0316875281830135614fce81614ba2565b6001600160601b0316878401526040968701969190910190600101614fa3565b60208082528181018390526000906040808401600586901b8501820187855b888110156150ed57878303603f190184528135368b9003609e1901811261503357600080fd5b8a0160a0813536839003601e1901811261504c57600080fd5b820180356001600160401b0381111561506457600080fd5b8060061b360384131561507657600080fd5b828752615088838801828c8501614f93565b92505050615097888301614f88565b6001600160a01b031688860152818701358786015260606150b98184016143b5565b63ffffffff169086015260806150d08382016143b5565b63ffffffff1695019490945250928501929085019060010161500d565b509098975050505050505050565b600061ffff8083168181141561511357615113614a8a565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212208e01715b0708770e452336b0e323c81f585a18b9cbc054b73762e976599f81f964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x82e01223d51eb87e16a03e24687edf0f294da6f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063bd90df701461003b578063fa534dc01461006b575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100793660046101b7565b61008e565b6040519015158152602001610062565b60008054604051829182916001600160a01b03909116906100bf908c908c908c908c908c908c908c906024016102ed565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516100f4919061035c565b600060405180830381855afa9150503d806000811461012f576040519150601f19603f3d011682016040523d82523d6000602084013e610134565b606091505b50915091508161017f5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b604482015260640160405180910390fd5b808060200190518101906101939190610378565b9a9950505050505050505050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a0312156101d257600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461020457600080fd5b93506080880135925060a088013567ffffffffffffffff8082111561022857600080fd5b818a0191508a601f83011261023c57600080fd5b81358181111561024e5761024e6101a1565b604051601f8201601f19908116603f01168101908382118183101715610276576102766101a1565b816040528281528d602084870101111561028f57600080fd5b82602086016020830137600060208483010152809650505050505060c0880135905092959891949750929550565b60005b838110156102d85781810151838201526020016102c0565b838111156102e7576000848401525b50505050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a0820152600083518060e084015261010061033b82828601602089016102bd565b60c0840194909452601f01601f191691909101909101979650505050505050565b6000825161036e8184602087016102bd565b9190910192915050565b60006020828403121561038a57600080fd5b8151801515811461039a57600080fd5b939250505056fea2646970667358221220890e6c4f803738cdd8143d9c468e06db317af2bf0fc3f3e1815eb0eec51fe54264736f6c634300080c0033","storage":{"0x0":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x322af8000000c8","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0x998abeb3e57409262ae5b751f60747921b33613e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0xf5059a5d33d5853360d16c683c16e67980206f36","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x68b1d87f95878fe05b998f19b66f4baba5de1aed","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611904565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611904565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611937565b61045b565b005b6101ca6101b5366004611937565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c2565b6105b4565b61021b610200366004611a68565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611937565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a81565b6102a261029d366004611a98565b610672565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac2565b610705565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61034461033f366004611a98565b6108a0565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611904565b6108eb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611937565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0a565b6109b8565b6103f26103ed366004611b67565b610e0c565b6040516101529190611bdf565b61018461040d366004611904565b60016020526000908152604090205481565b61021b61042d366004611a68565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c2565b611026565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104ac5760405162461bcd60e51b81526004016104a390611c29565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146105fc5760405162461bcd60e51b81526004016104a390611c29565b6000610607836108eb565b50905061061482826110cf565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e83610655856001600160a01b031660009081526001602052604090205490565b8460405161066593929190611c9d565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260049052919091208054839081106106af576106af611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061072c5761072c611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107f35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806108195750806040015163ffffffff168463ffffffff16105b6108975760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b600460205281600052604060002081815481106108bc57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b0382166000818152600360209081526040808320815180830183528154815260019182015481850152948452909152812054909190806109ae5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614610a025760405162461bcd60e51b81526004016104a390611c29565b6000610a30610a1936869003860160408701611d1f565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610ab8576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f3683398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b425760405162461bcd60e51b81526020600482015260476024820152600080516020611f3683398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610bc65760405162461bcd60e51b81526020600482015260426024820152600080516020611f3683398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610c1f918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d51565b6040516020818303038152906040528051906020012060001c610c429190611d9c565b9050610cdc610c7b610c6683610c60368a90038a0160408b01611d1f565b9061131a565b610c7536899003890189611d1f565b906113b1565b610c83611445565b610cc5610cb685610c60604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c75368a90038a018a611d1f565b610cd7368a90038a0160808b01611e0e565b611505565b610d775760405162461bcd60e51b815260206004820152606c6024820152600080516020611f3683398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610dfb9160808a0190611e6b565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e2957610e29611952565b604051908082528060200260200182016040528015610e52578160200160208202803683370190505b50905060005b8481101561101d576000868683818110610e7457610e74611d09565b919091013560f81c6000818152600460205260409020549092509050801580610ed7575060ff821660009081526004602052604081208054909190610ebb57610ebb611d09565b600091825260209091200154600160c01b900463ffffffff1686105b15610f645760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b805b80156110075760ff831660009081526004602052604090208790610f8b600184611eb5565b81548110610f9b57610f9b611d09565b600091825260209091200154600160c01b900463ffffffff1611610ff557610fc4600182611eb5565b858581518110610fd657610fd6611d09565b602002602001019063ffffffff16908163ffffffff1681525050611007565b80610fff81611ecc565b915050610f66565b505050808061101590611ee3565b915050610e58565b50949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461106e5760405162461bcd60e51b81526004016104a390611c29565b6000611079836108eb565b50905061108e8261108983611772565b6110cf565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e83610655856001600160a01b031660009081526001602052604090205490565b604080518082019091526000808252602082015260005b835181101561131457600084828151811061110357611103611d09565b0160209081015160f81c60008181526004909252604090912054909150806111935760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c790866113b1565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112109085611eb5565b8154811061122057611220611d09565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112615780546001600160c01b031916604083901c1781556112fd565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130c90611ee3565b9150506110e6565b50505050565b6040805180820190915260008082526020820152611336611831565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156113695761136b565bfe5b50806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113cd61184f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156113695750806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144d61186d565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611534611892565b60005b60028110156116f957600061154d826006611efe565b905084826002811061156157611561611d09565b60200201515183611573836000611f1d565b600c811061158357611583611d09565b602002015284826002811061159a5761159a611d09565b602002015160200151838260016115b19190611f1d565b600c81106115c1576115c1611d09565b60200201528382600281106115d8576115d8611d09565b60200201515151836115eb836002611f1d565b600c81106115fb576115fb611d09565b602002015283826002811061161257611612611d09565b602002015151600160200201518361162b836003611f1d565b600c811061163b5761163b611d09565b602002015283826002811061165257611652611d09565b60200201516020015160006002811061166d5761166d611d09565b60200201518361167e836004611f1d565b600c811061168e5761168e611d09565b60200201528382600281106116a5576116a5611d09565b6020020151602001516001600281106116c0576116c0611d09565b6020020151836116d1836005611f1d565b600c81106116e1576116e1611d09565b602002015250806116f181611ee3565b915050611537565b506117026118b1565b60006020826101808560086107d05a03fa90508080156113695750806117625760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179757506020820151155b156117b5575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fa9190611d9c565b611824907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611eb5565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118806118cf565b815260200161188d6118cf565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182c57600080fd5b60006020828403121561191657600080fd5b61191f826118ed565b9392505050565b803560ff8116811461182c57600080fd5b60006020828403121561194957600080fd5b61191f82611926565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198b5761198b611952565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119ba576119ba611952565b604052919050565b600080604083850312156119d557600080fd5b6119de836118ed565b915060208084013567ffffffffffffffff808211156119fc57600080fd5b818601915086601f830112611a1057600080fd5b813581811115611a2257611a22611952565b611a34601f8201601f19168501611991565b91508082528784828501011115611a4a57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7a57600080fd5b5035919050565b8151815260208083015190820152604081016106ff565b60008060408385031215611aab57600080fd5b611ab483611926565b946020939093013593505050565b600080600060608486031215611ad757600080fd5b611ae084611926565b9250602084013563ffffffff81168114611af957600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2157600080fd5b611b2a856118ed565b9350610100601f1982011215611b3f57600080fd5b602085019250604061011f1982011215611b5857600080fd5b50610120840190509250925092565b600080600060408486031215611b7c57600080fd5b833567ffffffffffffffff80821115611b9457600080fd5b818601915086601f830112611ba857600080fd5b813581811115611bb757600080fd5b876020828501011115611bc957600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1d57835163ffffffff1683529284019291840191600101611bfb565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611cdf57858101830151858201608001528201611cc3565b81811115611cf1576000608083870101525b50601f01601f19169290920160800195945050505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d3157600080fd5b611d39611968565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db957634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dcf57600080fd5b611dd7611968565b806040840185811115611de957600080fd5b845b81811015611e03578035845260209384019301611deb565b509095945050505050565b600060808284031215611e2057600080fd5b6040516040810181811067ffffffffffffffff82111715611e4357611e43611952565b604052611e508484611dbe565b8152611e5f8460408501611dbe565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611ec757611ec7611e9f565b500390565b600081611edb57611edb611e9f565b506000190190565b6000600019821415611ef757611ef7611e9f565b5060010190565b6000816000190483118215151615611f1857611f18611e9f565b500290565b60008219821115611f3057611f30611e9f565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a2646970667358221220ea4e5768540668ded6677b9d2f7e8507f41512dd0da89412a3d94f77bc08c43664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0x6","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0xc5a5c42992decbae36851359345fe25997f5c42d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a7640000c5a5c42992decbae36851359345fe25997f5c42d"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220c164d850158d1f90a32bbe366e1545bff2724ee97114a57f639cabb55989579b64736f6c634300080c0033","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x998abeb3e57409262ae5b751f60747921b33613e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x6000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80639f3ccf651161010f578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461054b578063f851e1981461055e578063fa28c62714610571578063ff694a771461058457600080fd5b8063c8294c56146104d6578063d5eccc05146104e9578063dd9846b9146104fc578063df5cf7231461052457600080fd5b8063bc9a40c3116100de578063bc9a40c314610474578063bd29b8cd14610487578063c46778a51461049a578063c601527d146104c357600080fd5b80639f3ccf65146103ee578063ac6bfb0314610401578063adc804da14610421578063b6904b781461046157600080fd5b80634bd26e091161018757806366acfefe1161015657806366acfefe1461034a5780636d14a987146103755780637c172347146103b457806381c07502146103ce57600080fd5b80634bd26e09146102e55780635401ed27146103155780635e5a6775146103285780635f1f2d771461033757600080fd5b806320b66298116101c357806320b662981461026c57806325504777146102815780632cd95940146102a25780633ca5a5f5146102c257600080fd5b80630491b41c146101ea57806308732461146102205780631f9b74e014610241575b600080fd5b61020d6101f8366004612c27565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b61023361022e366004612c42565b610597565b604051610217929190612c6c565b61025461024f366004612ca6565b6105e0565b6040516001600160601b039091168152602001610217565b61027f61027a366004612d21565b610630565b005b61029461028f366004612de2565b610961565b604051610217929190612e81565b6102b56102b0366004612ea6565b610c2c565b6040516102179190612ed2565b61020d6102d0366004612c27565b60ff1660009081526003602052604090205490565b61020d6102f3366004612ea6565b600091825260026020908152604080842060ff93909316845291905290205490565b610254610323366004612ea6565b610ccb565b61020d670de0b6b3a764000081565b61027f610345366004612fdb565b610ce4565b61035d610358366004612de2565b611104565b6040516001600160c01b039091168152602001610217565b61039c7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b039091168152602001610217565b6103bc602081565b60405160ff9091168152602001610217565b6103e16103dc366004613097565b61125e565b60405161021791906130e9565b61039c6103fc366004612c42565b611528565b61041461040f366004613127565b611560565b604051610217919061315a565b61043461042f366004612c42565b6115f8565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610217565b61041461046f366004612c42565b611672565b61027f6104823660046131a6565b611701565b61027f6104953660046131d0565b6117fa565b6102546104a8366004612c27565b6000602081905290815260409020546001600160601b031681565b61027f6104d136600461329c565b611927565b6102546104e43660046132e9565b611a1b565b6102546104f7366004612c27565b611a99565b61050f61050a366004613325565b611aec565b60405163ffffffff9091168152602001610217565b61039c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610254610559366004613361565b611b01565b61041461056c366004612ea6565b611b96565b61025461057f366004613325565b611c7b565b61027f6105923660046133a3565b611cdc565b600360205281600052604060002081815481106105b357600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff8216600090815260016020526040812054839061061a5760405162461bcd60e51b815260040161061190613400565b60405180910390fd5b60006106268585611e47565b5095945050505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190613451565b6001600160a01b0316336001600160a01b0316146106e25760405162461bcd60e51b81526004016106119061346e565b846106fe8160ff16600090815260016020526040902054151590565b61071a5760405162461bcd60e51b815260040161061190613400565b8380610790576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f76696465646064820152608401610611565b8281146108055760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d61746368000000000000006064820152608401610611565b60ff87166000908152600360205260408120905b8281101561095657858582818110610833576108336134ea565b90506020020160208101906108489190613500565b8289898481811061085b5761085b6134ea565b9050602002013581548110610872576108726134ea565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108db576108db6134ea565b90506020020135815481106108f2576108f26134ea565b6000918252602090912001546001600160a01b0316888885818110610919576109196134ea565b905060200201602081019061092e9190613500565b60405161093c929190612c6c565b60405180910390a28061094e81613531565b915050610819565b505050505050505050565b606080336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146109ac5760405162461bcd60e51b81526004016106119061354c565b6000836001600160401b038111156109c6576109c6612f4a565b6040519080825280602002602001820160405280156109ef578160200160208202803683370190505b5090506000846001600160401b03811115610a0c57610a0c612f4a565b604051908082528060200260200182016040528015610a35578160200160208202803683370190505b50905060005b85811015610c1e576000878783818110610a5757610a576134ea565b919091013560f81c60008181526001602052604090205490925015159050610adf5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b6064820152608401610611565b600080610aec838d611e47565b9150915080610b895760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a401610611565b6000610b968c8585612045565b905082878681518110610bab57610bab6134ea565b60200260200101906001600160601b031690816001600160601b031681525050610bd584826122c5565b868681518110610be757610be76134ea565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610c1690613531565b915050610a3b565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610cbe576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c65565b5050505090505b92915050565b600080610cd88484611b96565b60400151949350505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d669190613451565b6001600160a01b0316336001600160a01b031614610d965760405162461bcd60e51b81526004016106119061346e565b81610db28160ff16600090815260016020526040902054151590565b610dce5760405162461bcd60e51b815260040161061190613400565b815180610e435760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f76696465640000006064820152608401610611565b60ff841660009081526003602090815260408083206004909252822090915b838110156110fb578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610ea257610ea26134ea565b602002602001015181548110610eba57610eba6134ea565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28660ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7584888481518110610f1857610f186134ea565b602002602001015181548110610f3057610f306134ea565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f70906001906135be565b81548110610f8057610f806134ea565b9060005260206000200183878381518110610f9d57610f9d6134ea565b602002602001015181548110610fb557610fb56134ea565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080611008576110086135d5565b60008281526020812082016000199081019190915501905581548290611030906001906135be565b81548110611040576110406134ea565b9060005260206000200160009054906101000a90046001600160a01b031682878381518110611071576110716134ea565b602002602001015181548110611089576110896134ea565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806110c7576110c76135d5565b600082815260209020810160001990810180546001600160a01b0319169055019055806110f381613531565b915050610e62565b50505050505050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461114e5760405162461bcd60e51b81526004016106119061354c565b6000805b8381101561062657600085858381811061116e5761116e6134ea565b919091013560f81c600081815260016020526040902054909250151590506111fe5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f7420657869737400000000000000006064820152608401610611565b60008061120b838b611e47565b915091508061122d5760009150600160ff84161b6001600160c01b0386161794505b600061123a8a8585612045565b905061124684826122c5565b5050505050808061125690613531565b915050611152565b60606000826001600160401b0381111561127a5761127a612f4a565b6040519080825280602002602001820160405280156112a3578160200160208202803683370190505b50905060005b8381101561151d5760008585838181106112c5576112c56134ea565b919091013560f81c600081815260016020526040902054909250151590506113645760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a401610611565b60ff81166000908152600160205260408120805463ffffffff8a16929061138d5761138d6134ea565b60009182526020909120015463ffffffff1611156114395760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a401610611565b60ff8116600090815260016020526040812054905b818110156115075760ff8316600090815260016020819052604090912063ffffffff8b169161147d84866135be565b61148791906135be565b81548110611497576114976134ea565b60009182526020909120015463ffffffff16116114f55760016114ba82846135be565b6114c491906135be565b8585815181106114d6576114d66134ea565b602002602001019063ffffffff16908163ffffffff1681525050611507565b806114ff81613531565b91505061144e565b505050808061151590613531565b9150506112a9565b5090505b9392505050565b6004602052816000526040600020818154811061154457600080fd5b6000918252602090912001546001600160a01b03169150829050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff881683529052919091208054839081106115a5576115a56134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805483908110611630576116306134ea565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260019052919091208054839081106116af576116af6134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117839190613451565b6001600160a01b0316336001600160a01b0316146117b35760405162461bcd60e51b81526004016106119061346e565b816117cf8160ff16600090815260016020526040902054151590565b6117eb5760405162461bcd60e51b815260040161061190613400565b6117f5838361243f565b505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146118425760405162461bcd60e51b81526004016106119061354c565b60005b81811015611921576000838383818110611861576118616134ea565b919091013560f81c600081815260016020526040902054909250151590506118f15760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610611565b60006118ff86836000612045565b905061190b82826122c5565b505050808061191990613531565b915050611845565b50505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190613451565b6001600160a01b0316336001600160a01b0316146119d95760405162461bcd60e51b81526004016106119061346e565b816119f58160ff16600090815260016020526040902054151590565b611a115760405162461bcd60e51b815260040161061190613400565b6117f583836124a8565b60ff83166000908152600160205260408120805482919084908110611a4257611a426134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cd881856128eb565b60ff81166000908152600160208190526040822080549091611aba916135be565b81548110611aca57611aca6134ea565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611af9848484612a65565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611b3257611b326134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611b8981866128eb565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611bef579150610cc59050565b600085815260026020908152604080832060ff881684529091529020611c166001846135be565b81548110611c2657611c266134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610cc5915050565b600083815260026020908152604080832060ff861684529091528120611ca2858585612a65565b63ffffffff1681548110611cb857611cb86134ea565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614611d245760405162461bcd60e51b81526004016106119061354c565b60ff831660009081526001602052604090205415611da25760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b6064820152608401610611565b611dac83826124a8565b611db6838361243f565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611e668660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91692639004134792611edb928c92016135eb565b600060405180830381865afa158015611ef8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f20919081019061364a565b905060005b838110156120115760ff89166000908152600360205260409020805482908110611f5157611f516134ea565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611f9f57611f9f6134ea565b60200260200101511115611fff57670de0b6b3a764000083602001516001600160601b0316838381518110611fd657611fd66134ea565b6020026020010151611fe891906136da565b611ff291906136f9565b611ffc908661371b565b94505b8061200981613531565b915050611f25565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908061210957600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff199096169190921617939093171691909117905561226b565b600086815260026020908152604080832060ff8916845290915281206121306001846135be565b81548110612140576121406134ea565b600091825260209091200180546001600160601b03600160401b9091048116945090915085168314156121795760009350505050611521565b80544363ffffffff908116911614156121b3578054600160401b600160a01b031916600160401b6001600160601b03871602178155612269565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122bb8285612bcb565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122e990846135be565b815481106122f9576122f96134ea565b90600052602060002001905083600014156123285754600160401b90046001600160601b03169150610cc59050565b805460009061234790600160401b90046001600160601b031686612be3565b82549091504363ffffffff90811691161415612384578154600160401b600160a01b031916600160401b6001600160601b03831602178255612436565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b600081511161250d5760405162461bcd60e51b815260206004820152603860248201526000805160206137fa83398151915260448201527f3a206e6f20737472617465676965732070726f766964656400000000000000006064820152608401610611565b805160ff8316600090815260036020908152604090912054906125308383613746565b11156125a05760405162461bcd60e51b815260206004820152604560248201526000805160206137fa83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a401610611565b60005b828110156128e45760005b6125b88284613746565b811015612699578482815181106125d1576125d16134ea565b6020026020010151600001516001600160a01b0316600360008860ff1660ff1681526020019081526020016000208281548110612610576126106134ea565b6000918252602090912001546001600160a01b031614156126875760405162461bcd60e51b815260206004820152603d60248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073616d652073747261746567792032780000006064820152608401610611565b8061269181613531565b9150506125ae565b5060008482815181106126ae576126ae6134ea565b6020026020010151602001516001600160601b0316116127335760405162461bcd60e51b815260206004820152604660248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a401610611565b60ff851660009081526003602052604090208451859083908110612759576127596134ea565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff87168252600490526040902084518590839081106127be576127be6134ea565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612835576128356134ea565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612892576128926134ea565b6020026020010151600001518684815181106128b0576128b06134ea565b6020026020010151602001516040516128ca929190612c6c565b60405180910390a2806128dc81613531565b9150506125a3565b5050505050565b816000015163ffffffff168163ffffffff1610156129905760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a401610611565b602082015163ffffffff1615806129b65750816020015163ffffffff168163ffffffff16105b612a615760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c401610611565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612b0657600086815260026020908152604080832060ff89168452909152902063ffffffff851690612ab96001846135be565b81548110612ac957612ac96134ea565b60009182526020909120015463ffffffff1611612af457612aeb6001826135be565b92505050611521565b80612afe8161375e565b915050612a84565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e401610611565b60006115216001600160601b03808516908416613775565b600080821215612c0757612bf6826137b4565b612c0090846137d1565b9050610cc5565b612c00828461371b565b803560ff81168114612c2257600080fd5b919050565b600060208284031215612c3957600080fd5b61152182612c11565b60008060408385031215612c5557600080fd5b612c5e83612c11565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612ca357600080fd5b50565b60008060408385031215612cb957600080fd5b612cc283612c11565b91506020830135612cd281612c8e565b809150509250929050565b60008083601f840112612cef57600080fd5b5081356001600160401b03811115612d0657600080fd5b6020830191508360208260051b850101111561203e57600080fd5b600080600080600060608688031215612d3957600080fd5b612d4286612c11565b945060208601356001600160401b0380821115612d5e57600080fd5b612d6a89838a01612cdd565b90965094506040880135915080821115612d8357600080fd5b50612d9088828901612cdd565b969995985093965092949392505050565b60008083601f840112612db357600080fd5b5081356001600160401b03811115612dca57600080fd5b60208301915083602082850101111561203e57600080fd5b60008060008060608587031215612df857600080fd5b8435612e0381612c8e565b93506020850135925060408501356001600160401b03811115612e2557600080fd5b612e3187828801612da1565b95989497509550505050565b600081518084526020808501945080840160005b83811015612e765781516001600160601b031687529582019590820190600101612e51565b509495945050505050565b604081526000612e946040830185612e3d565b82810360208401526124368185612e3d565b60008060408385031215612eb957600080fd5b82359150612ec960208401612c11565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57612f2b83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612eee565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612f8257612f82612f4a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612fb057612fb0612f4a565b604052919050565b60006001600160401b03821115612fd157612fd1612f4a565b5060051b60200190565b60008060408385031215612fee57600080fd5b612ff783612c11565b91506020808401356001600160401b0381111561301357600080fd5b8401601f8101861361302457600080fd5b803561303761303282612fb8565b612f88565b81815260059190911b8201830190838101908883111561305657600080fd5b928401925b828410156130745783358252928401929084019061305b565b80955050505050509250929050565b803563ffffffff81168114612c2257600080fd5b6000806000604084860312156130ac57600080fd5b6130b584613083565b925060208401356001600160401b038111156130d057600080fd5b6130dc86828701612da1565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57835163ffffffff1683529284019291840191600101613105565b60008060006060848603121561313c57600080fd5b61314584612c11565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610cc5565b80356001600160601b0381168114612c2257600080fd5b600080604083850312156131b957600080fd5b6131c283612c11565b9150612ec96020840161318f565b6000806000604084860312156131e557600080fd5b8335925060208401356001600160401b038111156130d057600080fd5b600082601f83011261321357600080fd5b8135602061322361303283612fb8565b82815260069290921b8401810191818101908684111561324257600080fd5b8286015b84811015613291576040818903121561325f5760008081fd5b613267612f60565b813561327281612c8e565b815261327f82860161318f565b81860152835291830191604001613246565b509695505050505050565b600080604083850312156132af57600080fd5b6132b883612c11565b915060208301356001600160401b038111156132d357600080fd5b6132df85828601613202565b9150509250929050565b6000806000606084860312156132fe57600080fd5b61330784612c11565b925061331560208501613083565b9150604084013590509250925092565b60008060006060848603121561333a57600080fd5b8335925061334a60208501612c11565b915061335860408501613083565b90509250925092565b6000806000806080858703121561337757600080fd5b61338085612c11565b935061338e60208601613083565b93969395505050506040820135916060013590565b6000806000606084860312156133b857600080fd5b6133c184612c11565b92506133cf6020850161318f565b915060408401356001600160401b038111156133ea57600080fd5b6133f686828701613202565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561346357600080fd5b815161152181612c8e565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561351257600080fd5b6115218261318f565b634e487b7160e01b600052601160045260246000fd5b60006000198214156135455761354561351b565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156135d0576135d061351b565b500390565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b03808616845260206040818601528286548085526060870191508760005282600020945060005b8181101561363c57855485168352600195860195928401920161361e565b509098975050505050505050565b6000602080838503121561365d57600080fd5b82516001600160401b0381111561367357600080fd5b8301601f8101851361368457600080fd5b805161369261303282612fb8565b81815260059190911b820183019083810190878311156136b157600080fd5b928401925b828410156136cf578351825292840192908401906136b6565b979650505050505050565b60008160001904831182151516156136f4576136f461351b565b500290565b60008261371657634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b0380831681851680830382111561373d5761373d61351b565b01949350505050565b600082198211156137595761375961351b565b500190565b60008161376d5761376d61351b565b506000190190565b60008083128015600160ff1b8501841216156137935761379361351b565b6001600160ff1b03840183138116156137ae576137ae61351b565b50500390565b6000600160ff1b8214156137ca576137ca61351b565b5060000390565b60006001600160601b03838116908316818110156137f1576137f161351b565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a264697066735822122013e43aa0d17be9068c90a8cc3e1e30a67f8fb3af90dd77b77812e62b135f0e1364736f6c634300080c0033","storage":{}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122035f03db22cb73fc5cdc009d8cb10aa3fb88ffe01e5760e1af6178cd53c67595f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000424242424242424242424242424242424242424281565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ef27d84673f8fb0a3acb412819d09dde9de413187461a072f3d1f27b860910e564736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9e545e3c0baab3e08cdfd552c960a1050f373042":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220b21976f06ef02c2cd93d153abeebc384346023ec0dc78005b008777a8176aa1764736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004614835565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a236600461489b565b6109ce565b6103ba6103b5366004614835565b610a90565b60405161036491906148f6565b6103da6103d5366004614993565b610df9565b005b6103da6103ea3660046149e6565b610f3e565b6103da6103fd366004614a0a565b610ff1565b6103da610410366004614a4b565b6110a8565b6103da610423366004614a64565b6111e7565b61035a6104363660046149e6565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a0a565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614acf565b611229565b6103da6104bc366004614a0a565b61136d565b61035a6104cf3660046149e6565b609b6020526000908152604090205481565b6103da6104ef366004614b76565b61141d565b61051b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149e6565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149e6565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e73565b611641565b610575610606366004614eaf565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ee0565b611671565b6103da610644366004614a4b565b61170c565b61051b6106573660046149e6565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149e6565b61171d565b6103da61173e565b61035a61069b366004614f6f565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615050565b611752565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150e0565b61197e565b604051610364919061516a565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da61073836600461517d565b611a58565b61035a61074b3660046149e6565b609f6020526000908152604090205481565b61051b7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b610575610792366004614a4b565b609e6020526000908152604090205460ff1681565b6105756107b53660046151b2565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149e6565b60a16020526000908152604090205481565b61086e61080c3660046149e6565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151de565b611b2a565b61035a62034bc081565b6108d46108cf3660046149e6565b611be3565b60405161036492919061525f565b6103ba6108f03660046149e6565b611f9b565b6103da610903366004615284565b61245f565b6103da6109163660046152dc565b61257c565b6103da6109293660046149e6565b61260d565b61035a612683565b6103da610944366004614a4b565b6126c1565b609d54600090815b838110156109c657600060a16000878785818110610971576109716152f8565b905060200201602081019061098691906149e6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf81615324565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc9061533f565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c18565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b436152f8565b9050602002810190610b559190615376565b610b63906020810190615396565b9050878783818110610b7757610b776152f8565b9050602002810190610b899190615376565b610b939080615396565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b6152f8565b9050602002810190610c2d9190615376565b610c3e9060608101906040016149e6565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd16152f8565b9050602002810190610ce39190615376565b610cf49060608101906040016149e6565b8a8a86818110610d0657610d066152f8565b9050602002810190610d189190615376565b610d229080615396565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d686152f8565b9050602002810190610d7a9190615376565b610d88906020810190615396565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061281d92505050565b838281518110610dd157610dd16152f8565b602090810291909101015280610de681615324565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612ddd565b604080518082019091526060815260006020820152610eb43380836000612fd0565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153df565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f30929190615431565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615460565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc9061547d565b610fee81613266565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806110505750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b61106c5760405162461bcd60e51b8152600401610abc906154c7565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561335d565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190615524565b6111305760405162461bcd60e51b8152600401610abc90615541565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133d8565b6110a184848484613432565b6001600160a01b0383166000908152609b602052604081205461122085828686611b2a565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613658565b6112fb613742565b609755611307896137d9565b6113108661382b565b61131c85858585613432565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806113cc5750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b6113e85760405162461bcd60e51b8152600401610abc906154c7565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613925565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be6152f8565b90506020028101906114d09190615589565b8989848181106114e2576114e26152f8565b90506020028101906114f49190615396565b898986818110611506576115066152f8565b9050602002013588888781811061151f5761151f6152f8565b9050602002016020810190611534919061559f565b6139a0565b61154281615324565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190615524565b6116025760405162461bcd60e51b8152600401610abc90615541565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615630565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139a0565b5050600160c95550505050565b6117146133d8565b610fee8161382b565b6001600160a01b039081166000818152609a60205260409020549091161490565b6117466133d8565b61175060006137d9565b565b42836020015110156117d65760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117df8561155a565b156118685760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b6118718461171d565b6118fd5760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119398783888860200151611b2a565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611969908890839061418a565b61197587878686612fd0565b50505050505050565b6060600082516001600160401b0381111561199b5761199b614c18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a0257611a026152f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a3d57611a3d6152f8565b6020908102919091010152611a5181615324565b90506119ca565b611a613361171d565b611ae35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b1e929190615431565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611ba0612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6909116906360f4062b90602401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190615643565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0f91908101906156b7565b9150915060008313611d2657909590945092505050565b606080835160001415611de0576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611d9b57611d9b6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611dcf57611dcf6152f8565b602002602001018181525050611f8e565b8351611ded906001615771565b6001600160401b03811115611e0457611e04614c18565b604051908082528060200260200182016040528015611e2d578160200160208202803683370190505b50915081516001600160401b03811115611e4957611e49614c18565b604051908082528060200260200182016040528015611e72578160200160208202803683370190505b50905060005b8451811015611f0c57848181518110611e9357611e936152f8565b6020026020010151838281518110611ead57611ead6152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611edf57611edf6152f8565b6020026020010151828281518110611ef957611ef96152f8565b6020908102919091010152600101611e78565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f319190615789565b81518110611f4157611f416152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f719190615789565b81518110611f8157611f816152f8565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fc75760405162461bcd60e51b8152600401610abc9061533f565b611fd08361155a565b6120505760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120598361171d565b156120cc5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a60205260409020549091169033148061217b5750336001600160a01b038216145b806121a257506001600160a01b038181166000908152609960205260409020600101541633145b6122145760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061222086611be3565b9092509050336001600160a01b0387161461227657826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516122f8576040805160008152602081019091529450612456565b81516001600160401b0381111561231157612311614c18565b60405190808252806020026020018201604052801561233a578160200160208202803683370190505b50945060005b8251811015612454576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123a0576123a06152f8565b6020026020010151826000815181106123bb576123bb6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106123ed576123ed6152f8565b602002602001015181600081518110612408576124086152f8565b60200260200101818152505061242189878b858561281d565b888481518110612433576124336152f8565b6020026020010181815250505050808061244c90615324565b915050612340565b505b50505050919050565b6124683361155a565b156124e65760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6124ef8361171d565b6125705760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fd0565b6125853361171d565b6126035760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612ddd565b6126156133d8565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137d9565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156126b4575060975490565b6126bc613742565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190615460565b6001600160a01b0316336001600160a01b0316146127685760405162461bcd60e51b8152600401610abc9061547d565b6066541981196066541916146127e65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128b45760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b825161293e5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612ceb576001600160a01b03861615612997576129978688868481518110612970576129706152f8565b602002602001015186858151811061298a5761298a6152f8565b602002602001015161335d565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129c7576129c76152f8565b60200260200101516001600160a01b03161415612a90577f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031663beffbb8988858481518110612a2057612a206152f8565b60200260200101516040518363ffffffff1660e01b8152600401612a599291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050612ce3565b846001600160a01b0316876001600160a01b03161480612b6257507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639b4da03d858381518110612aec57612aec6152f8565b60200260200101516040518263ffffffff1660e01b8152600401612b1f91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190615524565b155b612c2e5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612c7057612c706152f8565b6020026020010151868581518110612c8a57612c8a6152f8565b60200260200101516040518463ffffffff1660e01b8152600401612cb0939291906157a0565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b505050505b600101612941565b506001600160a01b0386166000908152609f60205260408120805491829190612d1383615324565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d7b82611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612dc990839085906157c4565b60405180910390a198975050505050505050565b6213c680612df160608301604084016157dd565b63ffffffff161115612ea65760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612ee290606084019084016157dd565b63ffffffff161015612f785760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612f9c828261581a565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b1e9084906153df565b60665460009060019081161415612ff95760405162461bcd60e51b8152600401610abc9061533f565b6001600160a01b0380851660009081526099602052604090206001015416801580159061302f5750336001600160a01b03821614155b80156130445750336001600160a01b03861614155b156131b15742846020015110156130c35760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561315d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff1916600117905585015161319e9088908890859088906109ce565b90506131af8282876000015161418a565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061321088611be3565b9150915060005b82518110156113625761325e888a858481518110613237576132376152f8565b6020026020010151858581518110613251576132516152f8565b6020026020010151613925565b600101613217565b6001600160a01b0381166132f45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613394908490615789565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157a0565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134ba5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136505760008686838181106134da576134da6152f8565b90506020020160208101906134ef91906149e6565b6001600160a01b038116600090815260a1602052604081205491925086868581811061351d5761351d6152f8565b90506020020135905062034bc08111156135e15760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a15050508061364990615324565b90506134be565b505050505050565b6065546001600160a01b031615801561367957506001600160a01b03821615155b6136fb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261373e82613266565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138e45760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061395c908490615771565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157a0565b60006139ae6105f38761587d565b6000818152609e602052604090205490915060ff16613a2f5760405162461bcd60e51b815260206004820152604360248201526000805160206159b583398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a4460a0890160808a016157dd565b63ffffffff16613a549190615771565b1115613adc5760405162461bcd60e51b815260206004820152605f60248201526000805160206159b583398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613aec60608701604088016149e6565b6001600160a01b0316336001600160a01b031614613b795760405162461bcd60e51b815260206004820152605060248201526000805160206159b583398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613bfb57613b8c60a0870187615396565b85149050613bfb5760405162461bcd60e51b815260206004820152604260248201526000805160206159b583398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d605760005b613c2760a0880188615396565b9050811015613d5a574360a16000613c4260a08b018b615396565b85818110613c5257613c526152f8565b9050602002016020810190613c6791906149e6565b6001600160a01b03168152602081019190915260400160002054613c9160a08a0160808b016157dd565b63ffffffff16613ca19190615771565b1115613cbf5760405162461bcd60e51b8152600401610abc9061588f565b613d52613ccf60208901896149e6565b33613cdd60a08b018b615396565b85818110613ced57613ced6152f8565b9050602002016020810190613d0291906149e6565b613d0f60c08c018c615396565b86818110613d1f57613d1f6152f8565b905060200201358a8a87818110613d3857613d386152f8565b9050602002016020810190613d4d91906149e6565b614344565b600101613c1a565b5061414f565b336000908152609a60205260408120546001600160a01b0316905b613d8860a0890189615396565b905081101561414c574360a16000613da360a08c018c615396565b85818110613db357613db36152f8565b9050602002016020810190613dc891906149e6565b6001600160a01b03168152602081019190915260400160002054613df260a08b0160808c016157dd565b63ffffffff16613e029190615771565b1115613e205760405162461bcd60e51b8152600401610abc9061588f565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e4260a08a018a615396565b83818110613e5257613e526152f8565b9050602002016020810190613e6791906149e6565b6001600160a01b03161415613fb7576000613e8560208a018a6149e6565b905060006001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616630e81073c83613ec660c08e018e615396565b87818110613ed657613ed66152f8565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e9190615643565b6001600160a01b038084166000908152609a6020526040902054919250168015613faf57613faf8184613f8460a08f018f615396565b88818110613f9457613f946152f8565b9050602002016020810190613fa991906149e6565b85613925565b505050614144565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c4623ea133898985818110613ff957613ff96152f8565b905060200201602081019061400e91906149e6565b61401b60a08d018d615396565b8681811061402b5761402b6152f8565b905060200201602081019061404091906149e6565b61404d60c08e018e615396565b8781811061405d5761405d6152f8565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505050506001600160a01b038216156141445761414482336140f660a08c018c615396565b85818110614106576141066152f8565b905060200201602081019061411b91906149e6565b61412860c08d018d615396565b86818110614138576141386152f8565b90506020020135613925565b600101613d7b565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141ca9086908690600401615917565b602060405180830381865afa1580156141e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420b9190615974565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142b88383614484565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156143ef5760405162387b1360e81b81526001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063387b1300906143b8908890889087906004016157a0565b600060405180830381600087803b1580156143d257600080fd5b505af11580156143e6573d6000803e3d6000fd5b5050505061447d565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b15801561446957600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b600080600061449385856144a0565b915091506109c681614510565b6000808251604114156144d75760208301516040840151606085015160001a6144cb878285856146cb565b94509450505050614509565b82516040141561450157602083015160408401516144f68683836147b8565b935093505050614509565b506000905060025b9250929050565b60008160048111156145245761452461599e565b141561452d5750565b60018160048111156145415761454161599e565b141561458f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145a3576145a361599e565b14156145f15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b60038160048111156146055761460561599e565b141561465e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b60048160048111156146725761467261599e565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561470257506000905060036147af565b8460ff16601b1415801561471a57508460ff16601c14155b1561472b57506000905060046147af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561477f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147a8576000600192509250506147af565b9150600090505b94509492505050565b6000806001600160ff1b038316816147d560ff86901c601b615771565b90506147e3878288856146cb565b935093505050935093915050565b60008083601f84011261480357600080fd5b5081356001600160401b0381111561481a57600080fd5b6020830191508360208260051b850101111561450957600080fd5b6000806020838503121561484857600080fd5b82356001600160401b0381111561485e57600080fd5b61486a858286016147f1565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b803561489681614876565b919050565b600080600080600060a086880312156148b357600080fd5b85356148be81614876565b945060208601356148ce81614876565b935060408601356148de81614876565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561492e57835183529284019291840191600101614912565b50909695505050505050565b60006060828403121561494c57600080fd5b50919050565b60008083601f84011261496457600080fd5b5081356001600160401b0381111561497b57600080fd5b60208301915083602082850101111561450957600080fd5b6000806000608084860312156149a857600080fd5b6149b2858561493a565b925060608401356001600160401b038111156149cd57600080fd5b6149d986828701614952565b9497909650939450505050565b6000602082840312156149f857600080fd5b8135614a0381614876565b9392505050565b600080600060608486031215614a1f57600080fd5b8335614a2a81614876565b92506020840135614a3a81614876565b929592945050506040919091013590565b600060208284031215614a5d57600080fd5b5035919050565b60008060008060408587031215614a7a57600080fd5b84356001600160401b0380821115614a9157600080fd5b614a9d888389016147f1565b90965094506020870135915080821115614ab657600080fd5b50614ac3878288016147f1565b95989497509550505050565b60008060008060008060008060c0898b031215614aeb57600080fd5b8835614af681614876565b97506020890135614b0681614876565b9650604089013595506060890135945060808901356001600160401b0380821115614b3057600080fd5b614b3c8c838d016147f1565b909650945060a08b0135915080821115614b5557600080fd5b50614b628b828c016147f1565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614b9257600080fd5b88356001600160401b0380821115614ba957600080fd5b614bb58c838d016147f1565b909a50985060208b0135915080821115614bce57600080fd5b614bda8c838d016147f1565b909850965060408b0135915080821115614bf357600080fd5b614bff8c838d016147f1565b909650945060608b0135915080821115614b5557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c5057614c50614c18565b60405290565b604080519081016001600160401b0381118282101715614c5057614c50614c18565b604051601f8201601f191681016001600160401b0381118282101715614ca057614ca0614c18565b604052919050565b63ffffffff81168114610fee57600080fd5b803561489681614ca8565b60006001600160401b03821115614cde57614cde614c18565b5060051b60200190565b600082601f830112614cf957600080fd5b81356020614d0e614d0983614cc5565b614c78565b82815260059290921b84018101918181019086841115614d2d57600080fd5b8286015b84811015614d51578035614d4481614876565b8352918301918301614d31565b509695505050505050565b600082601f830112614d6d57600080fd5b81356020614d7d614d0983614cc5565b82815260059290921b84018101918181019086841115614d9c57600080fd5b8286015b84811015614d515780358352918301918301614da0565b600060e08284031215614dc957600080fd5b614dd1614c2e565b9050614ddc8261488b565b8152614dea6020830161488b565b6020820152614dfb6040830161488b565b604082015260608201356060820152614e1660808301614cba565b608082015260a08201356001600160401b0380821115614e3557600080fd5b614e4185838601614ce8565b60a084015260c0840135915080821115614e5a57600080fd5b50614e6784828501614d5c565b60c08301525092915050565b600060208284031215614e8557600080fd5b81356001600160401b03811115614e9b57600080fd5b614ea784828501614db7565b949350505050565b600060208284031215614ec157600080fd5b813560ff81168114614a0357600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614ef857600080fd5b85356001600160401b0380821115614f0f57600080fd5b9087019060e0828a031215614f2357600080fd5b90955060208701359080821115614f3957600080fd5b50614f46888289016147f1565b909550935050604086013591506060860135614f6181614ed2565b809150509295509295909350565b60008060408385031215614f8257600080fd5b8235614f8d81614876565b91506020830135614f9d81614876565b809150509250929050565b600060408284031215614fba57600080fd5b614fc2614c56565b905081356001600160401b0380821115614fdb57600080fd5b818401915084601f830112614fef57600080fd5b813560208282111561500357615003614c18565b615015601f8301601f19168201614c78565b9250818352868183860101111561502b57600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561506857600080fd5b853561507381614876565b9450602086013561508381614876565b935060408601356001600160401b038082111561509f57600080fd5b6150ab89838a01614fa8565b945060608801359150808211156150c157600080fd5b506150ce88828901614fa8565b95989497509295608001359392505050565b600080604083850312156150f357600080fd5b82356150fe81614876565b915060208301356001600160401b0381111561511957600080fd5b61512585828601614ce8565b9150509250929050565b600081518084526020808501945080840160005b8381101561515f57815187529582019590820190600101615143565b509495945050505050565b602081526000614a03602083018461512f565b6000806020838503121561519057600080fd5b82356001600160401b038111156151a657600080fd5b61486a85828601614952565b600080604083850312156151c557600080fd5b82356151d081614876565b946020939093013593505050565b600080600080608085870312156151f457600080fd5b84356151ff81614876565b935060208501359250604085013561521681614876565b9396929550929360600135925050565b600081518084526020808501945080840160005b8381101561515f5781516001600160a01b03168752958201959082019060010161523a565b6040815260006152726040830185615226565b8281036020840152611220818561512f565b60008060006060848603121561529957600080fd5b83356152a481614876565b925060208401356001600160401b038111156152bf57600080fd5b6152cb86828701614fa8565b925050604084013590509250925092565b6000606082840312156152ee57600080fd5b614a03838361493a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153385761533861530e565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261538c57600080fd5b9190910192915050565b6000808335601e198436030181126153ad57600080fd5b8301803591506001600160401b038211156153c757600080fd5b6020019150600581901b360382131561450957600080fd5b6060810182356153ee81614876565b6001600160a01b03908116835260208401359061540a82614876565b166020830152604083013561541e81614ca8565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561547257600080fd5b8151614a0381614876565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561553657600080fd5b8151614a0381614ed2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261538c57600080fd5b6000602082840312156155b157600080fd5b8135614a0381614ed2565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261561760e0850182615226565b905060c083015184820360c0860152611220828261512f565b602081526000614a0360208301846155bc565b60006020828403121561565557600080fd5b5051919050565b600082601f83011261566d57600080fd5b8151602061567d614d0983614cc5565b82815260059290921b8401810191818101908684111561569c57600080fd5b8286015b84811015614d5157805183529183019183016156a0565b600080604083850312156156ca57600080fd5b82516001600160401b03808211156156e157600080fd5b818501915085601f8301126156f557600080fd5b81516020615705614d0983614cc5565b82815260059290921b8401810191818101908984111561572457600080fd5b948201945b8386101561574b57855161573c81614876565b82529482019490820190615729565b9188015191965090935050508082111561576457600080fd5b506151258582860161565c565b600082198211156157845761578461530e565b500190565b60008282101561579b5761579b61530e565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ea760408301846155bc565b6000602082840312156157ef57600080fd5b8135614a0381614ca8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582581614876565b61582f81836157fa565b5060018101602083013561584281614876565b61584c81836157fa565b50604083013561585b81614ca8565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006158893683614db7565b92915050565b6020808252606e908201526000805160206159b583398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561594b5785810183015185820160600152820161592f565b8181111561595d576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561598657600080fd5b81516001600160e01b031981168114614a0357600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212203a9863b190b0abcf799891a42203a11c6933a165f6897ec6ac670f95b48c927b64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632702747d14610046578063793e1c8e1461006f5780637be6aa6b14610090575b600080fd5b61005961005436600461023e565b6100a3565b6040516100669190610277565b60405180910390f35b61007861dead81565b6040516001600160a01b039091168152602001610066565b61005961009e3660046102c4565b6100fd565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166333cfb7b760e01b1790526060906100f3848261013a565b9150505b92915050565b6040805160048152602481019091526020810180516001600160e01b031663e481af9d60e01b179052606090610133838261013a565b9392505050565b6060600080846001600160a01b03168460405161015791906102e1565b600060405180830381855afa9150503d8060008114610192576040519150601f19603f3d011682016040523d82523d6000602084013e610197565b606091505b50915091508180156101aa575060008151115b156101cc57808060200190518101906101c39190610342565b925050506100f7565b6040805160018082528183019092526000916020808301908036833701905050905061dead8160008151811061020457610204610407565b6001600160a01b039092166020928302919091019091015292506100f7915050565b6001600160a01b038116811461023b57600080fd5b50565b6000806040838503121561025157600080fd5b823561025c81610226565b9150602083013561026c81610226565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156102b85783516001600160a01b031683529284019291840191600101610293565b50909695505050505050565b6000602082840312156102d657600080fd5b813561013381610226565b6000825160005b8181101561030257602081860181015185830152016102e8565b81811115610311576000828501525b509190910192915050565b634e487b7160e01b600052604160045260246000fd5b805161033d81610226565b919050565b6000602080838503121561035557600080fd5b825167ffffffffffffffff8082111561036d57600080fd5b818501915085601f83011261038157600080fd5b8151818111156103935761039361031c565b8060051b604051601f19603f830116810181811085821117156103b8576103b861031c565b6040529182528482019250838101850191888311156103d657600080fd5b938501935b828510156103fb576103ec85610332565b845293850193928501926103db565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e3e34ad152bd88a05fcf1dad9df4581798acdafb958b376a210422ed18bff22564736f6c634300080c0033","storage":{}},"0xb7278a61aa25c888815afc32ad3cc52ff24fe575":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331b36bd9146100675780633563b0d1146100905780634d2b57fe146100b05780634f739f74146100d05780635c155662146100f0578063cefdc1d414610110575b600080fd5b61007a6100753660046113fa565b610131565b60405161008791906114e8565b60405180910390f35b6100a361009e366004611524565b61024d565b604051610087919061167f565b6100c36100be3660046116f8565b6106e3565b6040516100879190611747565b6100e36100de3660046117df565b6107f8565b60405161008791906118d7565b6101036100fe366004611992565b610f22565b60405161008791906119f5565b61012361011e366004611a2d565b6110ea565b604051610087929190611a64565b606081516001600160401b0381111561014c5761014c611391565b604051908082528060200260200182016040528015610175578160200160208202803683370190505b50905060005b825181101561024657836001600160a01b03166313542a4e8483815181106101a5576101a5611a85565b60200260200101516040518263ffffffff1660e01b81526004016101d891906001600160a01b0391909116815260200190565b602060405180830381865afa1580156101f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102199190611a9b565b82828151811061022b5761022b611a85565b602090810291909101015261023f81611aca565b905061017b565b5092915050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b39190611ae5565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190611ae5565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190611ae5565b9050600086516001600160401b0381111561039c5761039c611391565b6040519080825280602002602001820160405280156103cf57816020015b60608152602001906001900390816103ba5790505b50905060005b87518110156106d75760008882815181106103f2576103f2611a85565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190611b02565b905080516001600160401b0381111561049657610496611391565b6040519080825280602002602001820160405280156104e157816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816104b45790505b508484815181106104f4576104f4611a85565b602002602001018190525060005b81518110156106c1576040518060600160405280876001600160a01b03166347b314e885858151811061053757610537611a85565b60200260200101516040518263ffffffff1660e01b815260040161055d91815260200190565b602060405180830381865afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e9190611ae5565b6001600160a01b031681526020018383815181106105be576105be611a85565b60200260200101518152602001896001600160a01b031663fa28c6278585815181106105ec576105ec611a85565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa158015610648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066c9190611b92565b6001600160601b031681525085858151811061068a5761068a611a85565b602002602001015182815181106106a3576106a3611a85565b602002602001018190525080806106b990611aca565b915050610502565b50505080806106cf90611aca565b9150506103d5565b50979650505050505050565b606081516001600160401b038111156106fe576106fe611391565b604051908082528060200260200182016040528015610727578160200160208202803683370190505b50905060005b825181101561024657836001600160a01b031663296bb06484838151811061075757610757611a85565b60200260200101516040518263ffffffff1660e01b815260040161077d91815260200190565b602060405180830381865afa15801561079a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190611ae5565b8282815181106107d0576107d0611a85565b6001600160a01b03909216602092830291909101909101526107f181611aca565b905061072d565b6108236040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190611ae5565b90506108b46040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e906108e4908b9089908990600401611bbb565b600060405180830381865afa158015610901573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109299190810190611c05565b81526040516340e03a8160e11b81526001600160a01b038316906381c075029061095b908b908b908b90600401611cbc565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190611c05565b6040820152856001600160401b038111156109bd576109bd611391565b6040519080825280602002602001820160405280156109f057816020015b60608152602001906001900390816109db5790505b50606082015260005b60ff8116871115610e33576000856001600160401b03811115610a1e57610a1e611391565b604051908082528060200260200182016040528015610a47578160200160208202803683370190505b5083606001518360ff1681518110610a6157610a61611a85565b602002602001018190525060005b86811015610d335760008c6001600160a01b03166304ec63518a8a85818110610a9a57610a9a611a85565b905060200201358e88600001518681518110610ab857610ab8611a85565b60200260200101516040518463ffffffff1660e01b8152600401610af59392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190611ce5565b90506001600160c01b038116610bde5760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff16818110610bf357610bf3611a85565b6001600160c01b03841692013560f81c9190911c600190811614159050610d2057856001600160a01b031663dd9846b98a8a85818110610c3557610c35611a85565b905060200201358d8d8860ff16818110610c5157610c51611a85565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611d0e565b85606001518560ff1681518110610ce457610ce4611a85565b60200260200101518481518110610cfd57610cfd611a85565b63ffffffff9092166020928302919091019091015282610d1c81611aca565b9350505b5080610d2b81611aca565b915050610a6f565b506000816001600160401b03811115610d4e57610d4e611391565b604051908082528060200260200182016040528015610d77578160200160208202803683370190505b50905060005b82811015610df85784606001518460ff1681518110610d9e57610d9e611a85565b60200260200101518181518110610db757610db7611a85565b6020026020010151828281518110610dd157610dd1611a85565b63ffffffff9092166020928302919091019091015280610df081611aca565b915050610d7d565b508084606001518460ff1681518110610e1357610e13611a85565b602002602001018190525050508080610e2b90611d2b565b9150506109f9565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190611ae5565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610ecb908b908b908e90600401611d4b565b600060405180830381865afa158015610ee8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f109190810190611c05565b60208301525098975050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401610f54929190611d75565b600060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f999190810190611c05565b9050600084516001600160401b03811115610fb657610fb6611391565b604051908082528060200260200182016040528015610fdf578160200160208202803683370190505b50905060005b85518110156110e057866001600160a01b03166304ec635187838151811061100f5761100f611a85565b60200260200101518786858151811061102a5761102a611a85565b60200260200101516040518463ffffffff1660e01b81526004016110679392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a89190611ce5565b6001600160c01b03168282815181106110c3576110c3611a85565b6020908102919091010152806110d881611aca565b915050610fe5565b5095945050505050565b604080516001808252818301909252600091606091839160208083019080368337019050509050848160008151811061112557611125611a85565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e906111619088908690600401611d75565b600060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a69190810190611c05565b6000815181106111b8576111b8611a85565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015611224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112489190611ce5565b6001600160c01b03169050600061125e8261127c565b90508161126c8a838a61024d565b9550955050505050935093915050565b606060008061128a84611348565b61ffff166001600160401b038111156112a5576112a5611391565b6040519080825280601f01601f1916602001820160405280156112cf576020820181803683370190505b5090506000805b8251821080156112e7575061010081105b1561133e576001811b93508584161561132e578060f81b83838151811061131057611310611a85565b60200101906001600160f81b031916908160001a9053508160010191505b61133781611aca565b90506112d6565b5090949350505050565b6000805b82156113735761135d600184611d94565b909216918061136b81611dab565b91505061134c565b92915050565b6001600160a01b038116811461138e57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156113cf576113cf611391565b604052919050565b60006001600160401b038211156113f0576113f0611391565b5060051b60200190565b6000806040838503121561140d57600080fd5b823561141881611379565b91506020838101356001600160401b0381111561143457600080fd5b8401601f8101861361144557600080fd5b8035611458611453826113d7565b6113a7565b81815260059190911b8201830190838101908883111561147757600080fd5b928401925b8284101561149e57833561148f81611379565b8252928401929084019061147c565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156114dd578151875295820195908201906001016114c1565b509495945050505050565b6020815260006114fb60208301846114ad565b9392505050565b63ffffffff8116811461138e57600080fd5b803561151f81611502565b919050565b60008060006060848603121561153957600080fd5b833561154481611379565b92506020848101356001600160401b038082111561156157600080fd5b818701915087601f83011261157557600080fd5b81358181111561158757611587611391565b611599601f8201601f191685016113a7565b915080825288848285010111156115af57600080fd5b80848401858401376000848284010152508094505050506115d260408501611514565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015611671578385038a52825180518087529087019087870190845b8181101561165c57835180516001600160a01b031684528a8101518b8501526040908101516001600160601b03169084015292890192606090920191600101611618565b50509a87019a955050918501916001016115fa565b509298975050505050505050565b6020815260006114fb60208301846115db565b600082601f8301126116a357600080fd5b813560206116b3611453836113d7565b82815260059290921b840181019181810190868411156116d257600080fd5b8286015b848110156116ed57803583529183019183016116d6565b509695505050505050565b6000806040838503121561170b57600080fd5b823561171681611379565b915060208301356001600160401b0381111561173157600080fd5b61173d85828601611692565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156117885783516001600160a01b031683529284019291840191600101611763565b50909695505050505050565b60008083601f8401126117a657600080fd5b5081356001600160401b038111156117bd57600080fd5b6020830191508360208260051b85010111156117d857600080fd5b9250929050565b600080600080600080608087890312156117f857600080fd5b863561180381611379565b9550602087013561181381611502565b945060408701356001600160401b038082111561182f57600080fd5b818901915089601f83011261184357600080fd5b81358181111561185257600080fd5b8a602082850101111561186457600080fd5b60208301965080955050606089013591508082111561188257600080fd5b5061188f89828a01611794565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b838110156114dd57815163ffffffff16875295820195908201906001016118b5565b6000602080835283516080828501526118f360a08501826118a1565b905081850151601f198086840301604087015261191083836118a1565b9250604087015191508086840301606087015261192d83836118a1565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b8281101561198457848783030184526119728287516118a1565b95880195938801939150600101611958565b509998505050505050505050565b6000806000606084860312156119a757600080fd5b83356119b281611379565b925060208401356001600160401b038111156119cd57600080fd5b6119d986828701611692565b92505060408401356119ea81611502565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561178857835183529284019291840191600101611a11565b600080600060608486031215611a4257600080fd5b8335611a4d81611379565b92506020840135915060408401356119ea81611502565b828152604060208201526000611a7d60408301846115db565b949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611aad57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611ade57611ade611ab4565b5060010190565b600060208284031215611af757600080fd5b81516114fb81611379565b60006020808385031215611b1557600080fd5b82516001600160401b03811115611b2b57600080fd5b8301601f81018513611b3c57600080fd5b8051611b4a611453826113d7565b81815260059190911b82018301908381019087831115611b6957600080fd5b928401925b82841015611b8757835182529284019290840190611b6e565b979650505050505050565b600060208284031215611ba457600080fd5b81516001600160601b03811681146114fb57600080fd5b63ffffffff84168152604060208201819052810182905260006001600160fb1b03831115611be857600080fd5b8260051b8085606085013760009201606001918252509392505050565b60006020808385031215611c1857600080fd5b82516001600160401b03811115611c2e57600080fd5b8301601f81018513611c3f57600080fd5b8051611c4d611453826113d7565b81815260059190911b82018301908381019087831115611c6c57600080fd5b928401925b82841015611b87578351611c8481611502565b82529284019290840190611c71565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000611cdc604083018486611c93565b95945050505050565b600060208284031215611cf757600080fd5b81516001600160c01b03811681146114fb57600080fd5b600060208284031215611d2057600080fd5b81516114fb81611502565b600060ff821660ff811415611d4257611d42611ab4565b60010192915050565b604081526000611d5f604083018587611c93565b905063ffffffff83166020830152949350505050565b63ffffffff83168152604060208201526000611a7d60408301846114ad565b600082821015611da657611da6611ab4565b500390565b600061ffff80831681811415611dc357611dc3611ab4565b600101939250505056fea2646970667358221220a2edd1846f1c753b288c7cf2dcc7e6716602845aa7f1c341284fa4c0c4a4612064736f6c634300080c0033","storage":{}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea26469706673582212206dc2c0f44c94866033a128f2fc9ced237ec5b2ff470e7fd3ff0497128c9e0ed764736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x610178da211fef7d417bc0e6fed39f05609ad788"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x9635f643e140090a9a8dcd712ed6285858cebef","0x64":"0xde0b6b3a7640000","0x65":"0x3635c9adc5dea00000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x9d":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0x3d2729dff03bf559da35a983e55814217363c2a44a7ea59bdf688ab8754ea49d":"0x1","0x6e45a9ad53caf7293849c96e5070a246e20a7cc2986b7660b3fb63e30ab898fc":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220518767f02bbe792c716d0287095ada64b05cd36824c2ecc66bcd5c5ebe061cd664736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":57,"balance":"0x21e197bc631aa6ed19c","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0x6"}}},"best_block_number":"0xa"} \ No newline at end of file +{"block":{"number":"0xb","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x66cd19e8","gas_limit":"0x1c9c380","basefee":"0x13b491ef","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x1f1eccb","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0xc9":"0x94af000f6f71feb2b8401e668d95fd208038580e89d240930f90ba827aa34858","0xcb":"0x3e80000000000001c2018a0f92ad9645385e8a8f3db7d0f6cf7abbb0ad4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x09635f643e140090a9a8dcd712ed6285858cebef":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220adda763858b2ee86f27467db7ec8b893c350cd0ddfa605ad6608601ca5e1cf3664736f6c634300080c0033","storage":{}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102895760003560e01c80636d21117e1161015c578063bf21a8aa116100ce578063f2fde38b11610087578063f2fde38b1461071c578063f698da251461072f578063f8cd844814610737578063fabc1cbc1461074a578063fbf1e2c11461075d578063fce36c7d1461077057600080fd5b8063bf21a8aa14610667578063c46db6061461068e578063d4540a55146106bc578063e221b245146106cf578063e810ce21146106e2578063ea4d3c9b146106f557600080fd5b8063886f119511610120578063886f1195146105ce5780638da5cb5b146105e15780639104c319146105f25780639d45c2811461060d578063a0169ddd14610634578063bb7e451f1461064757600080fd5b80636d21117e14610552578063715018a6146105805780637b8f8b0514610588578063863cb9a914610590578063865c6953146105a357600080fd5b806337838ed01161020057806358baaa3e116101b957806358baaa3e146104c4578063595c6a67146104d75780635971b3f8146104df5780635ac86ab7146105145780635c975abb146105375780635e9d83481461053f57600080fd5b806337838ed01461042257806339b70e38146104495780633a8c0786146104705780633ccc861d146104875780633efe1db61461049a5780634d18cc35146104ad57600080fd5b8063131433b411610252578063131433b414610352578063136439dd14610379578063149bc8721461038c57806322f19a64146103ad5780632b9f64a4146103ce57806336af41fa1461040f57600080fd5b806218572c1461028e57806304a0c502146102c6578063092db007146103025780630eb383451461032a57806310d67a2f1461033f575b600080fd5b6102b161029c366004613120565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102ed7f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016102bd565b60cb5461031790600160e01b900461ffff1681565b60405161ffff90911681526020016102bd565b61033d61033836600461314b565b610783565b005b61033d61034d366004613120565b610805565b6102ed7f0000000000000000000000000000000000000000000000000000000065fb788081565b61033d610387366004613184565b6108c1565b61039f61039a3660046131b5565b610a00565b6040519081526020016102bd565b6103176103bb3660046131d1565b505060cb54600160e01b900461ffff1690565b6103f76103dc366004613120565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102bd565b61033d61041d3660046131ff565b610a76565b6102ed7f000000000000000000000000000000000000000000000000000000000076a70081565b6103f77f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b60cb546102ed90600160a01b900463ffffffff1681565b61033d610495366004613287565b610cb0565b61033d6104a83660046132e7565b611065565b60cb546102ed90600160c01b900463ffffffff1681565b61033d6104d2366004613313565b611365565b61033d611376565b6104f26104ed366004613184565b61143d565b6040805193845263ffffffff92831660208501529116908201526060016102bd565b6102b161052236600461332e565b606654600160ff9092169190911b9081161490565b60665461039f565b6102b161054d366004613351565b61147d565b6102b1610560366004613386565b60cf60209081526000928352604080842090915290825290205460ff1681565b61033d6114fb565b60ca5461039f565b61033d61059e366004613120565b61150f565b61039f6105b13660046131d1565b60cd60209081526000928352604080842090915290825290205481565b6065546103f7906001600160a01b031681565b6033546001600160a01b03166103f7565b6103f773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102ed7f0000000000000000000000000000000000000000000000000000000000093a8081565b61033d610642366004613120565b611520565b61039f610655366004613120565b60ce6020526000908152604090205481565b6102ed7f00000000000000000000000000000000000000000000000000000000005c490081565b6102b161069c366004613386565b60d060209081526000928352604080842090915290825290205460ff1681565b61033d6106ca3660046133cf565b61157f565b61033d6106dd366004613442565b6116c7565b6102ed6106f0366004613184565b6116d8565b6103f77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61033d61072a366004613120565b6117ba565b61039f611830565b61039f6107453660046131b5565b61186e565b61033d610758366004613184565b61187f565b60cb546103f7906001600160a01b031681565b61033d61077e3660046131ff565b6119db565b61078b611b5a565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087c919061345d565b6001600160a01b0316336001600160a01b0316146108b55760405162461bcd60e51b81526004016108ac9061347a565b60405180910390fd5b6108be81611bb4565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906134c4565b6109495760405162461bcd60e51b81526004016108ac906134e1565b606654818116146109c25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610a106020840184613120565b8360200135604051602001610a599392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610a9f5760405162461bcd60e51b81526004016108ac90613529565b33600090815260d1602052604090205460ff16610b3e5760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a4016108ac565b60026097541415610b615760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110610b8457610b84613597565b9050602002810190610b9691906135ad565b33600081815260ce60209081526040808320549051949550939192610bc192909185918791016136f2565b604051602081830303815290604052805190602001209050610be283611cab565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610c15908390613738565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610c5d908890613750565b60405180910390a4610c8f333060408601803590610c7e9060208901613120565b6001600160a01b0316929190612483565b5050508080610c9d90613763565b915050610b69565b505060016097555050565b60665460029060049081161415610cd95760405162461bcd60e51b81526004016108ac90613529565b60026097541415610cfc5760405162461bcd60e51b81526004016108ac90613560565b6002609755600060ca610d126020860186613313565b63ffffffff1681548110610d2857610d28613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091529050610d7a84826124f4565b6000610d8c6080860160608701613120565b6001600160a01b03808216600090815260cc60205260409020549192501680610db25750805b336001600160a01b03821614610e305760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d65720000000060648201526084016108ac565b60005b610e4060a088018861377e565b90508110156110575736610e5760e08901896137cf565b83818110610e6757610e67613597565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610e9c90850185613120565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610f565760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a4016108ac565b6000610f66826020850135613819565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610f949087613120565b6001600160a01b0316815260208082019290925260400160002091909155610fd6908a908390610fc690870187613120565b6001600160a01b0316919061279d565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061101a6020890189613120565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050808061104f90613763565b915050610e33565b505060016097555050505050565b6066546003906008908116141561108e5760405162461bcd60e51b81526004016108ac90613529565b60cb546001600160a01b031633146111055760405162461bcd60e51b815260206004820152603460248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6044820152733a103a3432903932bbb0b93239aab83230ba32b960611b60648201526084016108ac565b60cb5463ffffffff600160c01b9091048116908316116111a15760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a4016108ac565b428263ffffffff161061123a5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a4016108ac565b60ca5460cb5460009061125a90600160a01b900463ffffffff1642613830565b6040805160608101825287815263ffffffff878116602080840182815286841685870181815260ca805460018101825560009190915296517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029098029788015591517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee29096018054925196861667ffffffffffffffff19909316929092176401000000009686169690960295909517905560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b61136d611b5a565b6108be816127cd565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e291906134c4565b6113fe5760405162461bcd60e51b81526004016108ac906134e1565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60ca818154811061144d57600080fd5b60009182526020909120600290910201805460019091015490915063ffffffff8082169164010000000090041683565b60006114f38260ca6114926020830183613313565b63ffffffff16815481106114a8576114a8613597565b6000918252602091829020604080516060810182526002909302909101805483526001015463ffffffff808216948401949094526401000000009004909216918101919091526124f4565b506001919050565b611503611b5a565b61150d600061283e565b565b611517611b5a565b6108be81612890565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff161580801561159f5750600054600160ff909116105b806115b95750303b1580156115b9575060005460ff166001145b61161c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108ac565b6000805460ff19166001179055801561163f576000805461ff0019166101001790555b6116476128ec565b60c9556116548686612983565b61165d8761283e565b61166684612890565b61166f836127cd565b61167882612a6d565b80156116be576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6116cf611b5a565b6108be81612a6d565b60ca546000905b63ffffffff81161561174b578260ca6116f9600184613858565b63ffffffff168154811061170f5761170f613597565b906000526020600020906002020160000154141561173957611732600182613858565b9392505050565b806117438161387d565b9150506116df565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e6400000000000000000060648201526084016108ac565b6117c2611b5a565b6001600160a01b0381166118275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ac565b6108be8161283e565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415611861575060c95490565b6118696128ec565b905090565b60006001610a106020840184613120565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f6919061345d565b6001600160a01b0316336001600160a01b0316146119265760405162461bcd60e51b81526004016108ac9061347a565b6066541981196066541916146119a45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016108ac565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016109f5565b60665460009060019081161415611a045760405162461bcd60e51b81526004016108ac90613529565b60026097541415611a275760405162461bcd60e51b81526004016108ac90613560565b600260975560005b82811015610ca55736848483818110611a4a57611a4a613597565b9050602002810190611a5c91906135ad565b33600081815260ce60209081526040808320549051949550939192611a8792909185918791016136f2565b604051602081830303815290604052805190602001209050611aa883611cab565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611adb908390613738565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611b23908890613750565b60405180910390a4611b44333060408601803590610c7e9060208901613120565b5050508080611b5290613763565b915050611a2f565b6033546001600160a01b0316331461150d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ac565b6001600160a01b038116611c425760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016108ac565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611cb782806137cf565b905011611d1c576040805162461bcd60e51b81526020600482015260248101919091526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206e6f20737472617465676965732073657460648201526084016108ac565b6000816040013511611d8e5760405162461bcd60e51b815260206004820152604160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a4016108ac565b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611e065760405162461bcd60e51b815260206004820152603f60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c617267650060648201526084016108ac565b63ffffffff7f00000000000000000000000000000000000000000000000000000000005c490016611e3d60a0830160808401613313565b63ffffffff161115611ec25760405162461bcd60e51b815260206004820152605460248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611ef360a0830160808401613313565b611efd91906138b3565b63ffffffff1615611f9d5760405162461bcd60e51b815260206004820152606a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c4016108ac565b7f0000000000000000000000000000000000000000000000000000000000093a80611fce6080830160608401613313565b611fd891906138b3565b63ffffffff161561207e5760405162461bcd60e51b815260206004820152607060248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c4016108ac565b61208e6080820160608301613313565b63ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426120c69190613819565b1115801561210f57506120df6080820160608301613313565b63ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6121895760405162461bcd60e51b815260206004820152605160248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a4016108ac565b6121b963ffffffff7f0000000000000000000000000000000000000000000000000000000000278d001642613738565b6121c96080830160608401613313565b63ffffffff16111561224d5760405162461bcd60e51b815260206004820152605360248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a4016108ac565b6000805b61225b83806137cf565b905081101561247e57600061227084806137cf565b8381811061228057612280613597565b6122969260206040909202019081019150613120565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c99091169063663c1de490602401602060405180830381865afa158015612301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232591906134c4565b8061234c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6123bf5760405162461bcd60e51b815260206004820152604a60248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a4016108ac565b806001600160a01b0316836001600160a01b03161061246c5760405162461bcd60e51b815260206004820152606960248201526000805160206139b783398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c4016108ac565b915061247781613763565b9050612251565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526124ee9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ad8565b50505050565b806040015163ffffffff1642101561256d5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a206044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b60648201526084016108ac565b61257a60c083018361377e565b905061258960a084018461377e565b9050146126135760405162461bcd60e51b815260206004820152604c60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a4016108ac565b61262060e08301836137cf565b905061262f60c084018461377e565b9050146126b75760405162461bcd60e51b815260206004820152604a60248201527f52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2060448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a4016108ac565b80516126e3906126cd6040850160208601613313565b6126da60408601866138d6565b86606001612baa565b60005b6126f360a084018461377e565b905081101561247e5761278d608084013561271160a086018661377e565b8481811061272157612721613597565b90506020020160208101906127369190613313565b61274360c087018761377e565b8581811061275357612753613597565b905060200281019061276591906138d6565b61277260e08901896137cf565b8781811061278257612782613597565b905060400201612d1e565b61279681613763565b90506126e6565b6040516001600160a01b03831660248201526044810182905261247e90849063a9059cbb60e01b906064016124b7565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156129a457506001600160a01b03821615155b612a265760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016108ac565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612a6982611bb4565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6000612b2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e6f9092919063ffffffff16565b80519091501561247e5780806020019051810190612b4b91906134c4565b61247e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108ac565b612bb560208361391d565b6001901b8463ffffffff1610612c3f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a4016108ac565b6000612c4a82610a00565b9050612c9584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a4016108ac565b505050505050565b612d2960208361391d565b6001901b8463ffffffff1610612da75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e6465780000000060648201526084016108ac565b6000612db28261186e565b9050612dfd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916612e86565b612d165760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f660060648201526084016108ac565b6060612e7e8484600085612e9e565b949350505050565b600083612e94868585612fcf565b1495945050505050565b606082471015612eff5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108ac565b6001600160a01b0385163b612f565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108ac565b600080866001600160a01b03168587604051612f72919061395d565b60006040518083038185875af1925050503d8060008114612faf576040519150601f19603f3d011682016040523d82523d6000602084013e612fb4565b606091505b5091509150612fc48282866130d2565b979650505050505050565b600060208451612fdf919061396f565b156130665760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a4016108ac565b8260205b855181116130c95761307d60028561396f565b61309e578160005280860151602052604060002091506002840493506130b7565b8086015160005281602052604060002091506002840493505b6130c2602082613738565b905061306a565b50949350505050565b606083156130e1575081611732565b8251156130f15782518084602001fd5b8160405162461bcd60e51b81526004016108ac9190613983565b6001600160a01b03811681146108be57600080fd5b60006020828403121561313257600080fd5b81356117328161310b565b80151581146108be57600080fd5b6000806040838503121561315e57600080fd5b82356131698161310b565b915060208301356131798161313d565b809150509250929050565b60006020828403121561319657600080fd5b5035919050565b6000604082840312156131af57600080fd5b50919050565b6000604082840312156131c757600080fd5b611732838361319d565b600080604083850312156131e457600080fd5b82356131ef8161310b565b915060208301356131798161310b565b6000806020838503121561321257600080fd5b823567ffffffffffffffff8082111561322a57600080fd5b818501915085601f83011261323e57600080fd5b81358181111561324d57600080fd5b8660208260051b850101111561326257600080fd5b60209290920196919550909350505050565b600061010082840312156131af57600080fd5b6000806040838503121561329a57600080fd5b823567ffffffffffffffff8111156132b157600080fd5b6132bd85828601613274565b92505060208301356131798161310b565b803563ffffffff811681146132e257600080fd5b919050565b600080604083850312156132fa57600080fd5b8235915061330a602084016132ce565b90509250929050565b60006020828403121561332557600080fd5b611732826132ce565b60006020828403121561334057600080fd5b813560ff8116811461173257600080fd5b60006020828403121561336357600080fd5b813567ffffffffffffffff81111561337a57600080fd5b612e7e84828501613274565b6000806040838503121561339957600080fd5b82356133a48161310b565b946020939093013593505050565b80356132e28161310b565b803561ffff811681146132e257600080fd5b60008060008060008060c087890312156133e857600080fd5b86356133f38161310b565b955060208701356134038161310b565b945060408701359350606087013561341a8161310b565b9250613428608088016132ce565b915061343660a088016133bd565b90509295509295509295565b60006020828403121561345457600080fd5b611732826133bd565b60006020828403121561346f57600080fd5b81516117328161310b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156134d657600080fd5b81516117328161313d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008235609e198336030181126135c357600080fd5b9190910192915050565b818352600060208085019450826000805b868110156136325782356135f18161310b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461361a578384fd5b898601525060409788019792909201916001016135de565b50959695505050505050565b60008135601e1983360301811261365457600080fd5b8201803567ffffffffffffffff81111561366d57600080fd5b8060061b360384131561367f57600080fd5b60a0855261369460a0860182602085016135cd565b9150506136a3602084016133b2565b6001600160a01b03166020850152604083810135908501526136c7606084016132ce565b63ffffffff1660608501526136de608084016132ce565b63ffffffff81166080860152509392505050565b60018060a01b0384168152826020820152606060408201526000613719606083018461363e565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561374b5761374b613722565b500190565b602081526000611732602083018461363e565b600060001982141561377757613777613722565b5060010190565b6000808335601e1984360301811261379557600080fd5b83018035915067ffffffffffffffff8211156137b057600080fd5b6020019150600581901b36038213156137c857600080fd5b9250929050565b6000808335601e198436030181126137e657600080fd5b83018035915067ffffffffffffffff82111561380157600080fd5b6020019150600681901b36038213156137c857600080fd5b60008282101561382b5761382b613722565b500390565b600063ffffffff80831681851680830382111561384f5761384f613722565b01949350505050565b600063ffffffff8381169083168181101561387557613875613722565b039392505050565b600063ffffffff82168061389357613893613722565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806138ca576138ca61389d565b92169190910692915050565b6000808335601e198436030181126138ed57600080fd5b83018035915067ffffffffffffffff82111561390857600080fd5b6020019150368190038213156137c857600080fd5b60008261392c5761392c61389d565b500490565b60005b8381101561394c578181015183820152602001613934565b838111156124ee5750506000910152565b600082516135c3818460208701613931565b60008261397e5761397e61389d565b500690565b60208152600082518060208401526139a2816040850160208701613931565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212200d2a9250dcdf7eccff848dd9455a337efdd8ac02e415dd44de3502264f250c4964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e6102193660046129e8565b61057d565b005b61021e61022e366004612a05565b610639565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b366004612a34565b610778565b6102a77f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f4366004612b3d565b610a66565b61021e610a9e565b61032461030f366004612b76565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a3660046129e8565b60d16020526000908152604090205460ff1681565b61021e610b65565b61025a610375366004612b99565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a03660046129e8565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d33660046129e8565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc366004612bc7565b610b79565b6033546001600160a01b03166102a7565b6104256104203660046129e8565b610bd2565b604051610264929190612c08565b60cb546102a7906001600160a01b031681565b6103246104543660046129e8565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b61021e61049e366004612cd1565b610d52565b61021e6104b1366004612d13565b610ec6565b61021e6104c4366004612d64565b610f1a565b61021e6104d73660046129e8565b610fd2565b6102a76104ea366004612db7565b610fe3565b61021e6104fd366004612d13565b61101b565b61021e610510366004612de3565b61114f565b6102a77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61025a61054a366004612bc7565b611378565b61021e61055d3660046129e8565b611441565b61025a6114b7565b61021e610578366004612a05565b6114f5565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612e4f565b6001600160a01b0316336001600160a01b03161461062d5760405162461bcd60e51b815260040161062490612e6c565b60405180910390fd5b61063681611651565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190612eb6565b6106c15760405162461bcd60e51b815260040161062490612ed3565b6098548181161461073a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156107cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156108225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b60026065556001600160a01b038816600090815260d3602052604090205460ff16156108c95760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a401610624565b4284101561094b5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610624565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a036114b7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610a46888288611748565b610a52888c8c8c611907565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610a905760405162461bcd60e51b815260040161062490612f1b565b610a9a8282611ad6565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190612eb6565b610b265760405162461bcd60e51b815260040161062490612ed3565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610b6d611b44565b610b776000611b9e565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610bc15760405162461bcd60e51b815260040161062490612f85565b610bcc838383611bf0565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c0a57610c0a612a1e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b82811015610cc4576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610c7857610c78612fe3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610cb157610cb1612fe3565b6020908102919091010152600101610c39565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610d4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d22575b50505050509150935093505050915091565b60cb546001600160a01b03163314610d7c5760405162461bcd60e51b815260040161062490612f1b565b8060005b81811015610bcc5760d16000858584818110610d9e57610d9e612fe3565b9050602002016020810190610db391906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1615610ebe57600060d16000868685818110610ded57610ded612fe3565b9050602002016020810190610e0291906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610e5d57610e5d612fe3565b9050602002016020810190610e7291906129e8565b6040516001600160a01b03909116815260200160405180910390a1610ebe848483818110610ea257610ea2612fe3565b9050602002016020810190610eb791906129e8565b6000611ad6565b600101610d80565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f0e5760405162461bcd60e51b815260040161062490612f85565b610bcc84848484611d4c565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610f625760405162461bcd60e51b815260040161062490612f85565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b5050505050505050565b610fda611b44565b61063681611fd9565b60ce6020528160005260406000208181548110610fff57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff161580801561103b5750600054600160ff909116105b806110555750303b158015611055575060005460ff166001145b6110b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610624565b6000805460ff1916600117905580156110db576000805461ff0019166101001790555b6110e3612042565b60c9556110f083836120d9565b6110f985611b9e565b61110284611fd9565b8015611148576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146111795760405162461bcd60e51b815260040161062490612f1b565b8281146112025760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a401610624565b8260005b818110156113705760d1600087878481811061122457611224612fe3565b905060200201602081019061123991906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1661136857600160d1600088888581811061127257611272612fe3565b905060200201602081019061128791906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106112e2576112e2612fe3565b90506020020160208101906112f791906129e8565b6040516001600160a01b03909116815260200160405180910390a161136886868381811061132757611327612fe3565b905060200201602081019061133c91906129e8565b85858481811061134e5761134e612fe3565b90506020020160208101906113639190612ff9565b611ad6565b600101611206565b505050505050565b6098546000908190600190811614156113cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156114225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b600260655561143333868686611907565b600160655595945050505050565b611449611b44565b6001600160a01b0381166114ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610624565b61063681611b9e565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156114e8575060c95490565b6114f0612042565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190612e4f565b6001600160a01b0316336001600160a01b03161461159c5760405162461bcd60e51b815260040161062490612e6c565b60985419811960985419161461161a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161076d565b6001600160a01b0381166116df5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610624565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561186757604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90611788908690869060040161306e565b602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613087565b6001600160e01b031916146118625760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610624565b505050565b826001600160a01b031661187b83836121bf565b6001600160a01b0316146118625760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610624565b6001600160a01b038316600090815260d16020526040812054849060ff166119ad5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610624565b6119c26001600160a01b0385163387866121e3565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3591906130b1565b9150611a4386858785611d4c565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b158015611ab557600080fd5b505af1158015611ac9573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610b775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610624565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611c655760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610624565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611cf75760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610624565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611d3f57611d35858561223d565b6001915050611d45565b60009150505b9392505050565b6001600160a01b038416611dc85760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610624565b80611e345760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610624565b6001600160a01b03808516600090815260cd6020908152604080832093861683529290522054611f45576001600160a01b038416600090815260ce602090815260409091205410611f065760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610624565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081208054839290611f7c9084906130e0565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b03161580156120fa57506001600160a01b03821615155b61217c5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610a9a82611651565b60008060006121ce858561242f565b915091506121db8161249f565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610bcc90859061265a565b6001600160a01b038216600090815260ce6020526040812054905b81811015612358576001600160a01b03848116600090815260ce602052604090208054918516918390811061228f5761228f612fe3565b6000918252602090912001546001600160a01b03161415612350576001600160a01b038416600090815260ce6020526040902080546122d0906001906130f8565b815481106122e0576122e0612fe3565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061231d5761231d612fe3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612358565b600101612258565b818114156123e05760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610624565b6001600160a01b038416600090815260ce602052604090208054806124075761240761310f565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156124665760208301516040840151606085015160001a61245a8782858561272c565b94509450505050612498565b8251604014156124905760208301516040840151612485868383612819565b935093505050612498565b506000905060025b9250929050565b60008160048111156124b3576124b3613125565b14156124bc5750565b60018160048111156124d0576124d0613125565b141561251e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610624565b600281600481111561253257612532613125565b14156125805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610624565b600381600481111561259457612594613125565b14156125ed5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610624565b600481600481111561260157612601613125565b14156106365760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610624565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128529092919063ffffffff16565b80519091501561186257808060200190518101906126cd9190612eb6565b6118625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610624565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156127635750600090506003612810565b8460ff16601b1415801561277b57508460ff16601c14155b1561278c5750600090506004612810565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661280957600060019250925050612810565b9150600090505b94509492505050565b6000806001600160ff1b0383168161283660ff86901c601b6130e0565b90506128448782888561272c565b935093505050935093915050565b60606128618484600085612869565b949350505050565b6060824710156128ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610624565b6001600160a01b0385163b6129215760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610624565b600080866001600160a01b0316858760405161293d919061313b565b60006040518083038185875af1925050503d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b509150915061298f82828661299a565b979650505050505050565b606083156129a9575081611d45565b8251156129b95782518084602001fd5b8160405162461bcd60e51b81526004016106249190613157565b6001600160a01b038116811461063657600080fd5b6000602082840312156129fa57600080fd5b8135611d45816129d3565b600060208284031215612a1757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215612a4d57600080fd5b8635612a58816129d3565b95506020870135612a68816129d3565b9450604087013593506060870135612a7f816129d3565b92506080870135915060a087013567ffffffffffffffff80821115612aa357600080fd5b818901915089601f830112612ab757600080fd5b813581811115612ac957612ac9612a1e565b604051601f8201601f19908116603f01168101908382118183101715612af157612af1612a1e565b816040528281528c6020848701011115612b0a57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b801515811461063657600080fd5b60008060408385031215612b5057600080fd5b8235612b5b816129d3565b91506020830135612b6b81612b2f565b809150509250929050565b600060208284031215612b8857600080fd5b813560ff81168114611d4557600080fd5b60008060408385031215612bac57600080fd5b8235612bb7816129d3565b91506020830135612b6b816129d3565b600080600060608486031215612bdc57600080fd5b8335612be7816129d3565b92506020840135612bf7816129d3565b929592945050506040919091013590565b604080825283519082018190526000906020906060840190828701845b82811015612c4a5781516001600160a01b031684529284019290840190600101612c25565b5050508381038285015284518082528583019183019060005b81811015612c7f57835183529284019291840191600101612c63565b5090979650505050505050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b850101111561249857600080fd5b60008060208385031215612ce457600080fd5b823567ffffffffffffffff811115612cfb57600080fd5b612d0785828601612c8c565b90969095509350505050565b60008060008060808587031215612d2957600080fd5b8435612d34816129d3565b93506020850135612d44816129d3565b92506040850135612d54816129d3565b9396929550929360600135925050565b60008060008060808587031215612d7a57600080fd5b8435612d85816129d3565b93506020850135612d95816129d3565b9250604085013591506060850135612dac816129d3565b939692955090935050565b60008060408385031215612dca57600080fd5b8235612dd5816129d3565b946020939093013593505050565b60008060008060408587031215612df957600080fd5b843567ffffffffffffffff80821115612e1157600080fd5b612e1d88838901612c8c565b90965094506020870135915080821115612e3657600080fd5b50612e4387828801612c8c565b95989497509550505050565b600060208284031215612e6157600080fd5b8151611d45816129d3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612ec857600080fd5b8151611d4581612b2f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561300b57600080fd5b8135611d4581612b2f565b60005b83811015613031578181015183820152602001613019565b83811115610bcc5750506000910152565b6000815180845261305a816020860160208601613016565b601f01601f19169290920160200192915050565b8281526040602082015260006128616040830184613042565b60006020828403121561309957600080fd5b81516001600160e01b031981168114611d4557600080fd5b6000602082840312156130c357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156130f3576130f36130ca565b500190565b60008282101561310a5761310a6130ca565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161314d818460208701613016565b9190910192915050565b602081526000611d45602083018461304256fea264697066735822122078a77ee71704c26ce62db1149f0906c813c896ae6dd2117779e31e5f8a79defd64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x809d550fca64d94bd9f66e60752a544199cfac3d","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061012e5760003560e01c8063715018a6116100ab578063b57082301161006f578063b5708230146103cd578063bf322658146103ed578063c0c53b8b1461040d578063d3c7f8331461042d578063f2fde38b1461044d578063f83d08ba1461046d57600080fd5b8063715018a6146103055780638456cb591461031a5780638da5cb5b1461032f5780639907e0ab14610361578063a69df4b5146103b857600080fd5b80634d5431ea116100f25780634d5431ea1461026c5780634f1ef286146102a557806352d1902d146102b85780635a3f631a146102cd5780635c975abb146102e257600080fd5b806317d89c4e146101935780632df4e21e146101df5780632e1a7d4d146102155780633659cfe6146102375780633f4ba83a1461025757600080fd5b3661018e5733600090815260fd602052604081208054349290610152908490611e5d565b909155505060405134815233907f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7709060200160405180910390a2005b600080fd5b34801561019f57600080fd5b506101cc6101ae366004611e8a565b6001600160a01b0316600090815260fd602052604090206002015490565b6040519081526020015b60405180910390f35b3480156101eb57600080fd5b506101cc6101fa366004611e8a565b6001600160a01b0316600090815260fd602052604090205490565b34801561022157600080fd5b50610235610230366004611ea7565b610482565b005b34801561024357600080fd5b50610235610252366004611e8a565b6105f6565b34801561026357600080fd5b506102356106d6565b34801561027857600080fd5b506101cc610287366004611e8a565b6001600160a01b0316600090815260fd602052604090206001015490565b6102356102b3366004611ed6565b6106e8565b3480156102c457600080fd5b506101cc6107b9565b3480156102d957600080fd5b506101cc606481565b3480156102ee57600080fd5b5060655460ff1660405190151581526020016101d6565b34801561031157600080fd5b5061023561086c565b34801561032657600080fd5b5061023561087e565b34801561033b57600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101d6565b34801561036d57600080fd5b5061039d61037c366004611e8a565b60fd6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101d6565b3480156103c457600080fd5b5061023561088e565b3480156103d957600080fd5b5060fc54610349906001600160a01b031681565b3480156103f957600080fd5b50610235610408366004611fdf565b61094f565b34801561041957600080fd5b506102356104283660046120c3565b610d24565b34801561043957600080fd5b5060fb54610349906001600160a01b031681565b34801561045957600080fd5b50610235610468366004611e8a565b610e79565b34801561047957600080fd5b50610235610eef565b61048a610f90565b33600090815260fd6020526040902080548211156104ef5760405162461bcd60e51b815260206004820152601e60248201527f50617965722068617320696e73756666696369656e742062616c616e6365000060448201526064015b60405180910390fd5b600181015415801590610506575043816001015411155b6105455760405162461bcd60e51b815260206004820152601060248201526f119d5b991cc8185c99481b1bd8dad95960821b60448201526064016104e6565b81816000016000828254610559919061210e565b909155505060006001820181905560405133917fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd91a2604051339083156108fc029084906000818181858888f193505050501580156105bc573d6000803e3d6000fd5b5060405182815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a25050565b306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316141561063f5760405162461bcd60e51b81526004016104e690612125565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b0316610688600080516020612459833981519152546001600160a01b031690565b6001600160a01b0316146106ae5760405162461bcd60e51b81526004016104e690612171565b6106b781610fd6565b604080516000808252602082019092526106d391839190610fde565b50565b6106de61114e565b6106e66111a8565b565b306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba31614156107315760405162461bcd60e51b81526004016104e690612125565b7f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba36001600160a01b031661077a600080516020612459833981519152546001600160a01b031690565b6001600160a01b0316146107a05760405162461bcd60e51b81526004016104e690612171565b6107a982610fd6565b6107b582826001610fde565b5050565b6000306001600160a01b037f0000000000000000000000002bdcc0de6be1f7d2ee689a0342d76f52e8efaba316146108595760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104e6565b5060008051602061245983398151915290565b61087461114e565b6106e660006111fa565b61088661114e565b6106e661124c565b610896610f90565b33600090815260fd60205260409020546108f25760405162461bcd60e51b815260206004820152601b60248201527f5573657220686173206e6f2066756e647320746f20756e6c6f636b000000000060448201526064016104e6565b6108fd606443611e5d565b33600081815260fd6020526040908190206001018390555190917f43e8fb9d4f009c90c55a3fa108b177b794704d61af7af6f6512db7883f8ed8439161094591815260200190565b60405180910390a2565b60fb546001600160a01b031633146109b55760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920426174636865722063616e2063616c6c20746869732066756e637460448201526234b7b760e91b60648201526084016104e6565b6109bd610f90565b848360006109cb3a866121bd565b905060006109d93a866121bd565b905060008411610a215760405162461bcd60e51b8152602060048201526013602482015272139bc81b19585d995cc81cdd589b5a5d1d1959606a1b60448201526064016104e6565b60008311610a715760405162461bcd60e51b815260206004820152601d60248201527f4e6f2070726f6f66207375626d6974746572207369676e61747572657300000060448201526064016104e6565b82841015610ab55760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f756768206c656176657360781b60448201526064016104e6565b610ac060018561210e565b841615610b195760405162461bcd60e51b815260206004820152602160248201527f4c6561766573206c656e677468206973206e6f74206120706f776572206f66206044820152601960f91b60648201526084016104e6565b60008211610b615760405162461bcd60e51b815260206004820152601560248201527427379033b0b9903337b91030b3b3b932b3b0ba37b960591b60448201526064016104e6565b60008111610ba45760405162461bcd60e51b815260206004820152601060248201526f27379033b0b9903832b910383937b7b360811b60448201526064016104e6565b81610baf84836121bd565b11610c085760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f7567682067617320746f20706179207468652061676772656760448201526330ba37b960e11b60648201526084016104e6565b610c168a8a8f8b8b86611289565b60fc60009054906101000a90046001600160a01b03166001600160a01b0316635c008994838f8f8f6040518563ffffffff1660e01b8152600401610c5c93929190612205565b6000604051808303818588803b158015610c7557600080fd5b505af1158015610c89573d6000803e3d6000fd5b50505050508c7f42e8b4c4d2caef98adf791972bad42982fe6df907c366fc36f9e0e1e2d29de4e8d8d604051610cc092919061221f565b60405180910390a260fb546001600160a01b03166108fc83610ce286856121bd565b610cec919061210e565b6040518115909202916000818181858888f19350505050158015610d14573d6000803e3d6000fd5b5050505050505050505050505050565b600054610100900460ff1615808015610d445750600054600160ff909116105b80610d5e5750303b158015610d5e575060005460ff166001145b610dc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104e6565b6000805460ff191660011790558015610de4576000805461ff0019166101001790555b610dec611616565b610df4611645565b610dfd836111fa565b60fc80546001600160a01b038087166001600160a01b03199283161790925560fb8054928516929091169190911790558015610e73576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610e8161114e565b6001600160a01b038116610ee65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e6565b6106d3816111fa565b610ef7610f90565b33600090815260fd6020526040902054610f535760405162461bcd60e51b815260206004820152601960248201527f5573657220686173206e6f2066756e647320746f206c6f636b0000000000000060448201526064016104e6565b33600081815260fd6020526040808220600101829055517fc5f84593e7086c66a205abab7ee44e1a8e6db58e50bf18ca46cb8239118b5ecd9190a2565b60655460ff16156106e65760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e6565b6106d361114e565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611016576110118361166c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611070575060408051601f3d908101601f1916820190925261106d9181019061223b565b60015b6110d35760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104e6565b60008051602061245983398151915281146111425760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104e6565b50611011838383611708565b6033546001600160a01b031633146106e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e6565b6111b061172d565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611254610f90565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111dd3390565b6000611296600287612254565b905060008167ffffffffffffffff8111156112b3576112b3611ec0565b6040519080825280602002602001820160405280156112dc578160200160208202803683370190505b50905060005b828163ffffffff1610156114075788886112fd836002612276565b63ffffffff16818110611312576113126122a2565b9050602002013589898360026113289190612276565b6113339060016122b8565b63ffffffff16818110611348576113486122a2565b90506020020135604051602001611369929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611397576113976122a2565b6020026020010181815250506113f589898363ffffffff168181106113be576113be6122a2565b9050602002013587878463ffffffff168181106113dd576113dd6122a2565b90506020028101906113ef91906122e0565b86611776565b806113ff81612300565b9150506112e2565b63ffffffff81168511156114425761143089898363ffffffff168181106113be576113be6122a2565b8061143a81612300565b915050611407565b61144d600284612254565b92505b8215611540575060005b828163ffffffff16101561152e5781611474826002612276565b63ffffffff168151811061148a5761148a6122a2565b6020026020010151828260026114a09190612276565b6114ab9060016122b8565b63ffffffff16815181106114c1576114c16122a2565b60200260200101516040516020016114e3929190918252602082015260400190565b60405160208183030381529060405280519060200120828263ffffffff1681518110611511576115116122a2565b60209081029190910101528061152681612300565b91505061145a565b611539600284612254565b9250611450565b60018814156115ac57868989600081811061155d5761155d6122a2565b90506020020135146115a75760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b60448201526064016104e6565b61160b565b86826000815181106115c0576115c06122a2565b60200260200101511461160b5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b595c9adb19481c9bdbdd606a1b60448201526064016104e6565b505050505050505050565b600054610100900460ff1661163d5760405162461bcd60e51b81526004016104e690612324565b6106e661192e565b600054610100900460ff166106e65760405162461bcd60e51b81526004016104e690612324565b6001600160a01b0381163b6116d95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104e6565b60008051602061245983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6117118361195e565b60008251118061171e5750805b1561101157610e73838361199e565b60655460ff166106e65760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e6565b604080516020808201869052848101358284015246606080840191909152835180840390910181526080909201909252805191012060006117f76117ba858061236f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611a929050565b90506001600160a01b0381166118435760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104e6565b6001600160a01b038116600090815260fd6020908152604090912060028101549091860135146118a55760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964204e6f6e636560981b60448201526064016104e6565b6002810180549060006118b7836123b6565b9091555050805484111561190d5760405162461bcd60e51b815260206004820152601f60248201527f5369676e65722068617320696e73756666696369656e742062616c616e63650060448201526064016104e6565b83816000016000828254611921919061210e565b9091555050505050505050565b600054610100900460ff166119555760405162461bcd60e51b81526004016104e690612324565b6106e6336111fa565b6119678161166c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611a065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104e6565b600080846001600160a01b031684604051611a2191906123fd565b600060405180830381855af49150503d8060008114611a5c576040519150601f19603f3d011682016040523d82523d6000602084013e611a61565b606091505b5091509150611a89828260405180606001604052806027815260200161247960279139611ab6565b95945050505050565b6000806000611aa18585611af6565b91509150611aae81611b66565b509392505050565b60608315611ac5575081611aef565b825115611ad55782518084602001fd5b8160405162461bcd60e51b81526004016104e6919061240f565b9392505050565b600080825160411415611b2d5760208301516040840151606085015160001a611b2187828585611d21565b94509450505050611b5f565b825160401415611b575760208301516040840151611b4c868383611e0e565b935093505050611b5f565b506000905060025b9250929050565b6000816004811115611b7a57611b7a612442565b1415611b835750565b6001816004811115611b9757611b97612442565b1415611be55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104e6565b6002816004811115611bf957611bf9612442565b1415611c475760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104e6565b6003816004811115611c5b57611c5b612442565b1415611cb45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104e6565b6004816004811115611cc857611cc8612442565b14156106d35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104e6565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611d585750600090506003611e05565b8460ff16601b14158015611d7057508460ff16601c14155b15611d815750600090506004611e05565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611dd5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611dfe57600060019250925050611e05565b9150600090505b94509492505050565b6000806001600160ff1b03831681611e2b60ff86901c601b611e5d565b9050611e3987828885611d21565b935093505050935093915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611e7057611e70611e47565b500190565b6001600160a01b03811681146106d357600080fd5b600060208284031215611e9c57600080fd5b8135611aef81611e75565b600060208284031215611eb957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ee957600080fd5b8235611ef481611e75565b9150602083013567ffffffffffffffff80821115611f1157600080fd5b818501915085601f830112611f2557600080fd5b813581811115611f3757611f37611ec0565b604051601f8201601f19908116603f01168101908382118183101715611f5f57611f5f611ec0565b81604052828152886020848701011115611f7857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f840112611fac57600080fd5b50813567ffffffffffffffff811115611fc457600080fd5b6020830191508360208260051b8501011115611b5f57600080fd5b600080600080600080600080600060c08a8c031215611ffd57600080fd5b8935985060208a013567ffffffffffffffff8082111561201c57600080fd5b818c0191508c601f83011261203057600080fd5b81358181111561203f57600080fd5b8d602082850101111561205157600080fd5b602083019a508099505060408c013591508082111561206f57600080fd5b61207b8d838e01611f9a565b909850965060608c013591508082111561209457600080fd5b506120a18c828d01611f9a565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b6000806000606084860312156120d857600080fd5b83356120e381611e75565b925060208401356120f381611e75565b9150604084013561210381611e75565b809150509250925092565b60008282101561212057612120611e47565b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60008160001904831182151516156121d7576121d7611e47565b500290565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000611a896040830184866121dc565b6020815260006122336020830184866121dc565b949350505050565b60006020828403121561224d57600080fd5b5051919050565b60008261227157634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561229957612299611e47565b02949350505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168185168083038211156122d7576122d7611e47565b01949350505050565b60008235603e198336030181126122f657600080fd5b9190910192915050565b600063ffffffff8083168181141561231a5761231a611e47565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e1984360301811261238657600080fd5b83018035915067ffffffffffffffff8211156123a157600080fd5b602001915036819003821315611b5f57600080fd5b60006000198214156123ca576123ca611e47565b5060010190565b60005b838110156123ec5781810151838201526020016123d4565b83811115610e735750506000910152565b600082516122f68184602087016123d1565b602081526000825180602084015261242e8160408501602087016123d1565b601f01601f19169190910160400192915050565b634e487b7160e01b600052602160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f017ddf418294df667ce25f9726ea8f16136558826945004552399a397f7801564736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103265760003560e01c80635b0b829f116101b85780639e9923c211610104578063d72d8dd6116100a2578063e65797ad1161007c578063e65797ad1461083b578063f2fde38b146108de578063fabc1cbc146108f1578063fd39105a1461090457600080fd5b8063d72d8dd61461080d578063d75b4c8814610815578063dd8283f31461082857600080fd5b8063a96f783e116100de578063a96f783e146107aa578063c391425e146107b3578063ca0de882146107d3578063ca4f2d97146107fa57600080fd5b80639e9923c2146107495780639feab85914610770578063a50857bf1461079757600080fd5b8063715018a611610171578063886f11951161014b578063886f1195146106f65780638da5cb5b1461070f5780639aa1653d146107175780639b5d177b1461073657600080fd5b8063715018a6146106c857806384ca5213146106d0578063871ef049146106e357600080fd5b80635b0b829f146106395780635c975abb1461064c5780635df45946146106545780636347c9001461067b578063683048351461068e5780636e3b17db146106b557600080fd5b8063249a0c42116102775780633998fdd3116102305780635140a5481161020a5780635140a548146105df5780635865c60c146105f2578063595c6a67146106125780635ac86ab71461061a57600080fd5b80633998fdd31461056c5780633af32abf146105935780633c2a7f4c146105bf57600080fd5b8063249a0c42146104ed57806328f61b311461050d57806329092d0e14610520578063296bb0641461053357806329d1e0c3146105465780632cdd1e861461055957600080fd5b80630d3f2134116102e457806313542a4e116102be57806313542a4e14610435578063136439dd1461045e5780631478851f146104715780631eb812da146104a457600080fd5b80630d3f2134146103ef57806310d67a2f14610402578063125e05841461041557600080fd5b8062cf2ab51461032b57806303fd34921461034057806304ec635114610373578063054310e61461039e5780630a3b0a4f146103c95780630cf4b767146103dc575b600080fd5b61033e610339366004614429565b610940565b005b61036061034e36600461446a565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b610386610381366004614495565b610a56565b6040516001600160c01b03909116815260200161036a565b609d546103b1906001600160a01b031681565b6040516001600160a01b03909116815260200161036a565b61033e6103d73660046144f2565b610b66565b61033e6103ea3660046145f6565b610b92565b61033e6103fd36600461446a565b610c3c565b61033e6104103660046144f2565b610c49565b6103606104233660046144f2565b609f6020526000908152604090205481565b6103606104433660046144f2565b6001600160a01b031660009081526099602052604090205490565b61033e61046c36600461446a565b610cfc565b61049461047f36600461446a565b609a6020526000908152604090205460ff1681565b604051901515815260200161036a565b6104b76104b2366004614646565b610e39565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b03169082015260600161036a565b6103606104fb366004614679565b609b6020526000908152604090205481565b609e546103b1906001600160a01b031681565b61033e61052e3660046144f2565b610eca565b6103b161054136600461446a565b610ef3565b61033e6105543660046144f2565b610f7f565b61033e6105673660046144f2565b610f90565b6103b17f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e881565b6104946105a13660046144f2565b6001600160a01b0316600090815260c8602052604090205460ff1690565b6105d26105cd3660046144f2565b610fa1565b60405161036a9190614694565b61033e6105ed3660046146ec565b611020565b6106056106003660046144f2565b611406565b60405161036a919061478f565b61033e61147a565b610494610628366004614679565b6001805460ff9092161b9081161490565b61033e610647366004614814565b611546565b600154610360565b6103b17f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6103b161068936600461446a565b6115a0565b6103b17f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b61033e6106c3366004614848565b6115ca565b61033e61171f565b6103606106de3660046148ff565b611733565b6103866106f136600461446a565b61177d565b6000546103b1906201000090046001600160a01b031681565b6103b1611788565b6096546107249060ff1681565b60405160ff909116815260200161036a565b61033e610744366004614a98565b6117a1565b6103b17f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3681565b6103607f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b61033e6107a5366004614b91565b611abb565b61036060a05481565b6107c66107c1366004614c39565b611c21565b60405161036a9190614cde565b6103607f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b61033e610808366004614d28565b611cda565b609c54610360565b61033e610823366004614e0e565b611d41565b61033e610836366004614fc1565b611d54565b6108aa610849366004614679565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff90811691830191909152928201519092169082015260600161036a565b61033e6108ec3660046144f2565b61201e565b61033e6108ff36600461446a565b612094565b6109336109123660046144f2565b6001600160a01b031660009081526099602052604090206001015460ff1690565b60405161036a9190615095565b600154600290600490811614156109725760405162461bcd60e51b8152600401610969906150a3565b60405180910390fd5b60005b82811015610a50576000848483818110610991576109916150da565b90506020020160208101906109a691906144f2565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156109f1576109f1614757565b6002811115610a0257610a02614757565b90525080519091506000610a15826121f0565b90506000610a2b826001600160c01b0316612259565b9050610a38858583612325565b50505050508080610a4890615106565b915050610975565b50505050565b6000838152609860205260408120805482919084908110610a7957610a796150da565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610aff5760405162461bcd60e51b8152602060048201526003602482015262189b8f60ea1b6044820152606401610969565b602081015163ffffffff161580610b255750806020015163ffffffff168463ffffffff16105b610b5a5760405162461bcd60e51b81526004016109699060208082526004908201526331371e1960e11b604082015260600190565b60400151949350505050565b610b6e612412565b6001600160a01b0316600090815260c860205260409020805460ff19166001179055565b60013360009081526099602052604090206001015460ff166002811115610bbb57610bbb614757565b14610bf05760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610969565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c3190849061516e565b60405180910390a250565b610c44612412565b60a055565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190615181565b6001600160a01b0316336001600160a01b031614610cf05760405162461bcd60e51b81526004016109699061519e565b610cf981612471565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d91906151e8565b610d895760405162461bcd60e51b81526004016109699061520a565b60015481811614610e025760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610969565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c31565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e7657610e766150da565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b610ed2612412565b6001600160a01b0316600090815260c860205260409020805460ff19169055565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b0316906347b314e890602401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615181565b610f87612412565b610cf981612576565b610f98612412565b610cf9816125df565b6040805180820190915260008082526020820152610ec461101b7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de6846040516020016110009291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612648565b612696565b600154600290600490811614156110495760405162461bcd60e51b8152600401610969906150a3565b600061109184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506127269050565b90508483146110cb5760405162461bcd60e51b81526020600482015260066024820152653931a8a632b760d11b6044820152606401610969565b60005b838110156113fd5760008585838181106110ea576110ea6150da565b919091013560f81c9150369050600089898581811061110b5761110b6150da565b905060200281019061111d9190615252565b6040516379a0849160e11b815260ff8616600482015291935091507f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b03169063f341092290602401602060405180830381865afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061529b565b63ffffffff1681146111ec5760405162461bcd60e51b81526020600482015260086024820152673931a8a7b82632b760c11b6044820152606401610969565b6000805b8281101561139c57600084848381811061120c5761120c6150da565b905060200201602081019061122191906144f2565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561126c5761126c614757565b600281111561127d5761127d614757565b90525080519091506000611290826121f0565b905060016001600160c01b03821660ff8b161c8116146112dd5760405162461bcd60e51b815260206004820152600860248201526772634f702152656760c01b6044820152606401610969565b856001600160a01b0316846001600160a01b0316116113285760405162461bcd60e51b8152602060048201526007602482015266072634475704f760cc1b6044820152606401610969565b5061138683838f8f8d908e600161133f91906152b8565b9261134c939291906152d0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061232592505050565b50909250611395905081615106565b90506111f0565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a250505050806113f690615106565b90506110ce565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561146057611460614757565b600281111561147157611471614757565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb91906151e8565b6115075760405162461bcd60e51b81526004016109699061520a565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61154e612412565b609654829060ff908116908216106115915760405162461bcd60e51b815260206004820152600660248201526552433a71214560d01b6044820152606401610969565b61159b83836127b7565b505050565b609c81815481106115b057600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146116115760405162461bcd60e51b815260206004820152600a602482015269292190b2b532b1ba37b960b11b6044820152606401610969565b6001600160a01b0383166000908152609f602090815260408083204290556099825280832080548251601f870185900485028101850190935285835290939092909161167e9187908790819084018382808284376000920191909152505060965460ff1691506127269050565b9050600061168b836121f0565b905060018085015460ff1660028111156116a7576116a7614757565b1480156116bc57506001600160c01b03821615155b80156116da57506116da6001600160c01b0383811690831681161490565b156113fd576113fd8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b611727612412565b6117316000612bec565b565b60006117737f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001611000969594939291906152fa565b9695505050505050565b6000610ec4826121f0565b600061179c6064546001600160a01b031690565b905090565b6001805460009190811614156117c95760405162461bcd60e51b8152600401610969906150a3565b33600090815260c8602052604090205460ff1661181a5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610969565b8389146118525760405162461bcd60e51b81526004016109699060208082526004908201526338a632b760e11b604082015260600190565b600061185e3388612c3e565b90506118be33828888808060200260200160405190810160405280939291908181526020016000905b828210156118b3576118a46040830286013681900381019061537f565b81526020019060010190611887565b505050505087612d6f565b600061190533838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e4b915050565b90506000609760008e8e6000818110611920576119206150da565b919091013560f81c825250602080820192909252604090810160009081208251606081018452905463ffffffff811680835261ffff600160201b8304811696840196909652600160301b90910490941692810192909252845180519294509161198b5761198b6150da565b602002602001015163ffffffff161115611aac57611a308d8d60008181106119b5576119b56150da565b9050013560f81c60f81b60f81c83604001516000815181106119d9576119d96150da565b60200260200101513385602001516000815181106119f9576119f96150da565b60200260200101518c8c6000818110611a1457611a146150da565b905060400201803603810190611a2a919061537f565b8661330f565b611aac88886000818110611a4657611a466150da565b9050604002016020016020810190611a5e91906144f2565b8e8e600090600192611a72939291906152d0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b50505050505050505050505050565b600180546000919081161415611ae35760405162461bcd60e51b8152600401610969906150a3565b33600090815260c8602052604090205460ff16611b345760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610969565b6000611b403385612c3e565b90506000611b8933838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250612e4b915050565b51600080805260976020527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c754825192935063ffffffff1691839190611bd157611bd16150da565b602002602001015163ffffffff161115611c165760405162461bcd60e51b81526020600482015260066024820152650714d61784f760d41b6044820152606401610969565b505050505050505050565b6060600082516001600160401b03811115611c3e57611c3e61450f565b604051908082528060200260200182016040528015611c67578160200160208202803683370190505b50905060005b8351811015611cd257611c9985858381518110611c8c57611c8c6150da565b60200260200101516134df565b828281518110611cab57611cab6150da565b63ffffffff9092166020928302919091019091015280611cca81615106565b915050611c6d565b509392505050565b6001805460029081161415611d015760405162461bcd60e51b8152600401610969906150a3565b61159b3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061286492505050565b611d49612412565b61159b8383836135a2565b600054610100900460ff1615808015611d745750600054600160ff909116105b80611d8e5750303b158015611d8e575060005460ff166001145b611df15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610969565b6000805460ff191660011790558015611e14576000805461ff0019166101001790555b82518451148015611e26575081518351145b611e575760405162461bcd60e51b8152602060048201526002602482015261494560f01b6044820152606401610969565b611e6089612bec565b611e6a8686613784565b611e7388612576565b611e7c876125df565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881166001600160a01b03199283161790925585548085018755850180547f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e841690831617905585549384019095559190920180547f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3690921691909316179091555b8451811015611fcd57611fbb858281518110611f7a57611f7a6150da565b6020026020010151858381518110611f9457611f946150da565b6020026020010151858481518110611fae57611fae6150da565b60200260200101516135a2565b80611fc581615106565b915050611f5c565b508015611c16576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b612026612412565b6001600160a01b03811661208b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b610cf981612bec565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210b9190615181565b6001600160a01b0316336001600160a01b03161461213b5760405162461bcd60e51b81526004016109699061519e565b6001541981196001541916146121b95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610969565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c31565b6000818152609860205260408120548061220d5750600092915050565b600083815260986020526040902061222660018361539b565b81548110612236576122366150da565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061226784613874565b61ffff166001600160401b038111156122825761228261450f565b6040519080825280601f01601f1916602001820160405280156122ac576020820181803683370190505b5090506000805b8251821080156122c4575061010081105b1561231b576001811b93508584161561230b578060f81b8383815181106122ed576122ed6150da565b60200101906001600160f81b031916908160001a9053508160010191505b61231481615106565b90506122b3565b5090949350505050565b60018260200151600281111561233d5761233d614757565b1461234757505050565b81516040516333567f7f60e11b81526000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816906366acfefe9061239c908890869088906004016153b2565b6020604051808303816000875af11580156123bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123df91906153e2565b90506001600160c01b0381161561240b5761240b85612406836001600160c01b0316612259565b612864565b5050505050565b3361241b611788565b6001600160a01b0316146117315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610969565b6001600160a01b0381166124ff5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610969565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ec461265561389f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806126c66000805160206158a283398151915286615421565b90505b6126d2816139c6565b90935091506000805160206158a283398151915282830983141561270c576040805180820190915290815260208101919091529392505050565b6000805160206158a28339815191526001820890506126c9565b60008061273284613a48565b9050808360ff166001901b116127b05760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610969565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561289857612898614757565b146128cd5760405162461bcd60e51b81526020600482015260056024820152646f2152656760d81b6044820152606401610969565b6096546000906128e190859060ff16612726565b905060006128ee836121f0565b90506001600160c01b03821661292f5760405162461bcd60e51b815260040161096990602080825260049082015263071456d760e41b604082015260600190565b6129466001600160c01b0383811690831681161490565b61297b5760405162461bcd60e51b81526004016109699060208082526004908201526310a9bab160e11b604082015260600190565b6001600160c01b03828116198216166129948482613bd5565b6001600160c01b038116612a635760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169063a364f4da90602401600060405180830381600087803b158015612a1457600080fd5b505af1158015612a28573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e169063f4e24fe590612ab1908a908a90600401615435565b600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063bd29b8cd9150612b319087908a90600401615459565b600060405180830381600087803b158015612b4b57600080fd5b505af1158015612b5f573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3616925063bd29b8cd9150612bb19087908a90600401615459565b600060405180830381600087803b158015612bcb57600080fd5b505af1158015612bdf573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e909116906313542a4e90602401602060405180830381865afa158015612ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccd9190615472565b905080610ec4577f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031663bf79ce588484612d0e87610fa1565b6040518463ffffffff1660e01b8152600401612d2c9392919061548b565b6020604051808303816000875af1158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615472565b6020808201516000908152609a909152604090205460ff1615612dbd5760405162461bcd60e51b815260206004820152600660248201526518da14d85b1d60d21b6044820152606401610969565b4281604001511015612df95760405162461bcd60e51b8152602060048201526005602482015264063684578760dc1b6044820152606401610969565b602080820180516000908152609a909252604091829020805460ff19166001179055609d54905191830151610a50926001600160a01b0390921691612e449188918891889190611733565b8351613d95565b612e6f60405180606001604052806060815260200160608152602001606081525090565b6000612eb786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506127269050565b90506000612ec4886121f0565b90506001600160c01b038216612f055760405162461bcd60e51b815260040161096990602080825260049082015263071456d760e41b604082015260600190565b8082166001600160c01b031615612f475760405162461bcd60e51b81526004016109699060208082526004908201526308509a5d60e21b604082015260600190565b60a0546001600160a01b038a166000908152609f60205260409020546001600160c01b0383811690851617914291612f7f91906152b8565b10612fb45760405162461bcd60e51b815260206004820152600560248201526410b7b822b560d91b6044820152606401610969565b612fbe8982613bd5565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051612fee919061516e565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561302857613028614757565b14613141576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561308357613083614757565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e8169150639926ee7d906130d8908d90899060040161550a565b600060405180830381600087803b1580156130f257600080fd5b505af1158015613106573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e1690633fb2795290613191908d908c908c9060040161557e565b600060405180830381600087803b1580156131ab57600080fd5b505af11580156131bf573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063255047779150613215908d908d908d908d906004016155a3565b6000604051808303816000875af1158015613234573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261325c919081019061562f565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36169062bff04d906132b9908c908c908c90600401615692565b6000604051808303816000875af11580156132d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261330091908101906156ac565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156133695760405162461bcd60e51b815260206004820152600360248201526206368360ec1b6044820152606401610969565b8760ff16846000015160ff16146133a85760405162461bcd60e51b815260206004820152600360248201526263683160e81b6044820152606401610969565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690635401ed2790604401602060405180830381865afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190615745565b90506134498185613f4f565b6001600160601b0316866001600160601b03161161348f5760405162461bcd60e51b815260206004820152600360248201526231b41960e91b6044820152606401610969565b6134998885613f73565b6001600160601b0316816001600160601b031610611c165760405162461bcd60e51b815260206004820152600360248201526263683360e81b6044820152606401610969565b600081815260986020526040812054815b81811015613571576001613504828461539b565b61350e919061539b565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110613541576135416150da565b60009182526020909120015463ffffffff161161355f575050610ec4565b8061356981615106565b9150506134f0565b5060405162461bcd60e51b81526020600482015260056024820152644f2152656760d81b6044820152606401610969565b60965460ff1660c081106135e15760405162461bcd60e51b8152600401610969906020808252600490820152630e29ac2f60e31b604082015260600190565b6135ec816001615762565b6096805460ff191660ff929092169190911790558061360b81866127b7565b60405160016296b58960e01b031981526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778169063ff694a779061365e90849088908890600401615787565b600060405180830381600087803b15801561367857600080fd5b505af115801561368c573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b031692506326d941f29150602401600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031692506326d941f29150602401600060405180830381600087803b15801561377057600080fd5b505af1158015611c16573d6000803e3d6000fd5b6000546201000090046001600160a01b03161580156137ab57506001600160a01b03821615155b61382d5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610969565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261387082612471565b5050565b6000805b8215610ec45761388960018461539b565b909216918061389781615800565b915050613878565b6000306001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd00161480156138f857507f0000000000000000000000000000000000000000000000000000000000007a6946145b1561392257507fc6374306ca0c3d05fd3f0cebbec8fc4308f71679c06b0e30a95d8c9709d43dae90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600080806000805160206158a283398151915260036000805160206158a2833981519152866000805160206158a2833981519152888909090890506000613a3c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206158a2833981519152613f8d565b91959194509092505050565b600061010082511115613ad15760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610969565b8151613adf57506000919050565b60008083600081518110613af557613af56150da565b0160200151600160f89190911c81901b92505b8451811015613bcc57848181518110613b2357613b236150da565b0160200151600160f89190911c1b9150828211613bb85760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610969565b91811791613bc581615106565b9050613b08565b50909392505050565b60008281526098602052604090205480613c7a576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b6000838152609860205260408120613c9360018461539b565b81548110613ca357613ca36150da565b600091825260209091200180549091504363ffffffff90811691161415613ce75780546001600160401b0316600160401b6001600160c01b03851602178155610a50565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b15613eaf57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90613dd59086908690600401615459565b602060405180830381865afa158015613df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e169190615822565b6001600160e01b0319161461159b5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610969565b826001600160a01b0316613ec3838361403c565b6001600160a01b03161461159b5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610969565b602081015160009061271090613f699061ffff168561584c565b6127b0919061587b565b604081015160009061271090613f699061ffff168561584c565b600080613f986143a9565b613fa06143c7565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015613fe157613fe3565bfe5b50826140315760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610969565b505195945050505050565b600080600061404b8585614058565b91509150611cd2816140c8565b60008082516041141561408f5760208301516040840151606085015160001a61408387828585614283565b945094505050506140c1565b8251604014156140b957602083015160408401516140ae868383614370565b9350935050506140c1565b506000905060025b9250929050565b60008160048111156140dc576140dc614757565b14156140e55750565b60018160048111156140f9576140f9614757565b14156141475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610969565b600281600481111561415b5761415b614757565b14156141a95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610969565b60038160048111156141bd576141bd614757565b14156142165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610969565b600481600481111561422a5761422a614757565b1415610cf95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610969565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156142ba5750600090506003614367565b8460ff16601b141580156142d257508460ff16601c14155b156142e35750600090506004614367565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614337573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661436057600060019250925050614367565b9150600090505b94509492505050565b6000806001600160ff1b0383168161438d60ff86901c601b6152b8565b905061439b87828885614283565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126143f757600080fd5b5081356001600160401b0381111561440e57600080fd5b6020830191508360208260051b85010111156140c157600080fd5b6000806020838503121561443c57600080fd5b82356001600160401b0381111561445257600080fd5b61445e858286016143e5565b90969095509350505050565b60006020828403121561447c57600080fd5b5035919050565b63ffffffff81168114610cf957600080fd5b6000806000606084860312156144aa57600080fd5b8335925060208401356144bc81614483565b929592945050506040919091013590565b6001600160a01b0381168114610cf957600080fd5b80356144ed816144cd565b919050565b60006020828403121561450457600080fd5b81356127b0816144cd565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156145475761454761450f565b60405290565b604080519081016001600160401b03811182821017156145475761454761450f565b604051601f8201601f191681016001600160401b03811182821017156145975761459761450f565b604052919050565b60006001600160401b038311156145b8576145b861450f565b6145cb601f8401601f191660200161456f565b90508281528383830111156145df57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561460857600080fd5b81356001600160401b0381111561461e57600080fd5b8201601f8101841361462f57600080fd5b61463e8482356020840161459f565b949350505050565b6000806040838503121561465957600080fd5b50508035926020909101359150565b803560ff811681146144ed57600080fd5b60006020828403121561468b57600080fd5b6127b082614668565b815181526020808301519082015260408101610ec4565b60008083601f8401126146bd57600080fd5b5081356001600160401b038111156146d457600080fd5b6020830191508360208285010111156140c157600080fd5b6000806000806040858703121561470257600080fd5b84356001600160401b038082111561471957600080fd5b614725888389016143e5565b9096509450602087013591508082111561473e57600080fd5b5061474b878288016146ab565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061478b57634e487b7160e01b600052602160045260246000fd5b9052565b8151815260208083015160408301916147aa9084018261476d565b5092915050565b803561ffff811681146144ed57600080fd5b6000606082840312156147d557600080fd5b6147dd614525565b905081356147ea81614483565b81526147f8602083016147b1565b6020820152614809604083016147b1565b604082015292915050565b6000806080838503121561482757600080fd5b61483083614668565b915061483f84602085016147c3565b90509250929050565b60008060006040848603121561485d57600080fd5b8335614868816144cd565b925060208401356001600160401b0381111561488357600080fd5b61488f868287016146ab565b9497909650939450505050565b60006001600160401b038211156148b5576148b561450f565b5060051b60200190565b6000604082840312156148d157600080fd5b6148d961454d565b90506148e482614668565b815260208201356148f4816144cd565b602082015292915050565b600080600080600060a0868803121561491757600080fd5b8535614922816144cd565b945060208681013594506040808801356001600160401b0381111561494657600080fd5b8801601f81018a1361495757600080fd5b803561496a6149658261489c565b61456f565b81815260069190911b8201840190848101908c83111561498957600080fd5b928501925b828410156149af576149a08d856148bf565b8252928401929085019061498e565b999c989b5098996060810135995060800135979650505050505050565b600061010082840312156149df57600080fd5b50919050565b60008083601f8401126149f757600080fd5b5081356001600160401b03811115614a0e57600080fd5b6020830191508360208260061b85010111156140c157600080fd5b600060608284031215614a3b57600080fd5b614a43614525565b905081356001600160401b03811115614a5b57600080fd5b8201601f81018413614a6c57600080fd5b614a7b8482356020840161459f565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614ab757600080fd5b89356001600160401b0380821115614ace57600080fd5b614ada8d838e016146ab565b909b50995060208c0135915080821115614af357600080fd5b614aff8d838e016146ab565b9099509750879150614b148d60408e016149cc565b96506101408c0135915080821115614b2b57600080fd5b614b378d838e016149e5565b90965094506101608c0135915080821115614b5157600080fd5b614b5d8d838e01614a29565b93506101808c0135915080821115614b7457600080fd5b50614b818c828d01614a29565b9150509295985092959850929598565b6000806000806000806101608789031215614bab57600080fd5b86356001600160401b0380821115614bc257600080fd5b614bce8a838b016146ab565b90985096506020890135915080821115614be757600080fd5b614bf38a838b016146ab565b9096509450849150614c088a60408b016149cc565b9350610140890135915080821115614c1f57600080fd5b50614c2c89828a01614a29565b9150509295509295509295565b60008060408385031215614c4c57600080fd5b8235614c5781614483565b91506020838101356001600160401b03811115614c7357600080fd5b8401601f81018613614c8457600080fd5b8035614c926149658261489c565b81815260059190911b82018301908381019088831115614cb157600080fd5b928401925b82841015614ccf57833582529284019290840190614cb6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614d1c57835163ffffffff1683529284019291840191600101614cfa565b50909695505050505050565b60008060208385031215614d3b57600080fd5b82356001600160401b03811115614d5157600080fd5b61445e858286016146ab565b6001600160601b0381168114610cf957600080fd5b600082601f830112614d8357600080fd5b81356020614d936149658361489c565b82815260069290921b84018101918181019086841115614db257600080fd5b8286015b84811015614e035760408189031215614dcf5760008081fd5b614dd761454d565b8135614de2816144cd565b815281850135614df181614d5d565b81860152835291830191604001614db6565b509695505050505050565b600080600060a08486031215614e2357600080fd5b614e2d85856147c3565b92506060840135614e3d81614d5d565b915060808401356001600160401b03811115614e5857600080fd5b614e6486828701614d72565b9150509250925092565b600082601f830112614e7f57600080fd5b81356020614e8f6149658361489c565b82815260609283028501820192828201919087851115614eae57600080fd5b8387015b85811015614ed157614ec489826147c3565b8452928401928101614eb2565b5090979650505050505050565b600082601f830112614eef57600080fd5b81356020614eff6149658361489c565b82815260059290921b84018101918181019086841115614f1e57600080fd5b8286015b84811015614e03578035614f3581614d5d565b8352918301918301614f22565b600082601f830112614f5357600080fd5b81356020614f636149658361489c565b82815260059290921b84018101918181019086841115614f8257600080fd5b8286015b84811015614e035780356001600160401b03811115614fa55760008081fd5b614fb38986838b0101614d72565b845250918301918301614f86565b600080600080600080600080610100898b031215614fde57600080fd5b614fe7896144e2565b9750614ff560208a016144e2565b965061500360408a016144e2565b955061501160608a016144e2565b94506080890135935060a08901356001600160401b038082111561503457600080fd5b6150408c838d01614e6e565b945060c08b013591508082111561505657600080fd5b6150628c838d01614ede565b935060e08b013591508082111561507857600080fd5b506150858b828c01614f42565b9150509295985092959890939650565b60208101610ec4828461476d565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561511a5761511a6150f0565b5060010190565b6000815180845260005b818110156151475760208185018101518683018201520161512b565b81811115615159576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006127b06020830184615121565b60006020828403121561519357600080fd5b81516127b0816144cd565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156151fa57600080fd5b815180151581146127b057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e1984360301811261526957600080fd5b8301803591506001600160401b0382111561528357600080fd5b6020019150600581901b36038213156140c157600080fd5b6000602082840312156152ad57600080fd5b81516127b081614483565b600082198211156152cb576152cb6150f0565b500190565b600080858511156152e057600080fd5b838611156152ed57600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b8181101561535f578651805160ff1684528601518516868401529585019591830191600101615335565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561539157600080fd5b6127b083836148bf565b6000828210156153ad576153ad6150f0565b500390565b60018060a01b03841681528260208201526060604082015260006153d96060830184615121565b95945050505050565b6000602082840312156153f457600080fd5b81516001600160c01b03811681146127b057600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826154305761543061540b565b500690565b6001600160a01b038316815260406020820181905260009061463e90830184615121565b82815260406020820152600061463e6040830184615121565b60006020828403121561548457600080fd5b5051919050565b6001600160a01b038416815261016081016154b3602083018580358252602090810135910152565b6154cd606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b038316815260406020820152600082516060604084015261553460a0840182615121565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906153d99083018486615555565b60018060a01b0385168152836020820152606060408201526000611773606083018486615555565b600082601f8301126155dc57600080fd5b815160206155ec6149658361489c565b82815260059290921b8401810191818101908684111561560b57600080fd5b8286015b84811015614e0357805161562281614d5d565b835291830191830161560f565b6000806040838503121561564257600080fd5b82516001600160401b038082111561565957600080fd5b615665868387016155cb565b9350602085015191508082111561567b57600080fd5b50615688858286016155cb565b9150509250929050565b8381526040602082015260006153d9604083018486615555565b600060208083850312156156bf57600080fd5b82516001600160401b038111156156d557600080fd5b8301601f810185136156e657600080fd5b80516156f46149658261489c565b81815260059190911b8201830190838101908783111561571357600080fd5b928401925b8284101561573a57835161572b81614483565b82529284019290840190615718565b979650505050505050565b60006020828403121561575757600080fd5b81516127b081614d5d565b600060ff821660ff84168060ff0382111561577f5761577f6150f0565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b818110156157f057865180516001600160a01b0316845286015185168684015295850195918301916001016157c0565b50909a9950505050505050505050565b600061ffff80831681811415615818576158186150f0565b6001019392505050565b60006020828403121561583457600080fd5b81516001600160e01b0319811681146127b057600080fd5b60006001600160601b0380831681851681830481118215151615615872576158726150f0565b02949350505050565b60006001600160601b03808416806158955761589561540b565b9216919091049291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220ff8c287943c6fe11e0027554d61cfa2a42e48467b12f2c24712aef8bead3996364736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5bc5b424ff8db9bd8202cae3beb193c946b905d8ebddb990e36a723af40eb1c4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614c9f565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000077359400081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614cdc565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614d6f565b610764565b34801561036757600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561039b57600080fd5b506103af6103aa366004614e80565b610caf565b60405161020f9190614ef9565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614f07565b610d14565b60405161020f9190614f20565b34801561041557600080fd5b506103af610424366004614f07565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000424242424242424242424242424242424242424281565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614f68565b610dc1565b3480156104ba57600080fd5b5061022d6104c9366004614fdb565b610f6e565b3480156104da57600080fd5b506103fc6104e9366004614e80565b611304565b3480156104fa57600080fd5b5061022d6113f7565b34801561050f57600080fd5b5061022d61051e366004615085565b611462565b34801561052f57600080fd5b5061022d61053e3660046150b1565b61169f565b34801561054f57600080fd5b5061022d61055e3660046151cb565b611877565b34801561056f57600080fd5b5061022d61057e36600461529c565b611a4a565b34801561058f57600080fd5b5061022d61059e366004615085565b611e15565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190615397565b156106ad5760405162461bcd60e51b81526004016106a4906153b9565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a49061545e565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611ff8565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600260048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190615397565b156108375760405162461bcd60e51b81526004016106a4906153b9565b603454600160401b900460ff166108af5760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b85841480156108bd57508382145b61094d5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b603354600160a01b90046001600160401b031615806109a2575060335461098c9061098790600160a01b90046001600160401b031661202c565b612116565b6001600160401b0316896001600160401b031610155b610a2e5760405162461bcd60e51b815260206004820152605160248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2070726f6f66206d75737420626520696e207468652065706f63686064820152701030b33a32b91030b1ba34bb30ba34b7b760791b608482015260a4016106a4565b42610a44613f486001600160401b038c16614c9f565b1015610acd5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152610b76907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906154ad565b8935610b7160208c018c6154c6565b612163565b6000805b87811015610c1a57610bfc8b8b358b8b85818110610b9a57610b9a61550c565b9050602002016020810190610baf9190615522565b8a8a86818110610bc157610bc161550c565b9050602002810190610bd391906154c6565b8a8a88818110610be557610be561550c565b9050602002810190610bf79190615549565b6122f1565b610c069083614c9f565b915080610c1281615592565b915050610b7a565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c2c51c40906044015b600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050505050505050505050505050565b600080610cf184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610d3c6040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610da757610da7614ec1565b6002811115610db857610db8614ec1565b90525092915050565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe61614610e095760405162461bcd60e51b81526004016106a4906155ad565b346801bc16d674ec80000014610e955760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663228951186801bc16d674ec8000008787610ed86128a5565b8888886040518863ffffffff1660e01b8152600401610efc9695949392919061567f565b6000604051808303818588803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610f5f9291906156ce565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190615397565b156110175760405162461bcd60e51b81526004016106a4906153b9565b868414801561102557508382145b6110ae5760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b426110c4613f486001600160401b038c16614c9f565b10156111465760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a1660048201526111ea907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906154ad565b8735610b7160208a018a6154c6565b6000805b8881101561128e576112708b8b8b8481811061120c5761120c61550c565b90506020020160208101906112219190615522565b8a358a8a868181106112355761123561550c565b905060200281019061124791906154c6565b8a8a888181106112595761125961550c565b905060200281019061126b9190615549565b6128ea565b61127a90836156e2565b91508061128681615592565b9150506111ee565b506033546001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169163c2c51c4091166112d3633b9aca0085615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610c71565b61132c6040805160808101825260008082526020820181905291810182905290606082015290565b6036600061136f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127ab92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff1660028111156113dc576113dc614ec1565b60028111156113ed576113ed614ec1565b9052509392505050565b6033546001600160a01b031633146114215760405162461bcd60e51b81526004016106a490615416565b603454600160401b900460ff161561144b5760405162461bcd60e51b81526004016106a49061545e565b603354611460906001600160a01b0316611ff8565b565b336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146114aa5760405162461bcd60e51b81526004016106a4906155ad565b6114b8633b9aca00826157be565b156115425760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b6000611552633b9aca00836157d2565b6034549091506001600160401b03908116908216111561160b5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906116299084906001600160401b03166157e6565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161168891815260200190565b60405180910390a261169a8383612dc8565b505050565b600054610100900460ff16158080156116bf5750600054600160ff909116105b806116d95750303b1580156116d9575060005460ff166001145b61173c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff19166001179055801561175f576000805461ff0019166101001790555b6001600160a01b0382166117d25760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611873576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118a15760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190615397565b1561194a5760405162461bcd60e51b81526004016106a4906153b9565b82518451146119d55760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b8451811015611a4357611a31838583815181106119f7576119f761550c565b6020026020010151878481518110611a1157611a1161550c565b60200260200101516001600160a01b0316612dd29092919063ffffffff16565b80611a3b81615592565b9150506119d8565b5050505050565b604051635ac86ab760e01b81526004808201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad59190615397565b15611af25760405162461bcd60e51b81526004016106a4906153b9565b8386148015611b0057508588145b8015611b0b57508782145b611b7f576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611c23907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1491906154ad565b8b35610b7160208e018e6154c6565b604080518082019091526000808252602082015260005b83811015611d23576000611cde8d358d8d85818110611c5b57611c5b61550c565b9050602002810190611c6d919061580e565b8c8c86818110611c7f57611c7f61550c565b9050602002810190611c9191906154c6565b8c8c88818110611ca357611ca361550c565b9050602002810190611cb59190615549565b8c8c8a818110611cc757611cc761550c565b9050602002810190611cd99190615549565b612e24565b80518451919250908490611cf3908390614c9f565b9052506020808201519084018051611d0c9083906156e2565b905250819050611d1b81615592565b915050611c3a565b50805115611d52576033548151611d52916001600160a01b031690611d4d90633b9aca009061582f565b61339c565b602081015115611e075760335460208201516001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681169263c2c51c4092911690611da890633b9aca0090615723565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611dee57600080fd5b505af1158015611e02573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611e3f5760405162461bcd60e51b81526004016106a490615416565b604051635ac86ab760e01b8152600560048201819052907f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190615397565b15611ee85760405162461bcd60e51b81526004016106a4906153b9565b603754821115611f995760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611fab919061584e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261169a838361339c565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755612029814761339c565b50565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b031610156120d65760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b6120e2600c6020615865565b61210c7f000000000000000000000000000000000000000000000000000000006059f460846157e6565b610d0e9190615894565b6000612124600c6020615865565b61212f8360016158ba565b6121399190615865565b610d0e907f000000000000000000000000000000000000000000000000000000006059f4606158ba565b61216f6003602061582f565b81146121ff5760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61224482828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506003905061342a565b6122eb5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061233084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561239f5761239f614ec1565b60028111156123b0576123b0614ec1565b90525090506000816060015160028111156123cd576123cd614ec1565b146124765760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b61247e6128a5565b612487906158e5565b6124c386868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061346692505050565b1461254a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b600061258886868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b90506125988a87878b8b8e6134a0565b603980549060006125a883615592565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f00000000000000000000000000000000000000000000000000000007735940008116908216111561262e576001600160401b037f000000000000000000000000000000000000000000000000000000077359400016602083015261263e565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156126dc576126dc614ec1565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516127779392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b031661279c919061582f565b9b9a5050505050505050505050565b600081516030146128345760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b60405160029061284b908490600090602001615909565b60408051601f198184030181529082905261286591615938565b602060405180830381855afa158015612882573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d0e91906154ad565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061292984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061347b92505050565b9050600061296985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156129d8576129d8614ec1565b60028111156129e9576129e9614ec1565b8152505090508a6001600160401b031681604001516001600160401b031610612aa05760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b600181606001516002811115612ab857612ab8614ec1565b14612b205760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b612b298b61202c565b6001600160401b0316612b6e8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b031611612c11576000836001600160401b031611612c115760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612c1f8987878b8b8f6134a0565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000077359400081169086161115612c8157507f0000000000000000000000000000000000000000000000000000000773594000612c84565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612d2c57612d2c614ec1565b0217905550905050816001600160401b0316816001600160401b031614612db8577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612da39392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612db5818361370f565b95505b5050505050979650505050505050565b611873828261372e565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261169a908490613847565b6040805180820190915260008082526020820152612e49612e44896159b9565b613919565b6033546001600160401b03600160a01b90910481169082161015612f0b5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60448201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520617460648201527f206f72206166746572206d6f7374526563656e745769746864726177616c546960848201526606d657374616d760cc1b60a482015260c4016106a4565b6000612f19612e448b6159b9565b90506000612f5988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061344292505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612f8657612f86614ec1565b141561303d5760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff16156130fc5760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506131d98c87878e7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d49190615af5565b613929565b600061321787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061434a92505050565b90506132278d8a8a8e8e866134a0565b600061326588888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061436292505050565b90506132a38a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136f792505050565b6001600160401b03166132bd6132b88f6159b9565b61437a565b6001600160401b03161061337557603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261336a93869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561335157613351614ec1565b600281111561336257613362614ec1565b90525061438c565b95505050505061338f565b60335461336a90839086906001600160a01b0316846145ca565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3189091169063c0db354c9083906044016000604051808303818588803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b50505050505050565b6000836134388685856146a8565b1495945050505050565b6000816000815181106134575761345761550c565b60200260200101519050919050565b6000816001815181106134575761345761550c565b6000610d0e826002815181106134935761349361550c565b60200260200101516147f4565b6134ac60036002615bf6565b84146135375760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561354560286001614c9f565b61354f9190614c9f565b61355a90602061582f565b82146135da5760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166135f060286001614c9f565b600b901b179050600061363587878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b905061367b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925085915086905061342a565b6136ed5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b6000610d0e826007815181106134935761349361550c565b60006137276001600160401b03808416908516615c02565b9392505050565b8047101561377e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137cb576040519150601f19603f3d011682016040523d82523d6000602084013e6137d0565b606091505b505090508061169a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b600061389c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614b089092919063ffffffff16565b80519091501561169a57808060200190518101906138ba9190615397565b61169a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610d0e8261014001516147f4565b613934600280615bf6565b83146139a85760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b6139b4600d6002615bf6565b6139c460c0840160a08501615c41565b6001600160401b031610613a2e5760405162461bcd60e51b815260206004820152603f6024820152600080516020615c8983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b613a3a60046002615bf6565b613a4b610100840160e08501615c41565b6001600160401b031610613ab7576040805162461bcd60e51b8152602060048201526024810191909152600080516020615c8983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b613ac360186002615bf6565b613ad360e0840160c08501615c41565b6001600160401b031610613b4d5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613b65612e44856159b9565b6001600160401b031610613b7a576005613b7d565b60045b9050613b8a600482614c9f565b613b95906001614c9f565b613ba090602061582f565b613baa84806154c6565b905014613c1e5760405162461bcd60e51b81526020600482015260486024820152600080516020615c8983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613c2a60046003614c9f565b613c3590602061582f565b613c4260408501856154c6565b905014613cbc5760405162461bcd60e51b815260206004820152604e6024820152600080516020615c8983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613cc86003602061582f565b613cd560208501856154c6565b905014613d435760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613d4e81602061582f565b613d5b60608501856154c6565b905014613dce5760405162461bcd60e51b81526020600482015260476024820152600080516020615c8983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613ddc60186001614c9f565b613de7906005614c9f565b613df2906001614c9f565b613dfc9190614c9f565b613e0790602061582f565b613e1460808501856154c6565b905014613e9d5760405162461bcd60e51b81526020600482015260586024820152600080516020615c8983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613eaf60c0850160a08601615c41565b6001600160401b03166000613ec6600d6001614c9f565b613ed660e0880160c08901615c41565b6001600160401b0316901b600d613eef60186001614c9f565b613efa906001614c9f565b613f049190614c9f565b601b901b1717179050613f5f613f1d60808601866154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925050506101008701358461342a565b613fd25760405162461bcd60e51b815260206004820152604a6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b614029613fe260208601866154c6565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a01359250905061342a565b6140895760405162461bcd60e51b815260206004820152603d6024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b60496140e161409b60408701876154c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008701356101608801358461342a565b6141535760405162461bcd60e51b81526020600482015260496024820152600080516020615c8983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506141ab61416460608601866154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160860135610140870135600961342a565b6142165760405162461bcd60e51b81526020600482015260426024820152600080516020615c8983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b6000614229610100860160e08701615c41565b6001600160401b031661423e60046001614c9f565b600e901b179050600061428388888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061485b92505050565b90506142d361429287806154c6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610160880135838561342a565b61433f5760405162461bcd60e51b81526020600482015260436024820152600080516020615c8983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610d0e826001815181106134935761349361550c565b6000610d0e826003815181106134935761349361550c565b6000602061210c8361012001516147f4565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000007735940006001600160401b0316846001600160401b0316111561440357507f0000000000000000000000000000000000000000000000000000000773594000614406565b50825b604080518082019091526000808252602082015261442482866157e6565b6001600160401b039081168252603480548492600091614446918591166158ba565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061447882856020015161370f565b602082015260028460600151600281111561449557614495614ec1565b146144b757603980549060006144aa83615c5e565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561455c5761455c614ec1565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a26038805483919060009061465b9084906001600160401b03166158ba565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b600083516000141580156146c75750602084516146c591906157be565b155b6147565760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b855181116147ea5761477a6002856157be565b6147ad578151600052808601516020526020826040600060026107d05a03fa6147a257600080fd5b6002840493506147d8565b8086015160005281516020526020826040600060026107d05a03fa6147d157600080fd5b6002840493505b6147e3602082614c9f565b9050614767565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6000806002835161486c91906157d2565b90506000816001600160401b03811115614888576148886150ce565b6040519080825280602002602001820160405280156148b1578160200160208202803683370190505b50905060005b828110156149b8576002856148cc838361582f565b815181106148dc576148dc61550c565b6020026020010151868360026148f2919061582f565b6148fd906001614c9f565b8151811061490d5761490d61550c565b602002602001015160405160200161492f929190918252602082015260400190565b60408051601f198184030181529082905261494991615938565b602060405180830381855afa158015614966573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061498991906154ad565b82828151811061499b5761499b61550c565b6020908102919091010152806149b081615592565b9150506148b7565b506149c46002836157d2565b91505b8115614ae45760005b82811015614ad1576002826149e5838361582f565b815181106149f5576149f561550c565b602002602001015183836002614a0b919061582f565b614a16906001614c9f565b81518110614a2657614a2661550c565b6020026020010151604051602001614a48929190918252602082015260400190565b60408051601f1981840301815290829052614a6291615938565b602060405180830381855afa158015614a7f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614aa291906154ad565b828281518110614ab457614ab461550c565b602090810291909101015280614ac981615592565b9150506149d0565b50614add6002836157d2565b91506149c7565b80600081518110614af757614af761550c565b602002602001015192505050919050565b6060614b178484600085614b1f565b949350505050565b606082471015614b805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614bd75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614bf39190615938565b60006040518083038185875af1925050503d8060008114614c30576040519150601f19603f3d011682016040523d82523d6000602084013e614c35565b606091505b5091509150614c45828286614c50565b979650505050505050565b60608315614c5f575081613727565b825115614c6f5782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615c75565b634e487b7160e01b600052601160045260246000fd5b60008219821115614cb257614cb2614c89565b500190565b6001600160401b038116811461202957600080fd5b8035614cd781614cb7565b919050565b60008060408385031215614cef57600080fd5b823591506020830135614d0181614cb7565b809150509250929050565b600060408284031215614d1e57600080fd5b50919050565b60008083601f840112614d3657600080fd5b5081356001600160401b03811115614d4d57600080fd5b6020830191508360208260051b8501011115614d6857600080fd5b9250929050565b60008060008060008060008060a0898b031215614d8b57600080fd5b8835614d9681614cb7565b975060208901356001600160401b0380821115614db257600080fd5b614dbe8c838d01614d0c565b985060408b0135915080821115614dd457600080fd5b614de08c838d01614d24565b909850965060608b0135915080821115614df957600080fd5b614e058c838d01614d24565b909650945060808b0135915080821115614e1e57600080fd5b50614e2b8b828c01614d24565b999c989b5096995094979396929594505050565b60008083601f840112614e5157600080fd5b5081356001600160401b03811115614e6857600080fd5b602083019150836020828501011115614d6857600080fd5b60008060208385031215614e9357600080fd5b82356001600160401b03811115614ea957600080fd5b614eb585828601614e3f565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614ef557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d0e8284614ed7565b600060208284031215614f1957600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614f616060840182614ed7565b5092915050565b600080600080600060608688031215614f8057600080fd5b85356001600160401b0380821115614f9757600080fd5b614fa389838a01614e3f565b90975095506020880135915080821115614fbc57600080fd5b50614fc988828901614e3f565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614ff757600080fd5b883561500281614cb7565b975060208901356001600160401b038082111561501e57600080fd5b61502a8c838d01614d24565b909950975060408b013591508082111561504357600080fd5b61504f8c838d01614d0c565b965060608b0135915080821115614df957600080fd5b6001600160a01b038116811461202957600080fd5b8035614cd781615065565b6000806040838503121561509857600080fd5b82356150a381615065565b946020939093013593505050565b6000602082840312156150c357600080fd5b813561372781615065565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715615107576151076150ce565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615135576151356150ce565b604052919050565b60006001600160401b03821115615156576151566150ce565b5060051b60200190565b600082601f83011261517157600080fd5b813560206151866151818361513d565b61510d565b82815260059290921b840181019181810190868411156151a557600080fd5b8286015b848110156151c057803583529183019183016151a9565b509695505050505050565b6000806000606084860312156151e057600080fd5b83356001600160401b03808211156151f757600080fd5b818601915086601f83011261520b57600080fd5b8135602061521b6151818361513d565b82815260059290921b8401810191818101908a84111561523a57600080fd5b948201945b8386101561526157853561525281615065565b8252948201949082019061523f565b9750508701359250508082111561527757600080fd5b5061528486828701615160565b9250506152936040850161507a565b90509250925092565b60008060008060008060008060008060c08b8d0312156152bb57600080fd5b6152c48b614ccc565b995060208b01356001600160401b03808211156152e057600080fd5b6152ec8e838f01614d0c565b9a5060408d013591508082111561530257600080fd5b61530e8e838f01614d24565b909a50985060608d013591508082111561532757600080fd5b6153338e838f01614d24565b909850965060808d013591508082111561534c57600080fd5b6153588e838f01614d24565b909650945060a08d013591508082111561537157600080fd5b5061537e8d828e01614d24565b915080935050809150509295989b9194979a5092959850565b6000602082840312156153a957600080fd5b8151801515811461372757600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6000602082840312156154bf57600080fd5b5051919050565b6000808335601e198436030181126154dd57600080fd5b8301803591506001600160401b038211156154f757600080fd5b602001915036819003821315614d6857600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561553457600080fd5b813564ffffffffff8116811461372757600080fd5b6000808335601e1984360301811261556057600080fd5b8301803591506001600160401b0382111561557a57600080fd5b6020019150600581901b3603821315614d6857600080fd5b60006000198214156155a6576155a6614c89565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561564257818101518382015260200161562a565b838111156122eb5750506000910152565b6000815180845261566b816020860160208601615627565b601f01601f19169290920160200192915050565b60808152600061569360808301888a6155fe565b82810360208401526156a58188615653565b905082810360408401526156ba8186886155fe565b915050826060830152979650505050505050565b602081526000614b176020830184866155fe565b600080821280156001600160ff1b038490038513161561570457615704614c89565b600160ff1b839003841281161561571d5761571d614c89565b50500190565b60006001600160ff1b038184138284138082168684048611161561574957615749614c89565b600160ff1b600087128281168783058912161561576857615768614c89565b6000871292508782058712848416161561578457615784614c89565b8785058712818416161561579a5761579a614c89565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826157cd576157cd6157a8565b500690565b6000826157e1576157e16157a8565b500490565b60006001600160401b038381169083168181101561580657615806614c89565b039392505050565b6000823561017e1983360301811261582557600080fd5b9190910192915050565b600081600019048311821515161561584957615849614c89565b500290565b60008282101561586057615860614c89565b500390565b60006001600160401b038083168185168183048111821515161561588b5761588b614c89565b02949350505050565b60006001600160401b03808416806158ae576158ae6157a8565b92169190910492915050565b60006001600160401b038083168185168083038211156158dc576158dc614c89565b01949350505050565b80516020808301519190811015614d1e5760001960209190910360031b1b16919050565b6000835161591b818460208801615627565b6001600160801b0319939093169190920190815260100192915050565b60008251615825818460208701615627565b600082601f83011261595b57600080fd5b81356001600160401b03811115615974576159746150ce565b615987601f8201601f191660200161510d565b81815284602083860101111561599c57600080fd5b816020850160208301376000918101602001919091529392505050565b600061018082360312156159cc57600080fd5b6159d46150e4565b82356001600160401b03808211156159eb57600080fd5b6159f73683870161594a565b83526020850135915080821115615a0d57600080fd5b615a193683870161594a565b60208401526040850135915080821115615a3257600080fd5b615a3e3683870161594a565b60408401526060850135915080821115615a5757600080fd5b615a633683870161594a565b60608401526080850135915080821115615a7c57600080fd5b50615a893682860161594a565b608083015250615a9b60a08401614ccc565b60a0820152615aac60c08401614ccc565b60c0820152615abd60e08401614ccc565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600060208284031215615b0757600080fd5b815161372781614cb7565b600181815b80851115615b4d578160001904821115615b3357615b33614c89565b80851615615b4057918102915b93841c9390800290615b17565b509250929050565b600082615b6457506001610d0e565b81615b7157506000610d0e565b8160018114615b875760028114615b9157615bad565b6001915050610d0e565b60ff841115615ba257615ba2614c89565b50506001821b610d0e565b5060208310610133831016604e8410600b8410161715615bd0575081810a610d0e565b615bda8383615b12565b8060001904821115615bee57615bee614c89565b029392505050565b60006137278383615b55565b60008083128015600160ff1b850184121615615c2057615c20614c89565b6001600160ff1b0384018313811615615c3b57615c3b614c89565b50500390565b600060208284031215615c5357600080fd5b813561372781614cb7565b600081615c6d57615c6d614c89565b506000190190565b602081526000613727602083018461565356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212207b802debd88fb1da4ddbc8905d28e36a41d34702e4e56687893b2f6ebf09657264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x68b1d87f95878fe05b998f19b66f4baba5de1aed":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220380280a60a6f9ee66649ea48441e32dc6c7a726b1bf36930736c05eabb03978964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610ec7565b610268565b6040516100d89190610f43565b60405180910390f35b6100f46100ef366004610fb7565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fea565b610410565b005b6100f4610138366004611005565b610534565b6101647f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fea565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610fb7565b610601565b6040516100d89190611048565b61018f6101e1366004610fb7565b61076b565b6101286101f4366004610ec7565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611080565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fea565b6108f0565b6060336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146102bb5760405162461bcd60e51b81526004016102b2906110aa565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d661111d565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf57600085858381811061032157610321611133565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b290611149565b60006103658361090f565b905061037c89846103776001856111b4565b610a08565b8085858151811061038f5761038f611133565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b7906111d9565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104585760405162461bcd60e51b81526004016102b2906110aa565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061058157610581611133565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff8111156106325761063261111d565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610c61565b82828151811061068c5761068c611133565b6020026020010181815250506000801b8282815181106106ae576106ae611133565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a816111d9565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a9611133565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461082a5760405162461bcd60e51b81526004016102b2906110aa565b60005b818110156108ea57600083838381811061084957610849611133565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b290611149565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610d38565b905060006108be8583610d72565b90508089146108d2576108d2818685610a08565b505050505080806108e2906111d9565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff1660016111f4565b9050610948848383610d9c565b60ff84166000908152600260205260408120906109666001846111b4565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f6001846111b4565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610e3c565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac360018361121c565b81548110610ad357610ad3611133565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a60018361121c565b81548110610b1a57610b1a611133565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bd45760ff85166000908152600360205260408120610b6460018461121c565b81548110610b7457610b74611133565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610bc15760200151925061040a915050565b5080610bcc81611233565b915050610b41565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d2c5760ff8616600090815260026020908152604080832063ffffffff891684529091528120610cbb60018461121c565b81548110610ccb57610ccb611133565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d19576020015192506103c3915050565b5080610d2481611233565b915050610c87565b50600095945050505050565b600080610d4483610aea565b8054909150600090610d6590600190600160201b900463ffffffff166111b4565b90506103c3848383610d9c565b600080610d7f8484610a92565b6001810154909150610d948585846000610e3c565b949350505050565b81544363ffffffff90811691161415610dd357815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610e5b57600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610edc57600080fd5b83359250602084013567ffffffffffffffff80821115610efb57600080fd5b818601915086601f830112610f0f57600080fd5b813581811115610f1e57600080fd5b876020828501011115610f3057600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835163ffffffff1683529284019291840191600101610f5f565b50909695505050505050565b803560ff81168114610f9e57600080fd5b919050565b803563ffffffff81168114610f9e57600080fd5b60008060408385031215610fca57600080fd5b610fd383610f8d565b9150610fe160208401610fa3565b90509250929050565b600060208284031215610ffc57600080fd5b6103c382610f8d565b60008060006060848603121561101a57600080fd5b61102384610f8d565b925061103160208501610fa3565b915061103f60408501610fa3565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835183529284019291840191600101611064565b6000806040838503121561109357600080fd5b61109c83610f8d565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff838116908316818110156111d1576111d161119e565b039392505050565b60006000198214156111ed576111ed61119e565b5060010190565b600063ffffffff8083168185168083038211156112135761121361119e565b01949350505050565b60008282101561122e5761122e61119e565b500390565b6000816112425761124261119e565b50600019019056fea26469706673582212207f70dacd13e12bd4d8ca024088f99b1851332333bcefaec855541f3cb20e8b6764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x7969c5ed335650692bc04293b07f5bf2e7a673c0":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e838360405180606001604052806027815260200161025e602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b60606001600160a01b0384163b6101305760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161014b919061020e565b600060405180830381855af49150503d8060008114610186576040519150601f19603f3d011682016040523d82523d6000602084013e61018b565b606091505b509150915061019b8282866101a5565b9695505050505050565b606083156101b457508161004e565b8251156101c45782518084602001fd5b8160405162461bcd60e51b8152600401610127919061022a565b60005b838110156101f95781810151838201526020016101e1565b83811115610208576000848401525b50505050565b600082516102208184602087016101de565b9190910192915050565b60208152600082518060208401526102498160408501602087016101de565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220168c9171386e78d19614294924c2aaf713ec506abcf73d5cabd15564835e5e0964736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0x14dc79964da2c08b23698b3d3cc7ca32193d9955","0xfb":"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc","0xfc":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x2bdcc0de6be1f7d2ee689a0342d76f52e8efaba3"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220ee4f89775fd0df7e89f51555e886f738dfe996deea6e76052fa01c5ef77f152864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x809d550fca64d94bd9f66e60752a544199cfac3d":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063b099627e1161008a578063e481af9d11610064578063e481af9d14610632578063f2fde38b14610647578063fc299dee14610667578063fce36c7d1461068757600080fd5b8063b099627e14610589578063b98d0908146105e4578063df5cf723146105fe57600080fd5b80639926ee7d116100c65780639926ee7d14610509578063a364f4da14610529578063a98fb35514610549578063ab21739a1461056957600080fd5b8063715018a6146104b65780638da5cb5b146104cb57806395c6d604146104e957600080fd5b80634ae07c3711610159578063683048351161013357806368304835146103d75780636b3aa72e1461040b5780636d14a9871461043e57806370a082311461047257600080fd5b80634ae07c371461034a5780635c008994146103785780635df459461461038b57600080fd5b806333cfb7b71161019557806333cfb7b7146102bd5780633bc28c8c146102ea578063416c7e5e1461030a578063485cc9551461032a57600080fd5b806306045a911461022f578063171f1d5b146102645780632dd94eba1461029b57600080fd5b3661022a5733600090815260ca6020526040812080543492906101df90849061407b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2005b600080fd5b34801561023b57600080fd5b5061024f61024a3660046141b7565b6106a7565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004614318565b610786565b60408051921515835290151560208301520161025b565b3480156102a757600080fd5b506102bb6102b636600461461f565b610910565b005b3480156102c957600080fd5b506102dd6102d8366004614665565b610c10565b60405161025b9190614682565b3480156102f657600080fd5b506102bb610305366004614665565b6110e3565b34801561031657600080fd5b506102bb6103253660046146dd565b6110f7565b34801561033657600080fd5b506102bb6103453660046146fa565b61122e565b34801561035657600080fd5b5061036a610365366004614733565b611343565b60405161025b9291906147cd565b6102bb61038636600461485e565b612296565b34801561039757600080fd5b506103bf7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6040516001600160a01b03909116815260200161025b565b3480156103e357600080fd5b506103bf7f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b34801561041757600080fd5b507f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076103bf565b34801561044a57600080fd5b506103bf7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b34801561047e57600080fd5b506104a861048d366004614665565b6001600160a01b0316600090815260ca602052604090205490565b60405190815260200161025b565b3480156104c257600080fd5b506102bb6124cf565b3480156104d757600080fd5b506033546001600160a01b03166103bf565b3480156104f557600080fd5b5061024f6105043660046148a9565b6124e3565b34801561051557600080fd5b506102bb6105243660046148f4565b612508565b34801561053557600080fd5b506102bb610544366004614665565b6125d4565b34801561055557600080fd5b506102bb61056436600461499f565b61269b565b34801561057557600080fd5b506102bb6105843660046149ef565b6126ef565b34801561059557600080fd5b506105c86105a4366004614a16565b60c96020526000908152604090205463ffffffff811690600160201b900460ff1682565b6040805163ffffffff909316835290151560208301520161025b565b3480156105f057600080fd5b5060975461024f9060ff1681565b34801561060a57600080fd5b506103bf7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561063e57600080fd5b506102dd612a50565b34801561065357600080fd5b506102bb610662366004614665565b612e19565b34801561067357600080fd5b506065546103bf906001600160a01b031681565b34801561069357600080fd5b506102bb6106a2366004614a2f565b612e8f565b60008085836040516020016106bd929190614aa3565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff166106f957600091505061077a565b600081815260c96020526040902054600160201b900460ff1661072057600091505061077a565b60408051602081018c90529081018a9052606081018990526001600160601b03198816608082015260009060940160408051601f198184030181529190528051602082012090915061077487848389613247565b93505050505b98975050505050505050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ce576107ce614abe565b60200201518951600160200201518a602001516000600281106107f3576107f3614abe565b60200201518b6020015160016002811061080f5761080f614abe565b602090810291909101518c518d83015160405161086c9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61088f9190614ad4565b90506109026108a86108a1888461325f565b86906132f6565b6108b061338a565b6108f86108e9856108e3604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061325f565b6108f28c61344a565b906132f6565b886201d4c06134da565b909890975095505050505050565b737969c5ed335650692bc04293b07f5bf2e7a673c060005a600085815260c9602052604090205490915063ffffffff166109885760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b60448201526064015b60405180910390fd5b600084815260c96020526040902054600160201b900460ff16156109e85760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038216600090815260ca6020526040902054610a465760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600084815260c960205260408120805464ff00000000198116600160201b179091558190610a7c90879063ffffffff1687611343565b91509150604360ff168260200151600081518110610a9c57610a9c614abe565b6020026020010151610aae9190614af6565b6001600160601b031660648360000151600081518110610ad057610ad0614abe565b60200260200101516001600160601b0316610aeb9190614b25565b1015610b095760405162461bcd60e51b815260040161097f90614b44565b6040516001600160a01b038516815286907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a610b598387614ba2565b610b66906201117061407b565b610b709190614b25565b6001600160a01b038716600090815260ca6020526040902054909150811115610bab5760405162461bcd60e51b815260040161097f90614bb9565b6001600160a01b038616600090815260ca602052604081208054839290610bd3908490614ba2565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b505050505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16906313542a4e90602401602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614c16565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c169063871ef04990602401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190614c2f565b90506001600160c01b0381161580610dc957507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614c58565b60ff16155b15610de95760408051600080825260208201909252905b50949350505050565b6000610dfd826001600160c01b03166136fe565b90506000805b8251811015610ed3577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b0316633ca5a5f5848381518110610e4d57610e4d614abe565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190614c16565b610ebf908361407b565b915080610ecb81614c7b565b915050610e03565b506000816001600160401b03811115610eee57610eee614093565b604051908082528060200260200182016040528015610f17578160200160208202803683370190505b5090506000805b84518110156110d6576000858281518110610f3b57610f3b614abe565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137781690633ca5a5f590602401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614c16565b905060005b818110156110c0576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190614cab565b6000015186868151811061108857611088614abe565b6001600160a01b0390921660209283029190910190910152846110aa81614c7b565b95505080806110b890614c7b565b915050610fd9565b50505080806110ce90614c7b565b915050610f1e565b5090979650505050505050565b6110eb6137c0565b6110f48161381a565b50565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190614cec565b6001600160a01b0316336001600160a01b0316146112255760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161097f565b6110f481613883565b600054610100900460ff161580801561124e5750600054600160ff909116105b806112685750303b158015611268575060005460ff166001145b6112cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097f565b6000805460ff1916600117905580156112ee576000805461ff0019166101001790555b6112f883836138ca565b801561133e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040805180820190915260608082526020820152600082604001515160405180604001604052806001815260200160008152505114801561139f57508260a0015151604051806040016040528060018152602001600081525051145b80156113c657508260c0015151604051806040016040528060018152602001600081525051145b80156113ed57508260e0015151604051806040016040528060018152602001600081525051145b6114575760405162461bcd60e51b8152602060048201526041602482015260008051602061517483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161097f565b825151602084015151146114cf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615174833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161097f565b4363ffffffff168463ffffffff161061153e5760405162461bcd60e51b815260206004820152603c602482015260008051602061517483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161097f565b60408051808201825260008082526020808301829052835180850185526060808252818301528451808601865260018082529083019390935284518381528086019095529293919082810190803683370190505060208281019190915260408051808201825260018082526000919093015280518281528082019091529081602001602082028036833701905050815260408051808201909152606080825260208201528560200151516001600160401b038111156115ff576115ff614093565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5081526020860151516001600160401b0381111561164857611648614093565b604051908082528060200260200182016040528015611671578160200160208202803683370190505b508160200181905250600061171d60405180604001604052806001815260200160008152507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614c58565b61394b565b905060005b8760200151518110156119b8576117678860200151828151811061174857611748614abe565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061177d5761177d614abe565b6020908102919091010152801561183d57602083015161179e600183614ba2565b815181106117ae576117ae614abe565b602002602001015160001c836020015182815181106117cf576117cf614abe565b602002602001015160001c1161183d576040805162461bcd60e51b815260206004820152602481019190915260008051602061517483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161097f565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03166304ec63518460200151838151811061188257611882614abe565b60200260200101518b8b6000015185815181106118a1576118a1614abe565b60200260200101516040518463ffffffff1660e01b81526004016118de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190614c2f565b6001600160c01b03168360000151828151811061193e5761193e614abe565b6020026020010181815250506119a46108a1611978848660000151858151811061196a5761196a614abe565b6020026020010151166139de565b8a60200151848151811061198e5761198e614abe565b6020026020010151613a0990919063ffffffff16565b9450806119b081614c7b565b915050611722565b50506119c383613aed565b60975490935060ff166000816119da576000611a5c565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614c16565b905060005b604051806040016040528060018152602001600081525051811015612167578215611bed578963ffffffff16827f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663249a0c4260405180604001604052806001815260200160008152508581518110611ae557611ae5614abe565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190614c16565b611b57919061407b565b11611bed5760405162461bcd60e51b8152602060048201526066602482015260008051602061517483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161097f565b7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b03166368bccaac60405180604001604052806001815260200160008152508381518110611c4457611c44614abe565b602001015160f81c60f81b60f81c8c8c60a001518581518110611c6957611c69614abe565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce99190614d09565b6001600160401b031916611d0c8a60400151838151811061174857611748614abe565b67ffffffffffffffff191614611da85760405162461bcd60e51b8152602060048201526061602482015260008051602061517483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161097f565b611dd889604001518281518110611dc157611dc1614abe565b6020026020010151876132f690919063ffffffff16565b95507f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663c8294c5660405180604001604052806001815260200160008152508381518110611e3157611e31614abe565b602001015160f81c60f81b60f81c8c8c60c001518581518110611e5657611e56614abe565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed69190614d34565b85602001518281518110611eec57611eec614abe565b6001600160601b03909216602092830291909101820152850151805182908110611f1857611f18614abe565b602002602001015185600001518281518110611f3657611f36614abe565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a602001515181101561215257611fc586600001518281518110611f8057611f80614abe565b602002602001015160405180604001604052806001815260200160008152508581518110611fb057611fb0614abe565b016020015160f81c60ff161c60019081161490565b15612140577f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031663f2be94ae6040518060400160405280600181526020016000815250858151811061202157612021614abe565b602001015160f81c60f81b60f81c8e8960200151858151811061204657612046614abe565b60200260200101518f60e00151888151811061206457612064614abe565b6020026020010151878151811061207d5761207d614abe565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190614d34565b875180518590811061211957612119614abe565b6020026020010181815161212d9190614d51565b6001600160601b03169052506001909101905b8061214a81614c7b565b915050611f5a565b5050808061215f90614c7b565b915050611a61565b5050506000806121818a868a606001518b60800151610786565b91509150816121f25760405162461bcd60e51b8152602060048201526043602482015260008051602061517483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161097f565b806122535760405162461bcd60e51b8152602060048201526039602482015260008051602061517483398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161097f565b5050600087826020015160405160200161226e929190614d79565b60408051808303601f1901815291905280516020909101209299929850919650505050505050565b600060c84310156122a85750826122d4565b83336040516020016122bb929190614aa3565b6040516020818303038152906040528051906020012090505b600081815260c9602052604090205463ffffffff16156123365760405162461bcd60e51b815260206004820152601b60248201527f42617463682077617320616c7265616479207375626d69747465640000000000604482015260640161097f565b34156123a55733600090815260ca60205260408120805434929061235b90849061407b565b909155505033600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a25b33600090815260ca60205260409020546124015760405162461bcd60e51b815260206004820152601860248201527f426174636865722062616c616e636520697320656d7074790000000000000000604482015260640161097f565b6040805180820182526000602080830182815263ffffffff43818116865287855260c9909352928590208451815492511515600160201b0264ffffffffff19909316941693909317179091559151909186917f1871c33134a542e0ab9facf7013d27b9ed95e64d299e9919ee091c9cfcb19fa5916124829188908890614dea565b60405180910390a2847f130d3e81af62e03ed6fff5e3bb343695ec513892cfad24d286486745dcc61437334387876040516124c09493929190614e13565b60405180910390a25050505050565b6124d76137c0565b6124e16000613b88565b565b60008184846040516124f6929190614e4e565b60405180910390201490509392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146125505760405162461bcd60e51b815260040161097f90614e5e565b604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071690639926ee7d9061259e9085908590600401614f23565b600060405180830381600087803b1580156125b857600080fd5b505af11580156125cc573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461261c5760405162461bcd60e51b815260040161097f90614e5e565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a364f4da906024015b600060405180830381600087803b15801561268057600080fd5b505af1158015612694573d6000803e3d6000fd5b5050505050565b6126a36137c0565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a98fb35590612666908490600401614f6e565b60005a905060008484604051602001612709929190614aa3565b60408051601f198184030181529181528151602092830120600081815260c990935291205490915063ffffffff1661277a5760405162461bcd60e51b8152602060048201526014602482015273426174636820646f65736e27742065786973747360601b604482015260640161097f565b600081815260c96020526040902054600160201b900460ff16156127da5760405162461bcd60e51b815260206004820152601760248201527610985d18da08185b1c9958591e481c995cdc1bdb991959604a1b604482015260640161097f565b6001600160a01b038416600090815260ca60205260409020546128385760405162461bcd60e51b81526020600482015260166024820152754261746368657220686173206e6f2062616c616e636560501b604482015260640161097f565b600081815260c960205260408120805464ff00000000198116600160201b17909155819061286e90849063ffffffff1687611343565b91509150604360ff16826020015160008151811061288e5761288e614abe565b60200260200101516128a09190614af6565b6001600160601b0316606483600001516000815181106128c2576128c2614abe565b60200260200101516001600160601b03166128dd9190614b25565b10156128fb5760405162461bcd60e51b815260040161097f90614b44565b6040516001600160a01b038716815287907f8511746b73275e06971968773119b9601fc501d7bdf3824d8754042d148940e29060200160405180910390a260005a905060003a61294b8388614ba2565b612958906201117061407b565b6129629190614b25565b6001600160a01b038916600090815260ca602052604090205490915081111561299d5760405162461bcd60e51b815260040161097f90614bb9565b6001600160a01b038816600090815260ca6020526040812080548392906129c5908490614ba2565b90915550506001600160a01b038816600081815260ca60209081526040918290205491519182527f0ea46f246ccfc58f7a93aa09bc6245a6818e97b1a160d186afe78993a3b194a0910160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015612a44573d6000803e3d6000fd5b50505050505050505050565b606060007f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad69190614c58565b60ff16905080612af457505060408051600081526020810190915290565b6000805b82811015612ba957604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190614c16565b612b95908361407b565b915080612ba181614c7b565b915050612af8565b506000816001600160401b03811115612bc457612bc4614093565b604051908082528060200260200182016040528015612bed578160200160208202803683370190505b5090506000805b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c769190614c58565b60ff16811015612e0f57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0e9190614c16565b905060005b81811015612dfa576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063adc804da906044016040805180830381865afa158015612d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dac9190614cab565b60000151858581518110612dc257612dc2614abe565b6001600160a01b039092166020928302919091019091015283612de481614c7b565b9450508080612df290614c7b565b915050612d13565b50508080612e0790614c7b565b915050612bf4565b5090949350505050565b612e216137c0565b6001600160a01b038116612e865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f481613b88565b6065546001600160a01b03163314612f245760405162461bcd60e51b815260206004820152604c60248201527f536572766963654d616e61676572426173652e6f6e6c7952657761726473496e60448201527f69746961746f723a2063616c6c6572206973206e6f742074686520726577617260648201526b32399034b734ba34b0ba37b960a11b608482015260a40161097f565b60005b818110156131f857828282818110612f4157612f41614abe565b9050602002810190612f539190614f81565b612f64906040810190602001614665565b6001600160a01b03166323b872dd3330868686818110612f8657612f86614abe565b9050602002810190612f989190614f81565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303816000875af1158015612fef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130139190614fac565b50600083838381811061302857613028614abe565b905060200281019061303a9190614f81565b61304b906040810190602001614665565b604051636eb1769f60e11b81523060048201526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156130b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130dd9190614c16565b90508383838181106130f1576130f1614abe565b90506020028101906131039190614f81565b613114906040810190602001614665565b6001600160a01b031663095ea7b37f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f8387878781811061315657613156614abe565b90506020028101906131689190614f81565b60400135613176919061407b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156131c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e59190614fac565b5050806131f190614c7b565b9050612f27565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f169063fce36c7d9061259e9085908590600401615024565b600083613255868585613bda565b1495945050505050565b604080518082019091526000808252602082015261327b613f8b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156132ae576132b0565bfe5b50806132ee5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161097f565b505092915050565b6040805180820190915260008082526020820152613312613fa9565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156132ae5750806132ee5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161097f565b613392613fc7565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061347a60008051602061515483398151915286614ad4565b90505b61348681613cd4565b90935091506000805160206151548339815191528283098314156134c0576040805180820190915290815260208101919091529392505050565b60008051602061515483398151915260018208905061347d565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061350c613fec565b60005b60028110156136d1576000613525826006614b25565b905084826002811061353957613539614abe565b6020020151518361354b83600061407b565b600c811061355b5761355b614abe565b602002015284826002811061357257613572614abe565b60200201516020015183826001613589919061407b565b600c811061359957613599614abe565b60200201528382600281106135b0576135b0614abe565b60200201515151836135c383600261407b565b600c81106135d3576135d3614abe565b60200201528382600281106135ea576135ea614abe565b602002015151600160200201518361360383600361407b565b600c811061361357613613614abe565b602002015283826002811061362a5761362a614abe565b60200201516020015160006002811061364557613645614abe565b60200201518361365683600461407b565b600c811061366657613666614abe565b602002015283826002811061367d5761367d614abe565b60200201516020015160016002811061369857613698614abe565b6020020151836136a983600561407b565b600c81106136b9576136b9614abe565b602002015250806136c981614c7b565b91505061350f565b506136da61400b565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061370c846139de565b61ffff166001600160401b0381111561372757613727614093565b6040519080825280601f01601f191660200182016040528015613751576020820181803683370190505b5090506000805b825182108015613769575061010081105b15612e0f576001811b9350858416156137b0578060f81b83838151811061379257613792614abe565b60200101906001600160f81b031916908160001a9053508160010191505b6137b981614c7b565b9050613758565b6033546001600160a01b031633146124e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097f565b606554604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b600054610100900460ff166139355760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161097f565b61393e82613b88565b6139478161381a565b5050565b60008061395784613d56565b9050808360ff166001901b116139d55760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161097f565b90505b92915050565b6000805b82156139d8576139f3600184614ba2565b9092169180613a0181615131565b9150506139e2565b60408051808201909152600080825260208201526102008261ffff1610613a655760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161097f565b8161ffff1660011415613a795750816139d8565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610613ae257600161ffff871660ff83161c81161415613ac557613ac284846132f6565b93505b613acf83846132f6565b92506201fffe600192831b169101613a95565b509195945050505050565b60408051808201909152600080825260208201528151158015613b1257506020820151155b15613b30575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206151548339815191528460200151613b639190614ad4565b613b7b90600080516020615154833981519152614ba2565b905292915050565b919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208451613bea9190614ad4565b15613c715760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a40161097f565b8260205b85518111610de057613c88600285614ad4565b613ca957816000528086015160205260406000209150600284049350613cc2565b8086015160005281602052604060002091506002840493505b613ccd60208261407b565b9050613c75565b60008080600080516020615154833981519152600360008051602061515483398151915286600080516020615154833981519152888909090890506000613d4a827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615154833981519152613ee3565b91959194509092505050565b600061010082511115613ddf5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161097f565b8151613ded57506000919050565b60008083600081518110613e0357613e03614abe565b0160200151600160f89190911c81901b92505b8451811015613eda57848181518110613e3157613e31614abe565b0160200151600160f89190911c1b9150828211613ec65760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161097f565b91811791613ed381614c7b565b9050613e16565b50909392505050565b600080613eee61400b565b613ef6614029565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156132ae575082613f805760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161097f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fda614047565b8152602001613fe7614047565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561408e5761408e614065565b500190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140cb576140cb614093565b60405290565b60405161010081016001600160401b03811182821017156140cb576140cb614093565b604051601f8201601f191681016001600160401b038111828210171561411c5761411c614093565b604052919050565b60006001600160401b0383111561413d5761413d614093565b614150601f8401601f19166020016140f4565b905082815283838301111561416457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261418c57600080fd5b61419b83833560208501614124565b9392505050565b6001600160a01b03811681146110f457600080fd5b600080600080600080600080610100898b0312156141d457600080fd5b88359750602089013596506040890135955060608901356001600160601b03198116811461420157600080fd5b94506080890135935060a08901356001600160401b0381111561422357600080fd5b61422f8b828c0161417b565b93505060c0890135915060e0890135614247816141a2565b809150509295985092959890939650565b60006040828403121561426a57600080fd5b6142726140a9565b9050813581526020820135602082015292915050565b600082601f83011261429957600080fd5b6142a16140a9565b8060408401858111156142b357600080fd5b845b818110156142cd5780358452602093840193016142b5565b509095945050505050565b6000608082840312156142ea57600080fd5b6142f26140a9565b90506142fe8383614288565b815261430d8360408401614288565b602082015292915050565b600080600080610120858703121561432f57600080fd5b843593506143408660208701614258565b925061434f86606087016142d8565b915061435e8660e08701614258565b905092959194509250565b60006001600160401b0382111561438257614382614093565b5060051b60200190565b803563ffffffff81168114613b8357600080fd5b600082601f8301126143b157600080fd5b813560206143c66143c183614369565b6140f4565b82815260059290921b840181019181810190868411156143e557600080fd5b8286015b84811015614407576143fa8161438c565b83529183019183016143e9565b509695505050505050565b600082601f83011261442357600080fd5b813560206144336143c183614369565b82815260069290921b8401810191818101908684111561445257600080fd5b8286015b84811015614407576144688882614258565b835291830191604001614456565b600082601f83011261448757600080fd5b813560206144976143c183614369565b82815260059290921b840181019181810190868411156144b657600080fd5b8286015b848110156144075780356001600160401b038111156144d95760008081fd5b6144e78986838b01016143a0565b8452509183019183016144ba565b6000610180828403121561450857600080fd5b6145106140d1565b905081356001600160401b038082111561452957600080fd5b614535858386016143a0565b8352602084013591508082111561454b57600080fd5b61455785838601614412565b6020840152604084013591508082111561457057600080fd5b61457c85838601614412565b604084015261458e85606086016142d8565b60608401526145a08560e08601614258565b60808401526101208401359150808211156145ba57600080fd5b6145c6858386016143a0565b60a08401526101408401359150808211156145e057600080fd5b6145ec858386016143a0565b60c084015261016084013591508082111561460657600080fd5b5061461384828501614476565b60e08301525092915050565b6000806040838503121561463257600080fd5b8235915060208301356001600160401b0381111561464f57600080fd5b61465b858286016144f5565b9150509250929050565b60006020828403121561467757600080fd5b81356139d5816141a2565b6020808252825182820181905260009190848201906040850190845b818110156146c35783516001600160a01b03168352928401929184019160010161469e565b50909695505050505050565b80151581146110f457600080fd5b6000602082840312156146ef57600080fd5b81356139d5816146cf565b6000806040838503121561470d57600080fd5b8235614718816141a2565b91506020830135614728816141a2565b809150509250929050565b60008060006060848603121561474857600080fd5b833592506147586020850161438c565b915060408401356001600160401b0381111561477357600080fd5b61477f868287016144f5565b9150509250925092565b600081518084526020808501945080840160005b838110156147c25781516001600160601b03168752958201959082019060010161479d565b509495945050505050565b60408152600083516040808401526147e86080840182614789565b90506020850151603f198483030160608501526148058282614789565b925050508260208301529392505050565b60008083601f84011261482857600080fd5b5081356001600160401b0381111561483f57600080fd5b60208301915083602082850101111561485757600080fd5b9250929050565b60008060006040848603121561487357600080fd5b8335925060208401356001600160401b0381111561489057600080fd5b61489c86828701614816565b9497909650939450505050565b6000806000604084860312156148be57600080fd5b83356001600160401b038111156148d457600080fd5b6148e086828701614816565b909790965060209590950135949350505050565b6000806040838503121561490757600080fd5b8235614912816141a2565b915060208301356001600160401b038082111561492e57600080fd5b908401906060828703121561494257600080fd5b60405160608101818110838211171561495d5761495d614093565b60405282358281111561496f57600080fd5b61497b8882860161417b565b82525060208301356020820152604083013560408201528093505050509250929050565b6000602082840312156149b157600080fd5b81356001600160401b038111156149c757600080fd5b8201601f810184136149d857600080fd5b6149e784823560208401614124565b949350505050565b600080600060608486031215614a0457600080fd5b833592506020840135614758816141a2565b600060208284031215614a2857600080fd5b5035919050565b60008060208385031215614a4257600080fd5b82356001600160401b0380821115614a5957600080fd5b818501915085601f830112614a6d57600080fd5b813581811115614a7c57600080fd5b8660208260051b8501011115614a9157600080fd5b60209290920196919550909350505050565b91825260601b6001600160601b031916602082015260340190565b634e487b7160e01b600052603260045260246000fd5b600082614af157634e487b7160e01b600052601260045260246000fd5b500690565b60006001600160601b0380831681851681830481118215151615614b1c57614b1c614065565b02949350505050565b6000816000190483118215151615614b3f57614b3f614065565b500290565b602080825260409082018190527f5369676e61746f7269657320646f206e6f74206f776e206174206c6561737420908201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d606082015260800190565b600082821015614bb457614bb4614065565b500390565b6020808252603c908201527f4261746368657220686173206e6f742073756666696369656e742066756e647360408201527f20666f7220706179696e672074686973207472616e73616374696f6e00000000606082015260800190565b600060208284031215614c2857600080fd5b5051919050565b600060208284031215614c4157600080fd5b81516001600160c01b03811681146139d557600080fd5b600060208284031215614c6a57600080fd5b815160ff811681146139d557600080fd5b6000600019821415614c8f57614c8f614065565b5060010190565b6001600160601b03811681146110f457600080fd5b600060408284031215614cbd57600080fd5b614cc56140a9565b8251614cd0816141a2565b81526020830151614ce081614c96565b60208201529392505050565b600060208284031215614cfe57600080fd5b81516139d5816141a2565b600060208284031215614d1b57600080fd5b815167ffffffffffffffff19811681146139d557600080fd5b600060208284031215614d4657600080fd5b81516139d581614c96565b60006001600160601b0383811690831681811015614d7157614d71614065565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614db457815185529382019390820190600101614d98565b5092979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614e0a604083018486614dc1565b95945050505050565b6001600160a01b038516815263ffffffff84166020820152606060408201819052600090614e449083018486614dc1565b9695505050505050565b8183823760009101908152919050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015614efc57602081850181015186830182015201614ee0565b81811115614f0e576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0383168152604060208201526000825160606040840152614f4d60a0840182614ed6565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061419b6020830184614ed6565b60008235609e19833603018112614f9757600080fd5b9190910192915050565b8035613b83816141a2565b600060208284031215614fbe57600080fd5b81516139d5816146cf565b8183526000602080850194508260005b858110156147c2578135614fec816141a2565b6001600160a01b031687528183013561500481614c96565b6001600160601b0316878401526040968701969190910190600101614fd9565b60208082528181018390526000906040808401600586901b8501820187855b8881101561512357878303603f190184528135368b9003609e1901811261506957600080fd5b8a0160a0813536839003601e1901811261508257600080fd5b820180356001600160401b0381111561509a57600080fd5b8060061b36038413156150ac57600080fd5b8287526150be838801828c8501614fc9565b925050506150cd888301614fa1565b6001600160a01b031688860152818701358786015260606150ef81840161438c565b63ffffffff1690860152608061510683820161438c565b63ffffffff16950194909452509285019290850190600101615043565b509098975050505050505050565b600061ffff8083168181141561514957615149614065565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220f3af18a616315479028514dce131e77661a45d54dda3a89866d052a17af15d1f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x82e01223d51eb87e16a03e24687edf0f294da6f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063bd90df701461003b578063fa534dc01461006b575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100793660046101b7565b61008e565b6040519015158152602001610062565b60008054604051829182916001600160a01b03909116906100bf908c908c908c908c908c908c908c906024016102ed565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516100f4919061035c565b600060405180830381855afa9150503d806000811461012f576040519150601f19603f3d011682016040523d82523d6000602084013e610134565b606091505b50915091508161017f5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b604482015260640160405180910390fd5b808060200190518101906101939190610378565b9a9950505050505050505050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a0312156101d257600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461020457600080fd5b93506080880135925060a088013567ffffffffffffffff8082111561022857600080fd5b818a0191508a601f83011261023c57600080fd5b81358181111561024e5761024e6101a1565b604051601f8201601f19908116603f01168101908382118183101715610276576102766101a1565b816040528281528d602084870101111561028f57600080fd5b82602086016020830137600060208483010152809650505050505060c0880135905092959891949750929550565b60005b838110156102d85781810151838201526020016102c0565b838111156102e7576000848401525b50505050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a0820152600083518060e084015261010061033b82828601602089016102bd565b60c0840194909452601f01601f191691909101909101979650505050505050565b6000825161036e8184602087016102bd565b9190910192915050565b60006020828403121561038a57600080fd5b8151801515811461039a57600080fd5b939250505056fea2646970667358221220890e6c4f803738cdd8143d9c468e06db317af2bf0fc3f3e1815eb0eec51fe54264736f6c634300080c0033","storage":{"0x0":"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x322af8000000c8","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0x998abeb3e57409262ae5b751f60747921b33613e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0xf5059a5d33d5853360d16c683c16e67980206f36","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x68b1d87f95878fe05b998f19b66f4baba5de1aed","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611904565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611904565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611937565b61045b565b005b6101ca6101b5366004611937565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c2565b6105b4565b61021b610200366004611a68565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611937565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a81565b6102a261029d366004611a98565b610672565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac2565b610705565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61034461033f366004611a98565b6108a0565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611904565b6108eb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611937565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0a565b6109b8565b6103f26103ed366004611b67565b610e0c565b6040516101529190611bdf565b61018461040d366004611904565b60016020526000908152604090205481565b61021b61042d366004611a68565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c2565b611026565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104ac5760405162461bcd60e51b81526004016104a390611c29565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146105fc5760405162461bcd60e51b81526004016104a390611c29565b6000610607836108eb565b50905061061482826110cf565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e83610655856001600160a01b031660009081526001602052604090205490565b8460405161066593929190611c9d565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260049052919091208054839081106106af576106af611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061072c5761072c611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107f35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806108195750806040015163ffffffff168463ffffffff16105b6108975760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b600460205281600052604060002081815481106108bc57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b0382166000818152600360209081526040808320815180830183528154815260019182015481850152948452909152812054909190806109ae5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614610a025760405162461bcd60e51b81526004016104a390611c29565b6000610a30610a1936869003860160408701611d1f565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610ab8576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f3683398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b425760405162461bcd60e51b81526020600482015260476024820152600080516020611f3683398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610bc65760405162461bcd60e51b81526020600482015260426024820152600080516020611f3683398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610c1f918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d51565b6040516020818303038152906040528051906020012060001c610c429190611d9c565b9050610cdc610c7b610c6683610c60368a90038a0160408b01611d1f565b9061131a565b610c7536899003890189611d1f565b906113b1565b610c83611445565b610cc5610cb685610c60604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c75368a90038a018a611d1f565b610cd7368a90038a0160808b01611e0e565b611505565b610d775760405162461bcd60e51b815260206004820152606c6024820152600080516020611f3683398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610dfb9160808a0190611e6b565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e2957610e29611952565b604051908082528060200260200182016040528015610e52578160200160208202803683370190505b50905060005b8481101561101d576000868683818110610e7457610e74611d09565b919091013560f81c6000818152600460205260409020549092509050801580610ed7575060ff821660009081526004602052604081208054909190610ebb57610ebb611d09565b600091825260209091200154600160c01b900463ffffffff1686105b15610f645760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b805b80156110075760ff831660009081526004602052604090208790610f8b600184611eb5565b81548110610f9b57610f9b611d09565b600091825260209091200154600160c01b900463ffffffff1611610ff557610fc4600182611eb5565b858581518110610fd657610fd6611d09565b602002602001019063ffffffff16908163ffffffff1681525050611007565b80610fff81611ecc565b915050610f66565b505050808061101590611ee3565b915050610e58565b50949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461106e5760405162461bcd60e51b81526004016104a390611c29565b6000611079836108eb565b50905061108e8261108983611772565b6110cf565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e83610655856001600160a01b031660009081526001602052604090205490565b604080518082019091526000808252602082015260005b835181101561131457600084828151811061110357611103611d09565b0160209081015160f81c60008181526004909252604090912054909150806111935760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c790866113b1565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112109085611eb5565b8154811061122057611220611d09565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112615780546001600160c01b031916604083901c1781556112fd565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130c90611ee3565b9150506110e6565b50505050565b6040805180820190915260008082526020820152611336611831565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156113695761136b565bfe5b50806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113cd61184f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156113695750806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144d61186d565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611534611892565b60005b60028110156116f957600061154d826006611efe565b905084826002811061156157611561611d09565b60200201515183611573836000611f1d565b600c811061158357611583611d09565b602002015284826002811061159a5761159a611d09565b602002015160200151838260016115b19190611f1d565b600c81106115c1576115c1611d09565b60200201528382600281106115d8576115d8611d09565b60200201515151836115eb836002611f1d565b600c81106115fb576115fb611d09565b602002015283826002811061161257611612611d09565b602002015151600160200201518361162b836003611f1d565b600c811061163b5761163b611d09565b602002015283826002811061165257611652611d09565b60200201516020015160006002811061166d5761166d611d09565b60200201518361167e836004611f1d565b600c811061168e5761168e611d09565b60200201528382600281106116a5576116a5611d09565b6020020151602001516001600281106116c0576116c0611d09565b6020020151836116d1836005611f1d565b600c81106116e1576116e1611d09565b602002015250806116f181611ee3565b915050611537565b506117026118b1565b60006020826101808560086107d05a03fa90508080156113695750806117625760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179757506020820151155b156117b5575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fa9190611d9c565b611824907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611eb5565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118806118cf565b815260200161188d6118cf565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182c57600080fd5b60006020828403121561191657600080fd5b61191f826118ed565b9392505050565b803560ff8116811461182c57600080fd5b60006020828403121561194957600080fd5b61191f82611926565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198b5761198b611952565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119ba576119ba611952565b604052919050565b600080604083850312156119d557600080fd5b6119de836118ed565b915060208084013567ffffffffffffffff808211156119fc57600080fd5b818601915086601f830112611a1057600080fd5b813581811115611a2257611a22611952565b611a34601f8201601f19168501611991565b91508082528784828501011115611a4a57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7a57600080fd5b5035919050565b8151815260208083015190820152604081016106ff565b60008060408385031215611aab57600080fd5b611ab483611926565b946020939093013593505050565b600080600060608486031215611ad757600080fd5b611ae084611926565b9250602084013563ffffffff81168114611af957600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2157600080fd5b611b2a856118ed565b9350610100601f1982011215611b3f57600080fd5b602085019250604061011f1982011215611b5857600080fd5b50610120840190509250925092565b600080600060408486031215611b7c57600080fd5b833567ffffffffffffffff80821115611b9457600080fd5b818601915086601f830112611ba857600080fd5b813581811115611bb757600080fd5b876020828501011115611bc957600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1d57835163ffffffff1683529284019291840191600101611bfb565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611cdf57858101830151858201608001528201611cc3565b81811115611cf1576000608083870101525b50601f01601f19169290920160800195945050505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d3157600080fd5b611d39611968565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db957634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dcf57600080fd5b611dd7611968565b806040840185811115611de957600080fd5b845b81811015611e03578035845260209384019301611deb565b509095945050505050565b600060808284031215611e2057600080fd5b6040516040810181811067ffffffffffffffff82111715611e4357611e43611952565b604052611e508484611dbe565b8152611e5f8460408501611dbe565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611ec757611ec7611e9f565b500390565b600081611edb57611edb611e9f565b506000190190565b6000600019821415611ef757611ef7611e9f565b5060010190565b6000816000190483118215151615611f1857611f18611e9f565b500290565b60008219821115611f3057611f30611e9f565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a2646970667358221220ea4e5768540668ded6677b9d2f7e8507f41512dd0da89412a3d94f77bc08c43664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0x7","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0xc5a5c42992decbae36851359345fe25997f5c42d","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a7640000c5a5c42992decbae36851359345fe25997f5c42d"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220c164d850158d1f90a32bbe366e1545bff2724ee97114a57f639cabb55989579b64736f6c634300080c0033","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x998abeb3e57409262ae5b751f60747921b33613e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x7000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042"}},"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80639f3ccf651161010f578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461054b578063f851e1981461055e578063fa28c62714610571578063ff694a771461058457600080fd5b8063c8294c56146104d6578063d5eccc05146104e9578063dd9846b9146104fc578063df5cf7231461052457600080fd5b8063bc9a40c3116100de578063bc9a40c314610474578063bd29b8cd14610487578063c46778a51461049a578063c601527d146104c357600080fd5b80639f3ccf65146103ee578063ac6bfb0314610401578063adc804da14610421578063b6904b781461046157600080fd5b80634bd26e091161018757806366acfefe1161015657806366acfefe1461034a5780636d14a987146103755780637c172347146103b457806381c07502146103ce57600080fd5b80634bd26e09146102e55780635401ed27146103155780635e5a6775146103285780635f1f2d771461033757600080fd5b806320b66298116101c357806320b662981461026c57806325504777146102815780632cd95940146102a25780633ca5a5f5146102c257600080fd5b80630491b41c146101ea57806308732461146102205780631f9b74e014610241575b600080fd5b61020d6101f8366004612c27565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b61023361022e366004612c42565b610597565b604051610217929190612c6c565b61025461024f366004612ca6565b6105e0565b6040516001600160601b039091168152602001610217565b61027f61027a366004612d21565b610630565b005b61029461028f366004612de2565b610961565b604051610217929190612e81565b6102b56102b0366004612ea6565b610c2c565b6040516102179190612ed2565b61020d6102d0366004612c27565b60ff1660009081526003602052604090205490565b61020d6102f3366004612ea6565b600091825260026020908152604080842060ff93909316845291905290205490565b610254610323366004612ea6565b610ccb565b61020d670de0b6b3a764000081565b61027f610345366004612fdb565b610ce4565b61035d610358366004612de2565b611104565b6040516001600160c01b039091168152602001610217565b61039c7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b039091168152602001610217565b6103bc602081565b60405160ff9091168152602001610217565b6103e16103dc366004613097565b61125e565b60405161021791906130e9565b61039c6103fc366004612c42565b611528565b61041461040f366004613127565b611560565b604051610217919061315a565b61043461042f366004612c42565b6115f8565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610217565b61041461046f366004612c42565b611672565b61027f6104823660046131a6565b611701565b61027f6104953660046131d0565b6117fa565b6102546104a8366004612c27565b6000602081905290815260409020546001600160601b031681565b61027f6104d136600461329c565b611927565b6102546104e43660046132e9565b611a1b565b6102546104f7366004612c27565b611a99565b61050f61050a366004613325565b611aec565b60405163ffffffff9091168152602001610217565b61039c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610254610559366004613361565b611b01565b61041461056c366004612ea6565b611b96565b61025461057f366004613325565b611c7b565b61027f6105923660046133a3565b611cdc565b600360205281600052604060002081815481106105b357600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff8216600090815260016020526040812054839061061a5760405162461bcd60e51b815260040161061190613400565b60405180910390fd5b60006106268585611e47565b5095945050505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190613451565b6001600160a01b0316336001600160a01b0316146106e25760405162461bcd60e51b81526004016106119061346e565b846106fe8160ff16600090815260016020526040902054151590565b61071a5760405162461bcd60e51b815260040161061190613400565b8380610790576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f76696465646064820152608401610611565b8281146108055760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d61746368000000000000006064820152608401610611565b60ff87166000908152600360205260408120905b8281101561095657858582818110610833576108336134ea565b90506020020160208101906108489190613500565b8289898481811061085b5761085b6134ea565b9050602002013581548110610872576108726134ea565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108db576108db6134ea565b90506020020135815481106108f2576108f26134ea565b6000918252602090912001546001600160a01b0316888885818110610919576109196134ea565b905060200201602081019061092e9190613500565b60405161093c929190612c6c565b60405180910390a28061094e81613531565b915050610819565b505050505050505050565b606080336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146109ac5760405162461bcd60e51b81526004016106119061354c565b6000836001600160401b038111156109c6576109c6612f4a565b6040519080825280602002602001820160405280156109ef578160200160208202803683370190505b5090506000846001600160401b03811115610a0c57610a0c612f4a565b604051908082528060200260200182016040528015610a35578160200160208202803683370190505b50905060005b85811015610c1e576000878783818110610a5757610a576134ea565b919091013560f81c60008181526001602052604090205490925015159050610adf5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b6064820152608401610611565b600080610aec838d611e47565b9150915080610b895760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a401610611565b6000610b968c8585612045565b905082878681518110610bab57610bab6134ea565b60200260200101906001600160601b031690816001600160601b031681525050610bd584826122c5565b868681518110610be757610be76134ea565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610c1690613531565b915050610a3b565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610cbe576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c65565b5050505090505b92915050565b600080610cd88484611b96565b60400151949350505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d669190613451565b6001600160a01b0316336001600160a01b031614610d965760405162461bcd60e51b81526004016106119061346e565b81610db28160ff16600090815260016020526040902054151590565b610dce5760405162461bcd60e51b815260040161061190613400565b815180610e435760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f76696465640000006064820152608401610611565b60ff841660009081526003602090815260408083206004909252822090915b838110156110fb578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610ea257610ea26134ea565b602002602001015181548110610eba57610eba6134ea565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28660ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7584888481518110610f1857610f186134ea565b602002602001015181548110610f3057610f306134ea565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f70906001906135be565b81548110610f8057610f806134ea565b9060005260206000200183878381518110610f9d57610f9d6134ea565b602002602001015181548110610fb557610fb56134ea565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080611008576110086135d5565b60008281526020812082016000199081019190915501905581548290611030906001906135be565b81548110611040576110406134ea565b9060005260206000200160009054906101000a90046001600160a01b031682878381518110611071576110716134ea565b602002602001015181548110611089576110896134ea565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806110c7576110c76135d5565b600082815260209020810160001990810180546001600160a01b0319169055019055806110f381613531565b915050610e62565b50505050505050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461114e5760405162461bcd60e51b81526004016106119061354c565b6000805b8381101561062657600085858381811061116e5761116e6134ea565b919091013560f81c600081815260016020526040902054909250151590506111fe5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f7420657869737400000000000000006064820152608401610611565b60008061120b838b611e47565b915091508061122d5760009150600160ff84161b6001600160c01b0386161794505b600061123a8a8585612045565b905061124684826122c5565b5050505050808061125690613531565b915050611152565b60606000826001600160401b0381111561127a5761127a612f4a565b6040519080825280602002602001820160405280156112a3578160200160208202803683370190505b50905060005b8381101561151d5760008585838181106112c5576112c56134ea565b919091013560f81c600081815260016020526040902054909250151590506113645760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a401610611565b60ff81166000908152600160205260408120805463ffffffff8a16929061138d5761138d6134ea565b60009182526020909120015463ffffffff1611156114395760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a401610611565b60ff8116600090815260016020526040812054905b818110156115075760ff8316600090815260016020819052604090912063ffffffff8b169161147d84866135be565b61148791906135be565b81548110611497576114976134ea565b60009182526020909120015463ffffffff16116114f55760016114ba82846135be565b6114c491906135be565b8585815181106114d6576114d66134ea565b602002602001019063ffffffff16908163ffffffff1681525050611507565b806114ff81613531565b91505061144e565b505050808061151590613531565b9150506112a9565b5090505b9392505050565b6004602052816000526040600020818154811061154457600080fd5b6000918252602090912001546001600160a01b03169150829050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff881683529052919091208054839081106115a5576115a56134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805483908110611630576116306134ea565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260019052919091208054839081106116af576116af6134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117839190613451565b6001600160a01b0316336001600160a01b0316146117b35760405162461bcd60e51b81526004016106119061346e565b816117cf8160ff16600090815260016020526040902054151590565b6117eb5760405162461bcd60e51b815260040161061190613400565b6117f5838361243f565b505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146118425760405162461bcd60e51b81526004016106119061354c565b60005b81811015611921576000838383818110611861576118616134ea565b919091013560f81c600081815260016020526040902054909250151590506118f15760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610611565b60006118ff86836000612045565b905061190b82826122c5565b505050808061191990613531565b915050611845565b50505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190613451565b6001600160a01b0316336001600160a01b0316146119d95760405162461bcd60e51b81526004016106119061346e565b816119f58160ff16600090815260016020526040902054151590565b611a115760405162461bcd60e51b815260040161061190613400565b6117f583836124a8565b60ff83166000908152600160205260408120805482919084908110611a4257611a426134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cd881856128eb565b60ff81166000908152600160208190526040822080549091611aba916135be565b81548110611aca57611aca6134ea565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611af9848484612a65565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611b3257611b326134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611b8981866128eb565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611bef579150610cc59050565b600085815260026020908152604080832060ff881684529091529020611c166001846135be565b81548110611c2657611c266134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610cc5915050565b600083815260026020908152604080832060ff861684529091528120611ca2858585612a65565b63ffffffff1681548110611cb857611cb86134ea565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614611d245760405162461bcd60e51b81526004016106119061354c565b60ff831660009081526001602052604090205415611da25760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b6064820152608401610611565b611dac83826124a8565b611db6838361243f565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611e668660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91692639004134792611edb928c92016135eb565b600060405180830381865afa158015611ef8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f20919081019061364a565b905060005b838110156120115760ff89166000908152600360205260409020805482908110611f5157611f516134ea565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611f9f57611f9f6134ea565b60200260200101511115611fff57670de0b6b3a764000083602001516001600160601b0316838381518110611fd657611fd66134ea565b6020026020010151611fe891906136da565b611ff291906136f9565b611ffc908661371b565b94505b8061200981613531565b915050611f25565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908061210957600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff199096169190921617939093171691909117905561226b565b600086815260026020908152604080832060ff8916845290915281206121306001846135be565b81548110612140576121406134ea565b600091825260209091200180546001600160601b03600160401b9091048116945090915085168314156121795760009350505050611521565b80544363ffffffff908116911614156121b3578054600160401b600160a01b031916600160401b6001600160601b03871602178155612269565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122bb8285612bcb565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122e990846135be565b815481106122f9576122f96134ea565b90600052602060002001905083600014156123285754600160401b90046001600160601b03169150610cc59050565b805460009061234790600160401b90046001600160601b031686612be3565b82549091504363ffffffff90811691161415612384578154600160401b600160a01b031916600160401b6001600160601b03831602178255612436565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b600081511161250d5760405162461bcd60e51b815260206004820152603860248201526000805160206137fa83398151915260448201527f3a206e6f20737472617465676965732070726f766964656400000000000000006064820152608401610611565b805160ff8316600090815260036020908152604090912054906125308383613746565b11156125a05760405162461bcd60e51b815260206004820152604560248201526000805160206137fa83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a401610611565b60005b828110156128e45760005b6125b88284613746565b811015612699578482815181106125d1576125d16134ea565b6020026020010151600001516001600160a01b0316600360008860ff1660ff1681526020019081526020016000208281548110612610576126106134ea565b6000918252602090912001546001600160a01b031614156126875760405162461bcd60e51b815260206004820152603d60248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073616d652073747261746567792032780000006064820152608401610611565b8061269181613531565b9150506125ae565b5060008482815181106126ae576126ae6134ea565b6020026020010151602001516001600160601b0316116127335760405162461bcd60e51b815260206004820152604660248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a401610611565b60ff851660009081526003602052604090208451859083908110612759576127596134ea565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff87168252600490526040902084518590839081106127be576127be6134ea565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612835576128356134ea565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612892576128926134ea565b6020026020010151600001518684815181106128b0576128b06134ea565b6020026020010151602001516040516128ca929190612c6c565b60405180910390a2806128dc81613531565b9150506125a3565b5050505050565b816000015163ffffffff168163ffffffff1610156129905760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a401610611565b602082015163ffffffff1615806129b65750816020015163ffffffff168163ffffffff16105b612a615760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c401610611565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612b0657600086815260026020908152604080832060ff89168452909152902063ffffffff851690612ab96001846135be565b81548110612ac957612ac96134ea565b60009182526020909120015463ffffffff1611612af457612aeb6001826135be565b92505050611521565b80612afe8161375e565b915050612a84565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e401610611565b60006115216001600160601b03808516908416613775565b600080821215612c0757612bf6826137b4565b612c0090846137d1565b9050610cc5565b612c00828461371b565b803560ff81168114612c2257600080fd5b919050565b600060208284031215612c3957600080fd5b61152182612c11565b60008060408385031215612c5557600080fd5b612c5e83612c11565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612ca357600080fd5b50565b60008060408385031215612cb957600080fd5b612cc283612c11565b91506020830135612cd281612c8e565b809150509250929050565b60008083601f840112612cef57600080fd5b5081356001600160401b03811115612d0657600080fd5b6020830191508360208260051b850101111561203e57600080fd5b600080600080600060608688031215612d3957600080fd5b612d4286612c11565b945060208601356001600160401b0380821115612d5e57600080fd5b612d6a89838a01612cdd565b90965094506040880135915080821115612d8357600080fd5b50612d9088828901612cdd565b969995985093965092949392505050565b60008083601f840112612db357600080fd5b5081356001600160401b03811115612dca57600080fd5b60208301915083602082850101111561203e57600080fd5b60008060008060608587031215612df857600080fd5b8435612e0381612c8e565b93506020850135925060408501356001600160401b03811115612e2557600080fd5b612e3187828801612da1565b95989497509550505050565b600081518084526020808501945080840160005b83811015612e765781516001600160601b031687529582019590820190600101612e51565b509495945050505050565b604081526000612e946040830185612e3d565b82810360208401526124368185612e3d565b60008060408385031215612eb957600080fd5b82359150612ec960208401612c11565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57612f2b83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612eee565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612f8257612f82612f4a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612fb057612fb0612f4a565b604052919050565b60006001600160401b03821115612fd157612fd1612f4a565b5060051b60200190565b60008060408385031215612fee57600080fd5b612ff783612c11565b91506020808401356001600160401b0381111561301357600080fd5b8401601f8101861361302457600080fd5b803561303761303282612fb8565b612f88565b81815260059190911b8201830190838101908883111561305657600080fd5b928401925b828410156130745783358252928401929084019061305b565b80955050505050509250929050565b803563ffffffff81168114612c2257600080fd5b6000806000604084860312156130ac57600080fd5b6130b584613083565b925060208401356001600160401b038111156130d057600080fd5b6130dc86828701612da1565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57835163ffffffff1683529284019291840191600101613105565b60008060006060848603121561313c57600080fd5b61314584612c11565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610cc5565b80356001600160601b0381168114612c2257600080fd5b600080604083850312156131b957600080fd5b6131c283612c11565b9150612ec96020840161318f565b6000806000604084860312156131e557600080fd5b8335925060208401356001600160401b038111156130d057600080fd5b600082601f83011261321357600080fd5b8135602061322361303283612fb8565b82815260069290921b8401810191818101908684111561324257600080fd5b8286015b84811015613291576040818903121561325f5760008081fd5b613267612f60565b813561327281612c8e565b815261327f82860161318f565b81860152835291830191604001613246565b509695505050505050565b600080604083850312156132af57600080fd5b6132b883612c11565b915060208301356001600160401b038111156132d357600080fd5b6132df85828601613202565b9150509250929050565b6000806000606084860312156132fe57600080fd5b61330784612c11565b925061331560208501613083565b9150604084013590509250925092565b60008060006060848603121561333a57600080fd5b8335925061334a60208501612c11565b915061335860408501613083565b90509250925092565b6000806000806080858703121561337757600080fd5b61338085612c11565b935061338e60208601613083565b93969395505050506040820135916060013590565b6000806000606084860312156133b857600080fd5b6133c184612c11565b92506133cf6020850161318f565b915060408401356001600160401b038111156133ea57600080fd5b6133f686828701613202565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561346357600080fd5b815161152181612c8e565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561351257600080fd5b6115218261318f565b634e487b7160e01b600052601160045260246000fd5b60006000198214156135455761354561351b565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156135d0576135d061351b565b500390565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b03808616845260206040818601528286548085526060870191508760005282600020945060005b8181101561363c57855485168352600195860195928401920161361e565b509098975050505050505050565b6000602080838503121561365d57600080fd5b82516001600160401b0381111561367357600080fd5b8301601f8101851361368457600080fd5b805161369261303282612fb8565b81815260059190911b820183019083810190878311156136b157600080fd5b928401925b828410156136cf578351825292840192908401906136b6565b979650505050505050565b60008160001904831182151516156136f4576136f461351b565b500290565b60008261371657634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b0380831681851680830382111561373d5761373d61351b565b01949350505050565b600082198211156137595761375961351b565b500190565b60008161376d5761376d61351b565b506000190190565b60008083128015600160ff1b8501841216156137935761379361351b565b6001600160ff1b03840183138116156137ae576137ae61351b565b50500390565b6000600160ff1b8214156137ca576137ca61351b565b5060000390565b60006001600160601b03838116908316818110156137f1576137f161351b565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a264697066735822122013e43aa0d17be9068c90a8cc3e1e30a67f8fb3af90dd77b77812e62b135f0e1364736f6c634300080c0033","storage":{}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122035f03db22cb73fc5cdc009d8cb10aa3fb88ffe01e5760e1af6178cd53c67595f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000424242424242424242424242424242424242424281565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ef27d84673f8fb0a3acb412819d09dde9de413187461a072f3d1f27b860910e564736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9e545e3c0baab3e08cdfd552c960a1050f373042":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220726e525ba4195f70768543b6eb94d022704c3702dcb1ca686df0d56fdf9f8a4864736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220b21976f06ef02c2cd93d153abeebc384346023ec0dc78005b008777a8176aa1764736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004614835565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a236600461489b565b6109ce565b6103ba6103b5366004614835565b610a90565b60405161036491906148f6565b6103da6103d5366004614993565b610df9565b005b6103da6103ea3660046149e6565b610f3e565b6103da6103fd366004614a0a565b610ff1565b6103da610410366004614a4b565b6110a8565b6103da610423366004614a64565b6111e7565b61035a6104363660046149e6565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a0a565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614acf565b611229565b6103da6104bc366004614a0a565b61136d565b61035a6104cf3660046149e6565b609b6020526000908152604090205481565b6103da6104ef366004614b76565b61141d565b61051b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149e6565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149e6565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e73565b611641565b610575610606366004614eaf565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ee0565b611671565b6103da610644366004614a4b565b61170c565b61051b6106573660046149e6565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149e6565b61171d565b6103da61173e565b61035a61069b366004614f6f565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615050565b611752565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150e0565b61197e565b604051610364919061516a565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da61073836600461517d565b611a58565b61035a61074b3660046149e6565b609f6020526000908152604090205481565b61051b7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b610575610792366004614a4b565b609e6020526000908152604090205460ff1681565b6105756107b53660046151b2565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149e6565b60a16020526000908152604090205481565b61086e61080c3660046149e6565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151de565b611b2a565b61035a62034bc081565b6108d46108cf3660046149e6565b611be3565b60405161036492919061525f565b6103ba6108f03660046149e6565b611f9b565b6103da610903366004615284565b61245f565b6103da6109163660046152dc565b61257c565b6103da6109293660046149e6565b61260d565b61035a612683565b6103da610944366004614a4b565b6126c1565b609d54600090815b838110156109c657600060a16000878785818110610971576109716152f8565b905060200201602081019061098691906149e6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf81615324565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc9061533f565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c18565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b436152f8565b9050602002810190610b559190615376565b610b63906020810190615396565b9050878783818110610b7757610b776152f8565b9050602002810190610b899190615376565b610b939080615396565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b6152f8565b9050602002810190610c2d9190615376565b610c3e9060608101906040016149e6565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd16152f8565b9050602002810190610ce39190615376565b610cf49060608101906040016149e6565b8a8a86818110610d0657610d066152f8565b9050602002810190610d189190615376565b610d229080615396565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d686152f8565b9050602002810190610d7a9190615376565b610d88906020810190615396565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061281d92505050565b838281518110610dd157610dd16152f8565b602090810291909101015280610de681615324565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612ddd565b604080518082019091526060815260006020820152610eb43380836000612fd0565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153df565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f30929190615431565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615460565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc9061547d565b610fee81613266565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806110505750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b61106c5760405162461bcd60e51b8152600401610abc906154c7565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561335d565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190615524565b6111305760405162461bcd60e51b8152600401610abc90615541565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133d8565b6110a184848484613432565b6001600160a01b0383166000908152609b602052604081205461122085828686611b2a565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613658565b6112fb613742565b609755611307896137d9565b6113108661382b565b61131c85858585613432565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806113cc5750336001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616145b6113e85760405162461bcd60e51b8152600401610abc906154c7565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613925565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be6152f8565b90506020028101906114d09190615589565b8989848181106114e2576114e26152f8565b90506020028101906114f49190615396565b898986818110611506576115066152f8565b9050602002013588888781811061151f5761151f6152f8565b9050602002016020810190611534919061559f565b6139a0565b61154281615324565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190615524565b6116025760405162461bcd60e51b8152600401610abc90615541565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615630565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139a0565b5050600160c95550505050565b6117146133d8565b610fee8161382b565b6001600160a01b039081166000818152609a60205260409020549091161490565b6117466133d8565b61175060006137d9565b565b42836020015110156117d65760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117df8561155a565b156118685760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b6118718461171d565b6118fd5760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119398783888860200151611b2a565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611969908890839061418a565b61197587878686612fd0565b50505050505050565b6060600082516001600160401b0381111561199b5761199b614c18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a0257611a026152f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a3d57611a3d6152f8565b6020908102919091010152611a5181615324565b90506119ca565b611a613361171d565b611ae35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b1e929190615431565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611ba0612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6909116906360f4062b90602401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190615643565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0f91908101906156b7565b9150915060008313611d2657909590945092505050565b606080835160001415611de0576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611d9b57611d9b6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611dcf57611dcf6152f8565b602002602001018181525050611f8e565b8351611ded906001615771565b6001600160401b03811115611e0457611e04614c18565b604051908082528060200260200182016040528015611e2d578160200160208202803683370190505b50915081516001600160401b03811115611e4957611e49614c18565b604051908082528060200260200182016040528015611e72578160200160208202803683370190505b50905060005b8451811015611f0c57848181518110611e9357611e936152f8565b6020026020010151838281518110611ead57611ead6152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611edf57611edf6152f8565b6020026020010151828281518110611ef957611ef96152f8565b6020908102919091010152600101611e78565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f319190615789565b81518110611f4157611f416152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f719190615789565b81518110611f8157611f816152f8565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fc75760405162461bcd60e51b8152600401610abc9061533f565b611fd08361155a565b6120505760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120598361171d565b156120cc5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a60205260409020549091169033148061217b5750336001600160a01b038216145b806121a257506001600160a01b038181166000908152609960205260409020600101541633145b6122145760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061222086611be3565b9092509050336001600160a01b0387161461227657826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516122f8576040805160008152602081019091529450612456565b81516001600160401b0381111561231157612311614c18565b60405190808252806020026020018201604052801561233a578160200160208202803683370190505b50945060005b8251811015612454576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123a0576123a06152f8565b6020026020010151826000815181106123bb576123bb6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106123ed576123ed6152f8565b602002602001015181600081518110612408576124086152f8565b60200260200101818152505061242189878b858561281d565b888481518110612433576124336152f8565b6020026020010181815250505050808061244c90615324565b915050612340565b505b50505050919050565b6124683361155a565b156124e65760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6124ef8361171d565b6125705760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fd0565b6125853361171d565b6126035760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612ddd565b6126156133d8565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137d9565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156126b4575060975490565b6126bc613742565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190615460565b6001600160a01b0316336001600160a01b0316146127685760405162461bcd60e51b8152600401610abc9061547d565b6066541981196066541916146127e65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128b45760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b825161293e5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612ceb576001600160a01b03861615612997576129978688868481518110612970576129706152f8565b602002602001015186858151811061298a5761298a6152f8565b602002602001015161335d565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129c7576129c76152f8565b60200260200101516001600160a01b03161415612a90577f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031663beffbb8988858481518110612a2057612a206152f8565b60200260200101516040518363ffffffff1660e01b8152600401612a599291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050612ce3565b846001600160a01b0316876001600160a01b03161480612b6257507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639b4da03d858381518110612aec57612aec6152f8565b60200260200101516040518263ffffffff1660e01b8152600401612b1f91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190615524565b155b612c2e5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612c7057612c706152f8565b6020026020010151868581518110612c8a57612c8a6152f8565b60200260200101516040518463ffffffff1660e01b8152600401612cb0939291906157a0565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b505050505b600101612941565b506001600160a01b0386166000908152609f60205260408120805491829190612d1383615324565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d7b82611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612dc990839085906157c4565b60405180910390a198975050505050505050565b6213c680612df160608301604084016157dd565b63ffffffff161115612ea65760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612ee290606084019084016157dd565b63ffffffff161015612f785760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612f9c828261581a565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b1e9084906153df565b60665460009060019081161415612ff95760405162461bcd60e51b8152600401610abc9061533f565b6001600160a01b0380851660009081526099602052604090206001015416801580159061302f5750336001600160a01b03821614155b80156130445750336001600160a01b03861614155b156131b15742846020015110156130c35760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561315d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff1916600117905585015161319e9088908890859088906109ce565b90506131af8282876000015161418a565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061321088611be3565b9150915060005b82518110156113625761325e888a858481518110613237576132376152f8565b6020026020010151858581518110613251576132516152f8565b6020026020010151613925565b600101613217565b6001600160a01b0381166132f45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613394908490615789565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157a0565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134ba5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136505760008686838181106134da576134da6152f8565b90506020020160208101906134ef91906149e6565b6001600160a01b038116600090815260a1602052604081205491925086868581811061351d5761351d6152f8565b90506020020135905062034bc08111156135e15760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a15050508061364990615324565b90506134be565b505050505050565b6065546001600160a01b031615801561367957506001600160a01b03821615155b6136fb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261373e82613266565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138e45760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061395c908490615771565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157a0565b60006139ae6105f38761587d565b6000818152609e602052604090205490915060ff16613a2f5760405162461bcd60e51b815260206004820152604360248201526000805160206159b583398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a4460a0890160808a016157dd565b63ffffffff16613a549190615771565b1115613adc5760405162461bcd60e51b815260206004820152605f60248201526000805160206159b583398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613aec60608701604088016149e6565b6001600160a01b0316336001600160a01b031614613b795760405162461bcd60e51b815260206004820152605060248201526000805160206159b583398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613bfb57613b8c60a0870187615396565b85149050613bfb5760405162461bcd60e51b815260206004820152604260248201526000805160206159b583398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d605760005b613c2760a0880188615396565b9050811015613d5a574360a16000613c4260a08b018b615396565b85818110613c5257613c526152f8565b9050602002016020810190613c6791906149e6565b6001600160a01b03168152602081019190915260400160002054613c9160a08a0160808b016157dd565b63ffffffff16613ca19190615771565b1115613cbf5760405162461bcd60e51b8152600401610abc9061588f565b613d52613ccf60208901896149e6565b33613cdd60a08b018b615396565b85818110613ced57613ced6152f8565b9050602002016020810190613d0291906149e6565b613d0f60c08c018c615396565b86818110613d1f57613d1f6152f8565b905060200201358a8a87818110613d3857613d386152f8565b9050602002016020810190613d4d91906149e6565b614344565b600101613c1a565b5061414f565b336000908152609a60205260408120546001600160a01b0316905b613d8860a0890189615396565b905081101561414c574360a16000613da360a08c018c615396565b85818110613db357613db36152f8565b9050602002016020810190613dc891906149e6565b6001600160a01b03168152602081019190915260400160002054613df260a08b0160808c016157dd565b63ffffffff16613e029190615771565b1115613e205760405162461bcd60e51b8152600401610abc9061588f565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e4260a08a018a615396565b83818110613e5257613e526152f8565b9050602002016020810190613e6791906149e6565b6001600160a01b03161415613fb7576000613e8560208a018a6149e6565b905060006001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616630e81073c83613ec660c08e018e615396565b87818110613ed657613ed66152f8565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e9190615643565b6001600160a01b038084166000908152609a6020526040902054919250168015613faf57613faf8184613f8460a08f018f615396565b88818110613f9457613f946152f8565b9050602002016020810190613fa991906149e6565b85613925565b505050614144565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c4623ea133898985818110613ff957613ff96152f8565b905060200201602081019061400e91906149e6565b61401b60a08d018d615396565b8681811061402b5761402b6152f8565b905060200201602081019061404091906149e6565b61404d60c08e018e615396565b8781811061405d5761405d6152f8565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505050506001600160a01b038216156141445761414482336140f660a08c018c615396565b85818110614106576141066152f8565b905060200201602081019061411b91906149e6565b61412860c08d018d615396565b86818110614138576141386152f8565b90506020020135613925565b600101613d7b565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141ca9086908690600401615917565b602060405180830381865afa1580156141e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420b9190615974565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142b88383614484565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156143ef5760405162387b1360e81b81526001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6169063387b1300906143b8908890889087906004016157a0565b600060405180830381600087803b1580156143d257600080fd5b505af11580156143e6573d6000803e3d6000fd5b5050505061447d565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b15801561446957600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b600080600061449385856144a0565b915091506109c681614510565b6000808251604114156144d75760208301516040840151606085015160001a6144cb878285856146cb565b94509450505050614509565b82516040141561450157602083015160408401516144f68683836147b8565b935093505050614509565b506000905060025b9250929050565b60008160048111156145245761452461599e565b141561452d5750565b60018160048111156145415761454161599e565b141561458f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145a3576145a361599e565b14156145f15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b60038160048111156146055761460561599e565b141561465e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b60048160048111156146725761467261599e565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561470257506000905060036147af565b8460ff16601b1415801561471a57508460ff16601c14155b1561472b57506000905060046147af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561477f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147a8576000600192509250506147af565b9150600090505b94509492505050565b6000806001600160ff1b038316816147d560ff86901c601b615771565b90506147e3878288856146cb565b935093505050935093915050565b60008083601f84011261480357600080fd5b5081356001600160401b0381111561481a57600080fd5b6020830191508360208260051b850101111561450957600080fd5b6000806020838503121561484857600080fd5b82356001600160401b0381111561485e57600080fd5b61486a858286016147f1565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b803561489681614876565b919050565b600080600080600060a086880312156148b357600080fd5b85356148be81614876565b945060208601356148ce81614876565b935060408601356148de81614876565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561492e57835183529284019291840191600101614912565b50909695505050505050565b60006060828403121561494c57600080fd5b50919050565b60008083601f84011261496457600080fd5b5081356001600160401b0381111561497b57600080fd5b60208301915083602082850101111561450957600080fd5b6000806000608084860312156149a857600080fd5b6149b2858561493a565b925060608401356001600160401b038111156149cd57600080fd5b6149d986828701614952565b9497909650939450505050565b6000602082840312156149f857600080fd5b8135614a0381614876565b9392505050565b600080600060608486031215614a1f57600080fd5b8335614a2a81614876565b92506020840135614a3a81614876565b929592945050506040919091013590565b600060208284031215614a5d57600080fd5b5035919050565b60008060008060408587031215614a7a57600080fd5b84356001600160401b0380821115614a9157600080fd5b614a9d888389016147f1565b90965094506020870135915080821115614ab657600080fd5b50614ac3878288016147f1565b95989497509550505050565b60008060008060008060008060c0898b031215614aeb57600080fd5b8835614af681614876565b97506020890135614b0681614876565b9650604089013595506060890135945060808901356001600160401b0380821115614b3057600080fd5b614b3c8c838d016147f1565b909650945060a08b0135915080821115614b5557600080fd5b50614b628b828c016147f1565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614b9257600080fd5b88356001600160401b0380821115614ba957600080fd5b614bb58c838d016147f1565b909a50985060208b0135915080821115614bce57600080fd5b614bda8c838d016147f1565b909850965060408b0135915080821115614bf357600080fd5b614bff8c838d016147f1565b909650945060608b0135915080821115614b5557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c5057614c50614c18565b60405290565b604080519081016001600160401b0381118282101715614c5057614c50614c18565b604051601f8201601f191681016001600160401b0381118282101715614ca057614ca0614c18565b604052919050565b63ffffffff81168114610fee57600080fd5b803561489681614ca8565b60006001600160401b03821115614cde57614cde614c18565b5060051b60200190565b600082601f830112614cf957600080fd5b81356020614d0e614d0983614cc5565b614c78565b82815260059290921b84018101918181019086841115614d2d57600080fd5b8286015b84811015614d51578035614d4481614876565b8352918301918301614d31565b509695505050505050565b600082601f830112614d6d57600080fd5b81356020614d7d614d0983614cc5565b82815260059290921b84018101918181019086841115614d9c57600080fd5b8286015b84811015614d515780358352918301918301614da0565b600060e08284031215614dc957600080fd5b614dd1614c2e565b9050614ddc8261488b565b8152614dea6020830161488b565b6020820152614dfb6040830161488b565b604082015260608201356060820152614e1660808301614cba565b608082015260a08201356001600160401b0380821115614e3557600080fd5b614e4185838601614ce8565b60a084015260c0840135915080821115614e5a57600080fd5b50614e6784828501614d5c565b60c08301525092915050565b600060208284031215614e8557600080fd5b81356001600160401b03811115614e9b57600080fd5b614ea784828501614db7565b949350505050565b600060208284031215614ec157600080fd5b813560ff81168114614a0357600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614ef857600080fd5b85356001600160401b0380821115614f0f57600080fd5b9087019060e0828a031215614f2357600080fd5b90955060208701359080821115614f3957600080fd5b50614f46888289016147f1565b909550935050604086013591506060860135614f6181614ed2565b809150509295509295909350565b60008060408385031215614f8257600080fd5b8235614f8d81614876565b91506020830135614f9d81614876565b809150509250929050565b600060408284031215614fba57600080fd5b614fc2614c56565b905081356001600160401b0380821115614fdb57600080fd5b818401915084601f830112614fef57600080fd5b813560208282111561500357615003614c18565b615015601f8301601f19168201614c78565b9250818352868183860101111561502b57600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561506857600080fd5b853561507381614876565b9450602086013561508381614876565b935060408601356001600160401b038082111561509f57600080fd5b6150ab89838a01614fa8565b945060608801359150808211156150c157600080fd5b506150ce88828901614fa8565b95989497509295608001359392505050565b600080604083850312156150f357600080fd5b82356150fe81614876565b915060208301356001600160401b0381111561511957600080fd5b61512585828601614ce8565b9150509250929050565b600081518084526020808501945080840160005b8381101561515f57815187529582019590820190600101615143565b509495945050505050565b602081526000614a03602083018461512f565b6000806020838503121561519057600080fd5b82356001600160401b038111156151a657600080fd5b61486a85828601614952565b600080604083850312156151c557600080fd5b82356151d081614876565b946020939093013593505050565b600080600080608085870312156151f457600080fd5b84356151ff81614876565b935060208501359250604085013561521681614876565b9396929550929360600135925050565b600081518084526020808501945080840160005b8381101561515f5781516001600160a01b03168752958201959082019060010161523a565b6040815260006152726040830185615226565b8281036020840152611220818561512f565b60008060006060848603121561529957600080fd5b83356152a481614876565b925060208401356001600160401b038111156152bf57600080fd5b6152cb86828701614fa8565b925050604084013590509250925092565b6000606082840312156152ee57600080fd5b614a03838361493a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153385761533861530e565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261538c57600080fd5b9190910192915050565b6000808335601e198436030181126153ad57600080fd5b8301803591506001600160401b038211156153c757600080fd5b6020019150600581901b360382131561450957600080fd5b6060810182356153ee81614876565b6001600160a01b03908116835260208401359061540a82614876565b166020830152604083013561541e81614ca8565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561547257600080fd5b8151614a0381614876565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561553657600080fd5b8151614a0381614ed2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261538c57600080fd5b6000602082840312156155b157600080fd5b8135614a0381614ed2565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261561760e0850182615226565b905060c083015184820360c0860152611220828261512f565b602081526000614a0360208301846155bc565b60006020828403121561565557600080fd5b5051919050565b600082601f83011261566d57600080fd5b8151602061567d614d0983614cc5565b82815260059290921b8401810191818101908684111561569c57600080fd5b8286015b84811015614d5157805183529183019183016156a0565b600080604083850312156156ca57600080fd5b82516001600160401b03808211156156e157600080fd5b818501915085601f8301126156f557600080fd5b81516020615705614d0983614cc5565b82815260059290921b8401810191818101908984111561572457600080fd5b948201945b8386101561574b57855161573c81614876565b82529482019490820190615729565b9188015191965090935050508082111561576457600080fd5b506151258582860161565c565b600082198211156157845761578461530e565b500190565b60008282101561579b5761579b61530e565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ea760408301846155bc565b6000602082840312156157ef57600080fd5b8135614a0381614ca8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582581614876565b61582f81836157fa565b5060018101602083013561584281614876565b61584c81836157fa565b50604083013561585b81614ca8565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006158893683614db7565b92915050565b6020808252606e908201526000805160206159b583398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561594b5785810183015185820160600152820161592f565b8181111561595d576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561598657600080fd5b81516001600160e01b031981168114614a0357600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212203a9863b190b0abcf799891a42203a11c6933a165f6897ec6ac670f95b48c927b64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632702747d14610046578063793e1c8e1461006f5780637be6aa6b14610090575b600080fd5b61005961005436600461023e565b6100a3565b6040516100669190610277565b60405180910390f35b61007861dead81565b6040516001600160a01b039091168152602001610066565b61005961009e3660046102c4565b6100fd565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166333cfb7b760e01b1790526060906100f3848261013a565b9150505b92915050565b6040805160048152602481019091526020810180516001600160e01b031663e481af9d60e01b179052606090610133838261013a565b9392505050565b6060600080846001600160a01b03168460405161015791906102e1565b600060405180830381855afa9150503d8060008114610192576040519150601f19603f3d011682016040523d82523d6000602084013e610197565b606091505b50915091508180156101aa575060008151115b156101cc57808060200190518101906101c39190610342565b925050506100f7565b6040805160018082528183019092526000916020808301908036833701905050905061dead8160008151811061020457610204610407565b6001600160a01b039092166020928302919091019091015292506100f7915050565b6001600160a01b038116811461023b57600080fd5b50565b6000806040838503121561025157600080fd5b823561025c81610226565b9150602083013561026c81610226565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156102b85783516001600160a01b031683529284019291840191600101610293565b50909695505050505050565b6000602082840312156102d657600080fd5b813561013381610226565b6000825160005b8181101561030257602081860181015185830152016102e8565b81811115610311576000828501525b509190910192915050565b634e487b7160e01b600052604160045260246000fd5b805161033d81610226565b919050565b6000602080838503121561035557600080fd5b825167ffffffffffffffff8082111561036d57600080fd5b818501915085601f83011261038157600080fd5b8151818111156103935761039361031c565b8060051b604051601f19603f830116810181811085821117156103b8576103b861031c565b6040529182528482019250838101850191888311156103d657600080fd5b938501935b828510156103fb576103ec85610332565b845293850193928501926103db565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e3e34ad152bd88a05fcf1dad9df4581798acdafb958b376a210422ed18bff22564736f6c634300080c0033","storage":{}},"0xb7278a61aa25c888815afc32ad3cc52ff24fe575":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331b36bd9146100675780633563b0d1146100905780634d2b57fe146100b05780634f739f74146100d05780635c155662146100f0578063cefdc1d414610110575b600080fd5b61007a6100753660046113fa565b610131565b60405161008791906114e8565b60405180910390f35b6100a361009e366004611524565b61024d565b604051610087919061167f565b6100c36100be3660046116f8565b6106e3565b6040516100879190611747565b6100e36100de3660046117df565b6107f8565b60405161008791906118d7565b6101036100fe366004611992565b610f22565b60405161008791906119f5565b61012361011e366004611a2d565b6110ea565b604051610087929190611a64565b606081516001600160401b0381111561014c5761014c611391565b604051908082528060200260200182016040528015610175578160200160208202803683370190505b50905060005b825181101561024657836001600160a01b03166313542a4e8483815181106101a5576101a5611a85565b60200260200101516040518263ffffffff1660e01b81526004016101d891906001600160a01b0391909116815260200190565b602060405180830381865afa1580156101f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102199190611a9b565b82828151811061022b5761022b611a85565b602090810291909101015261023f81611aca565b905061017b565b5092915050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b39190611ae5565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190611ae5565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190611ae5565b9050600086516001600160401b0381111561039c5761039c611391565b6040519080825280602002602001820160405280156103cf57816020015b60608152602001906001900390816103ba5790505b50905060005b87518110156106d75760008882815181106103f2576103f2611a85565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190611b02565b905080516001600160401b0381111561049657610496611391565b6040519080825280602002602001820160405280156104e157816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816104b45790505b508484815181106104f4576104f4611a85565b602002602001018190525060005b81518110156106c1576040518060600160405280876001600160a01b03166347b314e885858151811061053757610537611a85565b60200260200101516040518263ffffffff1660e01b815260040161055d91815260200190565b602060405180830381865afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e9190611ae5565b6001600160a01b031681526020018383815181106105be576105be611a85565b60200260200101518152602001896001600160a01b031663fa28c6278585815181106105ec576105ec611a85565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa158015610648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066c9190611b92565b6001600160601b031681525085858151811061068a5761068a611a85565b602002602001015182815181106106a3576106a3611a85565b602002602001018190525080806106b990611aca565b915050610502565b50505080806106cf90611aca565b9150506103d5565b50979650505050505050565b606081516001600160401b038111156106fe576106fe611391565b604051908082528060200260200182016040528015610727578160200160208202803683370190505b50905060005b825181101561024657836001600160a01b031663296bb06484838151811061075757610757611a85565b60200260200101516040518263ffffffff1660e01b815260040161077d91815260200190565b602060405180830381865afa15801561079a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190611ae5565b8282815181106107d0576107d0611a85565b6001600160a01b03909216602092830291909101909101526107f181611aca565b905061072d565b6108236040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190611ae5565b90506108b46040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e906108e4908b9089908990600401611bbb565b600060405180830381865afa158015610901573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109299190810190611c05565b81526040516340e03a8160e11b81526001600160a01b038316906381c075029061095b908b908b908b90600401611cbc565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190611c05565b6040820152856001600160401b038111156109bd576109bd611391565b6040519080825280602002602001820160405280156109f057816020015b60608152602001906001900390816109db5790505b50606082015260005b60ff8116871115610e33576000856001600160401b03811115610a1e57610a1e611391565b604051908082528060200260200182016040528015610a47578160200160208202803683370190505b5083606001518360ff1681518110610a6157610a61611a85565b602002602001018190525060005b86811015610d335760008c6001600160a01b03166304ec63518a8a85818110610a9a57610a9a611a85565b905060200201358e88600001518681518110610ab857610ab8611a85565b60200260200101516040518463ffffffff1660e01b8152600401610af59392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190611ce5565b90506001600160c01b038116610bde5760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff16818110610bf357610bf3611a85565b6001600160c01b03841692013560f81c9190911c600190811614159050610d2057856001600160a01b031663dd9846b98a8a85818110610c3557610c35611a85565b905060200201358d8d8860ff16818110610c5157610c51611a85565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611d0e565b85606001518560ff1681518110610ce457610ce4611a85565b60200260200101518481518110610cfd57610cfd611a85565b63ffffffff9092166020928302919091019091015282610d1c81611aca565b9350505b5080610d2b81611aca565b915050610a6f565b506000816001600160401b03811115610d4e57610d4e611391565b604051908082528060200260200182016040528015610d77578160200160208202803683370190505b50905060005b82811015610df85784606001518460ff1681518110610d9e57610d9e611a85565b60200260200101518181518110610db757610db7611a85565b6020026020010151828281518110610dd157610dd1611a85565b63ffffffff9092166020928302919091019091015280610df081611aca565b915050610d7d565b508084606001518460ff1681518110610e1357610e13611a85565b602002602001018190525050508080610e2b90611d2b565b9150506109f9565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190611ae5565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610ecb908b908b908e90600401611d4b565b600060405180830381865afa158015610ee8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f109190810190611c05565b60208301525098975050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401610f54929190611d75565b600060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f999190810190611c05565b9050600084516001600160401b03811115610fb657610fb6611391565b604051908082528060200260200182016040528015610fdf578160200160208202803683370190505b50905060005b85518110156110e057866001600160a01b03166304ec635187838151811061100f5761100f611a85565b60200260200101518786858151811061102a5761102a611a85565b60200260200101516040518463ffffffff1660e01b81526004016110679392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a89190611ce5565b6001600160c01b03168282815181106110c3576110c3611a85565b6020908102919091010152806110d881611aca565b915050610fe5565b5095945050505050565b604080516001808252818301909252600091606091839160208083019080368337019050509050848160008151811061112557611125611a85565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e906111619088908690600401611d75565b600060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a69190810190611c05565b6000815181106111b8576111b8611a85565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015611224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112489190611ce5565b6001600160c01b03169050600061125e8261127c565b90508161126c8a838a61024d565b9550955050505050935093915050565b606060008061128a84611348565b61ffff166001600160401b038111156112a5576112a5611391565b6040519080825280601f01601f1916602001820160405280156112cf576020820181803683370190505b5090506000805b8251821080156112e7575061010081105b1561133e576001811b93508584161561132e578060f81b83838151811061131057611310611a85565b60200101906001600160f81b031916908160001a9053508160010191505b61133781611aca565b90506112d6565b5090949350505050565b6000805b82156113735761135d600184611d94565b909216918061136b81611dab565b91505061134c565b92915050565b6001600160a01b038116811461138e57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156113cf576113cf611391565b604052919050565b60006001600160401b038211156113f0576113f0611391565b5060051b60200190565b6000806040838503121561140d57600080fd5b823561141881611379565b91506020838101356001600160401b0381111561143457600080fd5b8401601f8101861361144557600080fd5b8035611458611453826113d7565b6113a7565b81815260059190911b8201830190838101908883111561147757600080fd5b928401925b8284101561149e57833561148f81611379565b8252928401929084019061147c565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156114dd578151875295820195908201906001016114c1565b509495945050505050565b6020815260006114fb60208301846114ad565b9392505050565b63ffffffff8116811461138e57600080fd5b803561151f81611502565b919050565b60008060006060848603121561153957600080fd5b833561154481611379565b92506020848101356001600160401b038082111561156157600080fd5b818701915087601f83011261157557600080fd5b81358181111561158757611587611391565b611599601f8201601f191685016113a7565b915080825288848285010111156115af57600080fd5b80848401858401376000848284010152508094505050506115d260408501611514565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015611671578385038a52825180518087529087019087870190845b8181101561165c57835180516001600160a01b031684528a8101518b8501526040908101516001600160601b03169084015292890192606090920191600101611618565b50509a87019a955050918501916001016115fa565b509298975050505050505050565b6020815260006114fb60208301846115db565b600082601f8301126116a357600080fd5b813560206116b3611453836113d7565b82815260059290921b840181019181810190868411156116d257600080fd5b8286015b848110156116ed57803583529183019183016116d6565b509695505050505050565b6000806040838503121561170b57600080fd5b823561171681611379565b915060208301356001600160401b0381111561173157600080fd5b61173d85828601611692565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156117885783516001600160a01b031683529284019291840191600101611763565b50909695505050505050565b60008083601f8401126117a657600080fd5b5081356001600160401b038111156117bd57600080fd5b6020830191508360208260051b85010111156117d857600080fd5b9250929050565b600080600080600080608087890312156117f857600080fd5b863561180381611379565b9550602087013561181381611502565b945060408701356001600160401b038082111561182f57600080fd5b818901915089601f83011261184357600080fd5b81358181111561185257600080fd5b8a602082850101111561186457600080fd5b60208301965080955050606089013591508082111561188257600080fd5b5061188f89828a01611794565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b838110156114dd57815163ffffffff16875295820195908201906001016118b5565b6000602080835283516080828501526118f360a08501826118a1565b905081850151601f198086840301604087015261191083836118a1565b9250604087015191508086840301606087015261192d83836118a1565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b8281101561198457848783030184526119728287516118a1565b95880195938801939150600101611958565b509998505050505050505050565b6000806000606084860312156119a757600080fd5b83356119b281611379565b925060208401356001600160401b038111156119cd57600080fd5b6119d986828701611692565b92505060408401356119ea81611502565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561178857835183529284019291840191600101611a11565b600080600060608486031215611a4257600080fd5b8335611a4d81611379565b92506020840135915060408401356119ea81611502565b828152604060208201526000611a7d60408301846115db565b949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611aad57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611ade57611ade611ab4565b5060010190565b600060208284031215611af757600080fd5b81516114fb81611379565b60006020808385031215611b1557600080fd5b82516001600160401b03811115611b2b57600080fd5b8301601f81018513611b3c57600080fd5b8051611b4a611453826113d7565b81815260059190911b82018301908381019087831115611b6957600080fd5b928401925b82841015611b8757835182529284019290840190611b6e565b979650505050505050565b600060208284031215611ba457600080fd5b81516001600160601b03811681146114fb57600080fd5b63ffffffff84168152604060208201819052810182905260006001600160fb1b03831115611be857600080fd5b8260051b8085606085013760009201606001918252509392505050565b60006020808385031215611c1857600080fd5b82516001600160401b03811115611c2e57600080fd5b8301601f81018513611c3f57600080fd5b8051611c4d611453826113d7565b81815260059190911b82018301908381019087831115611c6c57600080fd5b928401925b82841015611b87578351611c8481611502565b82529284019290840190611c71565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000611cdc604083018486611c93565b95945050505050565b600060208284031215611cf757600080fd5b81516001600160c01b03811681146114fb57600080fd5b600060208284031215611d2057600080fd5b81516114fb81611502565b600060ff821660ff811415611d4257611d42611ab4565b60010192915050565b604081526000611d5f604083018587611c93565b905063ffffffff83166020830152949350505050565b63ffffffff83168152604060208201526000611a7d60408301846114ad565b600082821015611da657611da6611ab4565b500390565b600061ffff80831681811415611dc357611dc3611ab4565b600101939250505056fea2646970667358221220a2edd1846f1c753b288c7cf2dcc7e6716602845aa7f1c341284fa4c0c4a4612064736f6c634300080c0033","storage":{}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea26469706673582212206dc2c0f44c94866033a128f2fc9ced237ec5b2ff470e7fd3ff0497128c9e0ed764736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x610178da211fef7d417bc0e6fed39f05609ad788"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x9635f643e140090a9a8dcd712ed6285858cebef","0x64":"0xde0b6b3a7640000","0x65":"0x3635c9adc5dea00000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x9d":"0xa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0x3d2729dff03bf559da35a983e55814217363c2a44a7ea59bdf688ab8754ea49d":"0x1","0x6e45a9ad53caf7293849c96e5070a246e20a7cc2986b7660b3fb63e30ab898fc":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220518767f02bbe792c716d0287095ada64b05cd36824c2ecc66bcd5c5ebe061cd664736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":57,"balance":"0x21e197e7f576f0e4457","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122051d3db49d69a1a9d2fe6d1c725e23ef51daddc65039cc9dce834376d22db8dcc64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x9e545e3c0baab3e08cdfd552c960a1050f373042","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0x7"}}},"best_block_number":"0xb"} diff --git a/contracts/src/core/AlignedLayerServiceManager.sol b/contracts/src/core/AlignedLayerServiceManager.sol index 3cc195ba6..9cc26e165 100644 --- a/contracts/src/core/AlignedLayerServiceManager.sol +++ b/contracts/src/core/AlignedLayerServiceManager.sol @@ -22,6 +22,23 @@ contract AlignedLayerServiceManager is uint256 internal constant THRESHOLD_DENOMINATOR = 100; uint8 internal constant QUORUM_THRESHOLD_PERCENTAGE = 67; + //old NewBatch event, for smooth Operator upgradeability + event NewBatch( + bytes32 indexed batchMerkleRoot, + uint32 taskCreatedBlock, + string batchDataPointer + ); + // EVENTS + event NewBatchV2( + bytes32 indexed batchMerkleRoot, + address senderAddress, + uint32 taskCreatedBlock, + string batchDataPointer + ); + + event BatchVerified(bytes32 indexed batchMerkleRoot, address senderAddress); + event BatcherBalanceUpdated(address indexed batcher, uint256 newBalance); + constructor( IAVSDirectory __avsDirectory, IRewardsCoordinator __rewardsCoordinator, @@ -62,13 +79,16 @@ contract AlignedLayerServiceManager is bytes32 batchMerkleRoot, string calldata batchDataPointer ) external payable { - bytes32 batchIdentifier = keccak256( - abi.encodePacked(batchMerkleRoot, msg.sender) - ); + bytes32 batchIdentifier; + if (block.number < 2_268_375) // TODO set number of blocks + batchIdentifier = batchMerkleRoot; + else + batchIdentifier = keccak256(abi.encodePacked(batchMerkleRoot, msg.sender)); - if (batchesState[batchIdentifier].taskCreatedBlock != 0) { - revert BatchAlreadySubmitted(batchIdentifier); - } + require( + batchesState[batchIdentifier].taskCreatedBlock == 0, + "Batch was already submitted" + ); if (msg.value > 0) { batchersBalances[msg.sender] += msg.value; @@ -89,6 +109,12 @@ contract AlignedLayerServiceManager is batchesState[batchIdentifier] = batchState; + // old event for smooth Operator upgradeability: + emit NewBatch( + batchMerkleRoot, + uint32(block.number), + batchDataPointer + ); emit NewBatchV2( batchMerkleRoot, msg.sender, @@ -97,6 +123,79 @@ contract AlignedLayerServiceManager is ); } + // previous version of this function, for smooth upgradeability + function respondToTask( + // Root is signed as a way to verify the batch was right + bytes32 batchMerkleRoot, + NonSignerStakesAndSignature memory nonSignerStakesAndSignature + ) external { + // address batcherAddress = address(0x7969c5eD335650692Bc04293B07F5BF2e7A673C0); // Devnet + // address batcherAddress = address(0x7577Ec4ccC1E6C529162ec8019A49C13F6DAd98b); // Stage + // address batcherAddress = address(0x815aeCA64a974297942D2Bbf034ABEe22a38A003); // Prod + address batcherAddress = address(0x7969c5eD335650692Bc04293B07F5BF2e7A673C0); + uint256 initialGasLeft = gasleft(); + + /* CHECKING SIGNATURES & WHETHER THRESHOLD IS MET OR NOT */ + + // Note: This is a hacky solidity way to see that the element exists + // Value 0 would mean that the task is in block 0 so this can't happen. + require( + batchesState[batchMerkleRoot].taskCreatedBlock != 0, + "Batch doesn't exists" + ); + + // Check task hasn't been responsed yet + require( + batchesState[batchMerkleRoot].responded == false, + "Batch already responded" + ); + + require( + batchersBalances[batcherAddress] > 0, + "Batcher has no balance" + ); + + batchesState[batchMerkleRoot].responded = true; + + /* CHECKING SIGNATURES & WHETHER THRESHOLD IS MET OR NOT */ + // check that aggregated BLS signature is valid + ( + QuorumStakeTotals memory quorumStakeTotals, + bytes32 _hashOfNonSigners + ) = checkSignatures( + batchMerkleRoot, + batchesState[batchMerkleRoot].taskCreatedBlock, + nonSignerStakesAndSignature + ); + + // check that signatories own at least a threshold percentage of each quourm + require( + quorumStakeTotals.signedStakeForQuorum[0] * THRESHOLD_DENOMINATOR >= + quorumStakeTotals.totalStakeForQuorum[0] * + QUORUM_THRESHOLD_PERCENTAGE, + "Signatories do not own at least threshold percentage of a quorum" + ); + + emit BatchVerified(batchMerkleRoot, batcherAddress); + + // Calculate estimation of gas used, check that batcher has sufficient funds + // and send transaction cost to aggregator. + uint256 finalGasLeft = gasleft(); + // 70k was measured by trial and error until the aggregator got paid a bit over what it needed + uint256 txCost = (initialGasLeft - finalGasLeft + 70000) * tx.gasprice; + + require( + batchersBalances[batcherAddress] >= + txCost, + "Batcher has not sufficient funds for paying this transaction" + ); + + batchersBalances[ + batcherAddress + ] -= txCost; + payable(msg.sender).transfer(txCost); + } + function respondToTaskV2( // (batchMerkleRoot,senderAddress) is signed as a way to verify the batch was right bytes32 batchMerkleRoot, diff --git a/contracts/src/core/IAlignedLayerServiceManager.sol b/contracts/src/core/IAlignedLayerServiceManager.sol index abbc4d201..ec191520b 100644 --- a/contracts/src/core/IAlignedLayerServiceManager.sol +++ b/contracts/src/core/IAlignedLayerServiceManager.sol @@ -34,6 +34,13 @@ interface IAlignedLayerServiceManager { string calldata batchDataPointer ) external payable; + // old respondToTask for smooth upgradeability: + function respondToTask( + bytes32 batchMerkleRoot, + IBLSSignatureChecker.NonSignerStakesAndSignature + memory nonSignerStakesAndSignature + ) external; + function respondToTaskV2( bytes32 batchMerkleRoot, address senderAddress, diff --git a/core/chainio/avs_subscriber.go b/core/chainio/avs_subscriber.go index 1065b018e..575648f02 100644 --- a/core/chainio/avs_subscriber.go +++ b/core/chainio/avs_subscriber.go @@ -4,14 +4,15 @@ import ( "context" "encoding/hex" "fmt" - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - ethcommon "github.com/ethereum/go-ethereum/common" "math/big" "strings" "sync" "time" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + ethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" @@ -64,10 +65,10 @@ func NewAvsSubscriberFromConfig(baseConfig *config.BaseConfig) (*AvsSubscriber, logger: baseConfig.Logger, }, nil } - -func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) (chan error, error) { + +func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) (chan error, error) { // Create a new channel to receive new tasks - internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) + internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) // Subscribe to new tasks sub, err := subscribeToNewTasks(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) @@ -132,8 +133,96 @@ func (s *AvsSubscriber) SubscribeToNewTasks(newTaskCreatedChan chan *servicemana return errorChannel, nil } +func (s *AvsSubscriber) SubscribeToNewTasksV2(newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) (chan error, error) { + // Create a new channel to receive new tasks + internalChannel := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) + + // Subscribe to new tasks + sub, err := subscribeToNewTasksV2(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) + if err != nil { + s.logger.Error("Failed to subscribe to new AlignedLayer tasks", "err", err) + return nil, err + } + + subFallback, err := subscribeToNewTasksV2(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) + if err != nil { + s.logger.Error("Failed to subscribe to new AlignedLayer tasks", "err", err) + return nil, err + } + + // create a new channel to foward errors + errorChannel := make(chan error) + + pollLatestBatchTicker := time.NewTicker(PollLatestBatchInterval) + + // Forward the new tasks to the provided channel + go func() { + defer pollLatestBatchTicker.Stop() + newBatchMutex := &sync.Mutex{} + batchesSet := make(map[[32]byte]struct{}) + for { + select { + case newBatch := <-internalChannel: + s.processNewBatchV2(newBatch, batchesSet, newBatchMutex, newTaskCreatedChan) + case <-pollLatestBatchTicker.C: + latestBatch, err := s.getLatestTaskFromEthereumV2() + if err != nil { + s.logger.Debug("Failed to get latest task from blockchain", "err", err) + continue + } + s.processNewBatchV2(latestBatch, batchesSet, newBatchMutex, newTaskCreatedChan) + } + } + + }() + + // Handle errors and resubscribe + go func() { + for { + select { + case err := <-sub.Err(): + s.logger.Warn("Error in new task subscription", "err", err) + sub.Unsubscribe() + sub, err = subscribeToNewTasksV2(s.AvsContractBindings.ServiceManager, internalChannel, s.logger) + if err != nil { + errorChannel <- err + } + case err := <-subFallback.Err(): + s.logger.Warn("Error in fallback new task subscription", "err", err) + subFallback.Unsubscribe() + subFallback, err = subscribeToNewTasksV2(s.AvsContractBindings.ServiceManagerFallback, internalChannel, s.logger) + if err != nil { + errorChannel <- err + } + } + } + }() + + return errorChannel, nil +} func subscribeToNewTasks( + serviceManager *servicemanager.ContractAlignedLayerServiceManager, + newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch, + logger sdklogging.Logger, +) (event.Subscription, error) { + for i := 0; i < MaxRetries; i++ { + sub, err := serviceManager.WatchNewBatch( + &bind.WatchOpts{}, newTaskCreatedChan, nil, + ) + if err != nil { + logger.Warn("Failed to subscribe to new AlignedLayer tasks", "err", err) + time.Sleep(RetryInterval) + continue + } + + logger.Info("Subscribed to new AlignedLayer tasks") + return sub, nil + } + + return nil, fmt.Errorf("failed to subscribe to new AlignedLayer tasks after %d retries", MaxRetries) +} +func subscribeToNewTasksV2( serviceManager *servicemanager.ContractAlignedLayerServiceManager, newTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, logger sdklogging.Logger, @@ -155,7 +244,27 @@ func subscribeToNewTasks( return nil, fmt.Errorf("failed to subscribe to new AlignedLayer tasks after %d retries", MaxRetries) } -func (s *AvsSubscriber) processNewBatch(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) { +func (s *AvsSubscriber) processNewBatch(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatch, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatch) { + newBatchMutex.Lock() + defer newBatchMutex.Unlock() + + if _, ok := batchesSet[batch.BatchMerkleRoot]; !ok { + s.logger.Info("Received new task", "batchMerkleRoot", hex.EncodeToString(batch.BatchMerkleRoot[:])) + batchesSet[batch.BatchMerkleRoot] = struct{}{} + + newTaskCreatedChan <- batch + + // Remove the batch from the set after RemoveBatchFromSetInterval time + go func() { + time.Sleep(RemoveBatchFromSetInterval) + newBatchMutex.Lock() + delete(batchesSet, batch.BatchMerkleRoot) + newBatchMutex.Unlock() + }() + } +} + +func (s *AvsSubscriber) processNewBatchV2(batch *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, batchesSet map[[32]byte]struct{}, newBatchMutex *sync.Mutex, newTaskCreatedChan chan<- *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) { newBatchMutex.Lock() defer newBatchMutex.Unlock() @@ -164,9 +273,9 @@ func (s *AvsSubscriber) processNewBatch(batch *servicemanager.ContractAlignedLay if _, ok := batchesSet[batchIdentifierHash]; !ok { s.logger.Info("Received new task", - "batchMerkleRoot", hex.EncodeToString(batch.BatchMerkleRoot[:]), - "senderAddress", hex.EncodeToString(batch.SenderAddress[:]), - "batchIdentifierHash", hex.EncodeToString(batchIdentifierHash[:]),) + "batchMerkleRoot", hex.EncodeToString(batch.BatchMerkleRoot[:]), + "senderAddress", hex.EncodeToString(batch.SenderAddress[:]), + "batchIdentifierHash", hex.EncodeToString(batchIdentifierHash[:])) batchesSet[batchIdentifierHash] = struct{}{} newTaskCreatedChan <- batch @@ -184,7 +293,7 @@ func (s *AvsSubscriber) processNewBatch(batch *servicemanager.ContractAlignedLay // getLatestTaskFromEthereum queries the blockchain for the latest task using the FilterLogs method. // The alternative to this is using the FilterNewBatch method from the contract's filterer, but it requires // to iterate over all the logs, which is not efficient and not needed since we only need the latest task. -func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, error) { +func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAlignedLayerServiceManagerNewBatch, error) { latestBlock, err := s.AvsContractBindings.ethClient.BlockNumber(context.Background()) if err != nil { latestBlock, err = s.AvsContractBindings.ethClientFallback.BlockNumber(context.Background()) @@ -233,7 +342,7 @@ func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAli lastLog := logs[len(logs)-1] - var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 + var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatch err = alignedLayerServiceManagerABI.UnpackIntoInterface(&latestTask, "NewBatch", lastLog.Data) if err != nil { return nil, fmt.Errorf("failed to unpack log data: %w", err) @@ -244,6 +353,66 @@ func (s *AvsSubscriber) getLatestTaskFromEthereum() (*servicemanager.ContractAli return &latestTask, nil } +func (s *AvsSubscriber) getLatestTaskFromEthereumV2() (*servicemanager.ContractAlignedLayerServiceManagerNewBatchV2, error) { + latestBlock, err := s.AvsContractBindings.ethClient.BlockNumber(context.Background()) + if err != nil { + latestBlock, err = s.AvsContractBindings.ethClientFallback.BlockNumber(context.Background()) + if err != nil { + return nil, fmt.Errorf("failed to get latest block number: %w", err) + } + } + + var fromBlock uint64 + + if latestBlock < BlockInterval { + fromBlock = 0 + } else { + fromBlock = latestBlock - BlockInterval + } + + alignedLayerServiceManagerABI, err := abi.JSON(strings.NewReader(servicemanager.ContractAlignedLayerServiceManagerMetaData.ABI)) + if err != nil { + return nil, fmt.Errorf("failed to parse ABI: %w", err) + } + + // We just care about the NewBatch event + newBatchEvent := alignedLayerServiceManagerABI.Events["NewBatch"] + if newBatchEvent.ID == (ethcommon.Hash{}) { + return nil, fmt.Errorf("NewBatch event not found in ABI") + } + + query := ethereum.FilterQuery{ + FromBlock: big.NewInt(int64(fromBlock)), + ToBlock: big.NewInt(int64(latestBlock)), + Addresses: []ethcommon.Address{s.AlignedLayerServiceManagerAddr}, + Topics: [][]ethcommon.Hash{{newBatchEvent.ID, {}}}, + } + + logs, err := s.AvsContractBindings.ethClient.FilterLogs(context.Background(), query) + if err != nil { + logs, err = s.AvsContractBindings.ethClientFallback.FilterLogs(context.Background(), query) + if err != nil { + return nil, fmt.Errorf("failed to get logs: %w", err) + } + } + + if len(logs) == 0 { + return nil, fmt.Errorf("no logs found") + } + + lastLog := logs[len(logs)-1] + + var latestTask servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 + err = alignedLayerServiceManagerABI.UnpackIntoInterface(&latestTask, "NewBatchV2", lastLog.Data) + if err != nil { + return nil, fmt.Errorf("failed to unpack log data: %w", err) + } + + // The second topic is the batch merkle root, as it is an indexed variable in the contract + latestTask.BatchMerkleRoot = lastLog.Topics[1] + + return &latestTask, nil +} func (s *AvsSubscriber) WaitForOneBlock(startBlock uint64) error { currentBlock, err := s.AvsContractBindings.ethClient.BlockNumber(context.Background()) diff --git a/core/chainio/avs_writer.go b/core/chainio/avs_writer.go index 837b61434..d59b35164 100644 --- a/core/chainio/avs_writer.go +++ b/core/chainio/avs_writer.go @@ -86,7 +86,36 @@ func (w *AvsWriter) SendTask(context context.Context, batchMerkleRoot [32]byte, return nil } -func (w *AvsWriter) SendAggregatedResponse(batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*common.Hash, error) { +func (w *AvsWriter) SendAggregatedResponse(batchMerkleRoot [32]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*common.Hash, error) { + txOpts := *w.Signer.GetTxOpts() + txOpts.NoSend = true // simulate the transaction + tx, err := w.AvsContractBindings.ServiceManager.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + if err != nil { + // Retry with fallback + tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + if err != nil { + return nil, err + } + } + + // Send the transaction + txOpts.NoSend = false + txOpts.GasLimit = tx.Gas() * 110 / 100 // Add 10% to the gas limit + tx, err = w.AvsContractBindings.ServiceManager.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + if err != nil { + // Retry with fallback + tx, err = w.AvsContractBindings.ServiceManagerFallback.RespondToTask(&txOpts, batchMerkleRoot, nonSignerStakesAndSignature) + if err != nil { + return nil, err + } + } + + txHash := tx.Hash() + + return &txHash, nil +} + +func (w *AvsWriter) SendAggregatedResponseV2(batchMerkleRoot [32]byte, senderAddress [20]byte, nonSignerStakesAndSignature servicemanager.IBLSSignatureCheckerNonSignerStakesAndSignature) (*common.Hash, error) { txOpts := *w.Signer.GetTxOpts() txOpts.NoSend = true // simulate the transaction tx, err := w.AvsContractBindings.ServiceManager.RespondToTaskV2(&txOpts, batchMerkleRoot, senderAddress, nonSignerStakesAndSignature) diff --git a/core/types/signed_task_response.go b/core/types/signed_task_response.go index f3cbb4827..1e5f9870d 100644 --- a/core/types/signed_task_response.go +++ b/core/types/signed_task_response.go @@ -6,6 +6,12 @@ import ( ) type SignedTaskResponse struct { + BatchMerkleRoot [32]byte + BlsSignature bls.Signature + OperatorId eigentypes.OperatorId +} + +type SignedTaskResponseV2 struct { BatchMerkleRoot [32]byte SenderAddress [20]byte BatchIdentifierHash [32]byte diff --git a/docs/3_guides/1.2_SDK_api_reference.md b/docs/3_guides/1.2_SDK_api_reference.md index 79da1aed8..1c14fc170 100644 --- a/docs/3_guides/1.2_SDK_api_reference.md +++ b/docs/3_guides/1.2_SDK_api_reference.md @@ -1,5 +1,24 @@ # Aligned SDK +The Aligned SDK aims to help developers interact with Aligned in a simple way. +Some of its functionalities include submitting and verifying proofs through the Aligned Batcher, as well as checking the +inclusion of the verified proofs on-chain. +This guide provides an overview of the SDK, its installation, usage, and API details. + +You can check the list of supported verifiers [here](../architecture/0_supported_verifiers.md). + +## Installation + +To use this SDK in your Rust project, add the following to your `Cargo.toml`: + +```toml +[dependencies] +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag="v0.6.0" } +``` + +To find the latest release tag go to [releases](https://github.com/yetanotherco/aligned_layer/releases) and copy the +version of the release that has the `latest` badge. + ## API Reference ### `submit` diff --git a/docs/3_guides/2_integrating_aligned_into_your_application.md b/docs/3_guides/2_integrating_aligned_into_your_application.md index abbe46cc1..8b0a279b8 100644 --- a/docs/3_guides/2_integrating_aligned_into_your_application.md +++ b/docs/3_guides/2_integrating_aligned_into_your_application.md @@ -116,12 +116,13 @@ The proof submission and verification can be done either with the SDK or by usin #### Using the SDK -To submit a proof using the SDK, you can use the `submit` function, and then you can use the `verify_proof_onchain` function to check if the proof was correctly verified in Aligned. - +To submit a proof using the SDK, you can use the `submit_and_wait_verification` function. +This function submits the proof to aligned and waits for it to be verified in Aligned. +Alternatively you can call `submit` if you dont want to wait for proof verification. The following code is an example of how to submit a proof using the SDK: ```rust -use aligned_sdk::sdk::{submit, get_next_nonce}; +use aligned_sdk::sdk::{submit_and_wait_verification, get_next_nonce}; use aligned_sdk::types::{ProvingSystemId, VerificationData}; use ethers::prelude::*; @@ -147,13 +148,33 @@ async fn submit_proof_to_aligned( .await .map_err(|e| anyhow::anyhow!("Failed to get next nonce: {:?}", e))?; - submit(BATCHER_URL, &verification_data, wallet, nonce).await - .map_err(|e| anyhow::anyhow!("Failed to submit proof: {:?}", e)) + match submit_and_wait_verification( + BATCHER_URL, + &rpc_url, + Chain::Holesky, + &verification_data, + wallet.clone(), + nonce, + BATCHER_PAYMENTS_ADDRESS + ) + + submit_and_wait_verification( + BATCHER_URL, + RPC_URL, + Chain::Holesky, + &verification_data, + wallet, + nonce, + BATCHER_CONTRACT_ADDRESS + ).await.map_err(|e| anyhow::anyhow!("Failed to submit proof: {:?}", e)) } #[tokio::main] async fn main() { let wallet = // Initialize wallet + + let wallet = wallet.with_chain_id(17000u64) + let proof = // Generate or obtain proof match submit_proof_to_aligned(proof, wallet).await { @@ -163,41 +184,6 @@ async fn main() { } ``` -The following code is an example of how to verify the proof was correctly verified in Aligned using the SDK: - -```rust -use aligned_sdk::sdk::verify_proof_onchain; -use aligned_sdk::types::{AlignedVerificationData, Chain}; -use ethers::prelude::*; -use tokio::time::{sleep, Duration}; - -async fn wait_for_proof_verification( - aligned_verification_data: AlignedVerificationData, - rpc_url: String, -) -> Result<(), anyhow::Error> { - for _ in 0..10 { - if verify_proof_onchain(aligned_verification_data.clone(), Chain::Holesky, rpc_url.as_str()).await.is_ok_and(|r| r) { - println!("Proof verified successfully."); - return Ok(()); - } - println!("Proof not verified yet. Waiting 10 seconds before checking again..."); - sleep(Duration::from_secs(10)).await; - } - anyhow::bail!("Proof verification failed") -} - -#[tokio::main] -async fn main() { - let aligned_verification_data = // Obtain aligned verification data - let rpc_url = "https://ethereum-holesky-rpc.publicnode.com".to_string(); - - match wait_for_proof_verification(aligned_verification_data, rpc_url).await { - Ok(_) => println!("Proof verified"), - Err(err) => println!("Error: {:?}", err), - } -} -``` - You can find an example of the proof submission and verification in the [ZKQuiz Program](../../examples/zkquiz/quiz/script/src/main.rs). This example generates a proof, instantiates a wallet to submit the proof, and then submits the proof to Aligned for verification. It then waits for the proof to be verified in Aligned. diff --git a/docs/3_guides/3_validating_public_input.md b/docs/3_guides/3_validating_public_input.md index 9b0900966..fcb6bbe0a 100644 --- a/docs/3_guides/3_validating_public_input.md +++ b/docs/3_guides/3_validating_public_input.md @@ -10,7 +10,7 @@ This guide assumes you are in the `examples/validating-public-input` directory. ## Generate your ZK Proof -> [!IMPORTANT] +> [!IMPORTANT] > To generate the proof ensure you have [docker](https://www.docker.com/get-started/) installed and the docker daemon running. > This is necessary to ensure deterministic builds of the binary we want to generate a proof of. If not used, builds may differ depending on the system you are running on. To know more about this, check [this link](https://dev.risczero.com/terminology#deterministic-builds) from RiscZero docs. @@ -42,6 +42,7 @@ pragma solidity ^0.8.12; contract FibonacciValidator { address public alignedServiceManager; + address public paymentServiceAddr; bytes32 public fibonacciProgramId; bytes32 public fibonacciProgramIdCommitment = @@ -49,8 +50,9 @@ contract FibonacciValidator { event FibonacciNumbers(uint32 fibN, uint32 fibNPlusOne); - constructor(address _alignedServiceManager) { + constructor(address _alignedServiceManager, address _paymentServiceAddr) { alignedServiceManager = _alignedServiceManager; + paymentServiceAddr = _paymentServiceAddr; } function verifyBatchInclusion( @@ -78,14 +80,15 @@ contract FibonacciValidator { bytes memory proofIsIncluded ) = alignedServiceManager.staticcall( abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", proofCommitment, pubInputCommitment, programIdCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, - verificationDataBatchIndex + verificationDataBatchIndex, + paymentServiceAddr ) ); @@ -116,6 +119,7 @@ contract FibonacciValidator { return (first, second); } } + ``` ### Explanation @@ -146,14 +150,15 @@ require( bytes memory proofIsIncluded ) = alignedServiceManager.staticcall( abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", proofCommitment, pubInputCommitment, programIdCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, - verificationDataBatchIndex + verificationDataBatchIndex, + paymentServiceAddr ) ); @@ -192,6 +197,7 @@ To deploy the contract, first you will need to set up the `.env` file in the con RPC_URL= #You can use publicnode RPC: https://ethereum-holesky-rpc.publicnode.com PRIVATE_KEY= ALIGNED_SERVICE_MANAGER_ADDRESS= #0x58F280BeBE9B34c9939C3C39e0890C81f163B623 for Holesky +PAYMENT_SERVICE_ADDRESS= #0x815aeCA64a974297942D2Bbf034ABEe22a38A003 for Holesky ``` Then, run `make deploy_fibonacci_validator`. diff --git a/docs/operator_guides/0_running_an_operator.md b/docs/operator_guides/0_running_an_operator.md index b0c322214..afbe9d19d 100644 --- a/docs/operator_guides/0_running_an_operator.md +++ b/docs/operator_guides/0_running_an_operator.md @@ -1,9 +1,9 @@ # Register as an Aligned operator in testnet > **CURRENT VERSION:** -> Aligned Operator [v0.5.2](https://github.com/yetanotherco/aligned_layer/releases/tag/v0.5.2) +> Aligned Operator [v0.6.0](https://github.com/yetanotherco/aligned_layer/releases/tag/v0.6.0) -> **IMPORTANT:** +> **IMPORTANT:** > You must be [whitelisted](https://docs.google.com/forms/d/e/1FAIpQLSdH9sgfTz4v33lAvwj6BvYJGAeIshQia3FXz36PFfF-WQAWEQ/viewform) to become an Aligned operator. ## Supported Verifiers @@ -41,7 +41,7 @@ Minimum hardware requirements: To start with, clone the Aligned repository and move inside it ```bash -git clone https://github.com/yetanotherco/aligned_layer.git --branch v0.5.2 +git clone https://github.com/yetanotherco/aligned_layer.git --branch v0.6.0 cd aligned_layer ``` diff --git a/examples/validating-public-input/aligned-integration/Cargo.lock b/examples/validating-public-input/aligned-integration/Cargo.lock index bef1599cd..9a2e89daa 100644 --- a/examples/validating-public-input/aligned-integration/Cargo.lock +++ b/examples/validating-public-input/aligned-integration/Cargo.lock @@ -63,7 +63,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.5.2#f2fac00afac9cb0fa4d07a3aea7cde1825a96419" +source = "git+https://github.com/yetanotherco/aligned_layer?rev=6908110aaa04ec3107f15ab8a8bb2603e7bbead9#6908110aaa04ec3107f15ab8a8bb2603e7bbead9" dependencies = [ "ciborium", "ethers", diff --git a/examples/validating-public-input/aligned-integration/Cargo.toml b/examples/validating-public-input/aligned-integration/Cargo.toml index b14a82ea0..018529fc7 100644 --- a/examples/validating-public-input/aligned-integration/Cargo.toml +++ b/examples/validating-public-input/aligned-integration/Cargo.toml @@ -4,19 +4,9 @@ version = "0.1.0" edition = "2021" [dependencies] -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.5.2" } -tokio = { version = "1.37.0", features = [ - "io-std", - "time", - "macros", - "rt", - "rt-multi-thread", - "sync", -] } -ethers = { tag = "v2.0.15-fix-reconnections", features = [ - "ws", - "rustls", -], git = "https://github.com/yetanotherco/ethers-rs.git" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", rev="6908110aaa04ec3107f15ab8a8bb2603e7bbead9" } +tokio = { version = "1.37.0", features = ["io-std", "time", "macros", "rt", "rt-multi-thread", "sync"] } +ethers = { tag = "v2.0.15-fix-reconnections", features = ["ws", "rustls"], git = "https://github.com/yetanotherco/ethers-rs.git" } serde = { version = "1.0.201", features = ["derive"] } serde_json = "1.0.117" log = "0.4.21" diff --git a/examples/validating-public-input/aligned-integration/src/main.rs b/examples/validating-public-input/aligned-integration/src/main.rs index 1baaab938..1fe767fed 100644 --- a/examples/validating-public-input/aligned-integration/src/main.rs +++ b/examples/validating-public-input/aligned-integration/src/main.rs @@ -50,7 +50,6 @@ async fn main() -> Result<(), SubmitError> { proof_generator_addr, }; - // Create a wallet and set chain id to holesky let wallet = LocalWallet::from_str(WALLET_PRIVATE_KEY) .expect("Failed to create wallet") .with_chain_id(17000u64); @@ -67,6 +66,7 @@ async fn main() -> Result<(), SubmitError> { &verification_data, wallet, nonce, + BATCHER_PAYMENTS_ADDRESS, ) .await?; @@ -77,13 +77,6 @@ async fn main() -> Result<(), SubmitError> { batch_inclusion_data_directory_path ); - info!("Proof submitted to aligned. See the batch in the explorer:"); - - info!( - "https://explorer.alignedlayer.com/batches/0x{}", - hex::encode(aligned_verification_data.batch_merkle_root) - ); - save_response( batch_inclusion_data_directory_path, &aligned_verification_data, diff --git a/examples/validating-public-input/contracts/.env.example b/examples/validating-public-input/contracts/.env.example index 8be214766..8b52b8ba1 100644 --- a/examples/validating-public-input/contracts/.env.example +++ b/examples/validating-public-input/contracts/.env.example @@ -1,3 +1,4 @@ RPC_URL= #You can use publicnode RPC: https://ethereum-holesky-rpc.publicnode.com PRIVATE_KEY= ALIGNED_SERVICE_MANAGER_ADDRESS= #0x58F280BeBE9B34c9939C3C39e0890C81f163B623 for Holesky +PAYMENT_SERVICE_ADDRESS= #0x815aeCA64a974297942D2Bbf034ABEe22a38A003 for Holesky diff --git a/examples/validating-public-input/contracts/deploy.sh b/examples/validating-public-input/contracts/deploy.sh index 108a07a0f..8cdb860f1 100755 --- a/examples/validating-public-input/contracts/deploy.sh +++ b/examples/validating-public-input/contracts/deploy.sh @@ -11,6 +11,11 @@ if [ -z "$ALIGNED_SERVICE_MANAGER_ADDRESS" ]; then exit 1 fi +if [ -z "$PAYMENT_SERVICE_ADDRESS" ]; then + echo "PAYMENT_SERVICE_ADDRESS is not set. Please set it in .env" + exit 1 +fi + if [ -z "$RPC_URL" ]; then echo "RPC_URL is not set. Please set it in .env" exit 1 @@ -25,7 +30,8 @@ forge install forge script script/Deployer.s.sol \ "$ALIGNED_SERVICE_MANAGER_ADDRESS" \ + "$PAYMENT_SERVICE_ADDRESS" \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --broadcast \ - --sig "run(address _alignedServiceManager)" + --sig "run(address _alignedServiceManager,address _paymentServiceAddr)" diff --git a/examples/validating-public-input/contracts/script/Deployer.s.sol b/examples/validating-public-input/contracts/script/Deployer.s.sol index 2efdc7156..5a9d76101 100644 --- a/examples/validating-public-input/contracts/script/Deployer.s.sol +++ b/examples/validating-public-input/contracts/script/Deployer.s.sol @@ -7,11 +7,15 @@ import {FibonacciValidator} from "../src/FibonacciValidator.sol"; contract FibonacciDeployer is Script { function setUp() public {} - function run(address _targetContract) external returns (address) { + function run( + address _alignedServiceManager, + address _paymentServiceAddr + ) external returns (address) { vm.startBroadcast(); FibonacciValidator fibonacciContract = new FibonacciValidator( - _targetContract + _alignedServiceManager, + _paymentServiceAddr ); vm.stopBroadcast(); diff --git a/examples/validating-public-input/contracts/src/FibonacciValidator.sol b/examples/validating-public-input/contracts/src/FibonacciValidator.sol index 8afa39737..29350c9a7 100644 --- a/examples/validating-public-input/contracts/src/FibonacciValidator.sol +++ b/examples/validating-public-input/contracts/src/FibonacciValidator.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.12; contract FibonacciValidator { address public alignedServiceManager; + address public paymentServiceAddr; bytes32 public fibonacciProgramId; bytes32 public fibonacciProgramIdCommitment = @@ -10,8 +11,9 @@ contract FibonacciValidator { event FibonacciNumbers(uint32 fibN, uint32 fibNPlusOne); - constructor(address _alignedServiceManager) { + constructor(address _alignedServiceManager, address _paymentServiceAddr) { alignedServiceManager = _alignedServiceManager; + paymentServiceAddr = _paymentServiceAddr; } function verifyBatchInclusion( @@ -39,14 +41,15 @@ contract FibonacciValidator { bytes memory proofIsIncluded ) = alignedServiceManager.staticcall( abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", proofCommitment, pubInputCommitment, programIdCommitment, proofGeneratorAddr, batchMerkleRoot, merkleProof, - verificationDataBatchIndex + verificationDataBatchIndex, + paymentServiceAddr ) ); diff --git a/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof new file mode 100644 index 000000000..e70545747 Binary files /dev/null and b/examples/validating-public-input/risc_zero/fibonacci_proof_generator/risc_zero_fibonacci.proof differ diff --git a/examples/zkquiz/Makefile b/examples/zkquiz/Makefile index 2846ebc1d..45dfc5324 100644 --- a/examples/zkquiz/Makefile +++ b/examples/zkquiz/Makefile @@ -1,7 +1,7 @@ deploy_verifier: @. ./contracts/.env && . ./contracts/deploy.sh -CONTRACT_ADDRESS=0x8dB9e6f1393c3486F30181d606312ec632189621 +CONTRACT_ADDRESS=0xA828f1463074d26FB761c662F80194f5dB2d31D0 RPC_URL=https://ethereum-holesky-rpc.publicnode.com VERIFICATION_DATA=./aligned_verification_data/0a1fab5df88a71e48633cbdeedc8d1a234b790d15a8a2fd04cd6a03c1e05b5ef_212.json diff --git a/examples/zkquiz/contracts/.env.example b/examples/zkquiz/contracts/.env.example index 54eb1f76b..0e0482ae6 100644 --- a/examples/zkquiz/contracts/.env.example +++ b/examples/zkquiz/contracts/.env.example @@ -1,4 +1,5 @@ RPC_URL= PRIVATE_KEY= ALIGNED_SERVICE_MANAGER_ADDRESS=# 0x58F280BeBE9B34c9939C3C39e0890C81f163B623 for Holesky +BATCHER_PAYMENT_SERVICE_ADDRESS=# 0x815aeCA64a974297942D2Bbf034ABEe22a38A003 ETHERSCAN_API_KEY= diff --git a/examples/zkquiz/contracts/deploy.sh b/examples/zkquiz/contracts/deploy.sh index dfb8ae93f..062ec2a0c 100755 --- a/examples/zkquiz/contracts/deploy.sh +++ b/examples/zkquiz/contracts/deploy.sh @@ -11,6 +11,11 @@ if [ -z "$ALIGNED_SERVICE_MANAGER_ADDRESS" ]; then exit 1 fi +if [ -z "$BATCHER_PAYMENT_SERVICE_ADDRESS" ]; then + echo "BATCHER_PAYMENT_SERVICE_ADDRESS is not set. Please set it in .env" + exit 1 +fi + if [ -z "$RPC_URL" ]; then echo "RPC_URL is not set. Please set it in .env" exit 1 @@ -24,8 +29,8 @@ fi forge install forge script script/Deployer.s.sol \ - "$ALIGNED_SERVICE_MANAGER_ADDRESS" \ + "$ALIGNED_SERVICE_MANAGER_ADDRESS" "$BATCHER_PAYMENT_SERVICE_ADDRESS" \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --broadcast \ - --sig "run(address _alignedServiceManager)" + --sig "run(address _alignedServiceManager, address _paymentService)" diff --git a/examples/zkquiz/contracts/script/Deployer.s.sol b/examples/zkquiz/contracts/script/Deployer.s.sol index 189c88b0d..aabc9433b 100644 --- a/examples/zkquiz/contracts/script/Deployer.s.sol +++ b/examples/zkquiz/contracts/script/Deployer.s.sol @@ -7,10 +7,16 @@ import {VerifierContract} from "../src/VerifierContract.sol"; contract CounterScript is Script { function setUp() public {} - function run(address _targetContract) external returns (address) { + function run( + address _alignedServiceManager, + address _paymentService + ) external returns (address) { vm.startBroadcast(); - VerifierContract verifyBatchInclusionCaller = new VerifierContract(_targetContract); + VerifierContract verifyBatchInclusionCaller = new VerifierContract( + _alignedServiceManager, + _paymentService + ); vm.stopBroadcast(); diff --git a/examples/zkquiz/contracts/src/VerifierContract.sol b/examples/zkquiz/contracts/src/VerifierContract.sol index 12adf8e24..aa9900887 100644 --- a/examples/zkquiz/contracts/src/VerifierContract.sol +++ b/examples/zkquiz/contracts/src/VerifierContract.sol @@ -8,14 +8,20 @@ contract VerifierContract is ERC721URIStorage { uint256 private _nextTokenId; address public alignedServiceManager; + address public paymentServiceAddr; - bytes32 public elfCommitment = 0x35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f1; + bytes32 public elfCommitment = + 0x35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f1; // map to check if proof has already been submitted mapping(bytes32 => bool) public mintedProofs; - constructor(address _alignedServiceManager) ERC721("Aligned Layer ZK Quiz", "AZKQ") { + constructor( + address _alignedServiceManager, + address _paymentServiceAddr + ) ERC721("Aligned Layer ZK Quiz", "AZKQ") { alignedServiceManager = _alignedServiceManager; + paymentServiceAddr = _paymentServiceAddr; } function verifyBatchInclusion( @@ -27,25 +33,41 @@ contract VerifierContract is ERC721URIStorage { bytes memory merkleProof, uint256 verificationDataBatchIndex ) external returns (uint256) { - require(elfCommitment == provingSystemAuxDataCommitment, "ELF does not match"); - require(address(proofGeneratorAddr) == msg.sender, "proofGeneratorAddr does not match"); - - bytes32 fullHash = keccak256(abi.encodePacked(proofCommitment, - pubInputCommitment, provingSystemAuxDataCommitment, proofGeneratorAddr)); - require(!mintedProofs[fullHash], "proof already minted"); + require( + elfCommitment == provingSystemAuxDataCommitment, + "ELF does not match" + ); + require( + address(proofGeneratorAddr) == msg.sender, + "proofGeneratorAddr does not match" + ); - (bool callWasSuccessfull, bytes memory proofIsIncluded) = alignedServiceManager.staticcall( - abi.encodeWithSignature( - "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)", + bytes32 fullHash = keccak256( + abi.encodePacked( proofCommitment, pubInputCommitment, provingSystemAuxDataCommitment, - proofGeneratorAddr, - batchMerkleRoot, - merkleProof, - verificationDataBatchIndex + proofGeneratorAddr ) ); + require(!mintedProofs[fullHash], "proof already minted"); + + ( + bool callWasSuccessfull, + bytes memory proofIsIncluded + ) = alignedServiceManager.staticcall( + abi.encodeWithSignature( + "verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256,address)", + proofCommitment, + pubInputCommitment, + provingSystemAuxDataCommitment, + proofGeneratorAddr, + batchMerkleRoot, + merkleProof, + verificationDataBatchIndex, + paymentServiceAddr + ) + ); require(callWasSuccessfull, "static_call failed"); @@ -56,15 +78,19 @@ contract VerifierContract is ERC721URIStorage { uint256 tokenId = _nextTokenId++; _mint(msg.sender, tokenId); - _setTokenURI(tokenId, "ipfs://QmUKviny9x2oQUegyJFFBAUU2q5rvu5CsPzrUaBSDukpHQ"); + _setTokenURI( + tokenId, + "ipfs://QmUKviny9x2oQUegyJFFBAUU2q5rvu5CsPzrUaBSDukpHQ" + ); return tokenId; } - function tokenURI(uint256 tokenId) public override view virtual returns (string memory) { + function tokenURI( + uint256 tokenId + ) public view virtual override returns (string memory) { _requireOwned(tokenId); return "ipfs://QmUKviny9x2oQUegyJFFBAUU2q5rvu5CsPzrUaBSDukpHQ"; } - } diff --git a/examples/zkquiz/quiz/program/Cargo.toml b/examples/zkquiz/quiz/program/Cargo.toml index e00b6ba28..410e66548 100644 --- a/examples/zkquiz/quiz/program/Cargo.toml +++ b/examples/zkquiz/quiz/program/Cargo.toml @@ -6,4 +6,6 @@ edition = "2021" [dependencies] sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.8-testnet" } -tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", branch = "patch-v2.0.2", features = ["sha3"] } +tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", branch = "patch-v2.0.2", features = [ + "sha3", +] } diff --git a/examples/zkquiz/quiz/script/Cargo.lock b/examples/zkquiz/quiz/script/Cargo.lock index e295d8107..61d3fb23c 100644 --- a/examples/zkquiz/quiz/script/Cargo.lock +++ b/examples/zkquiz/quiz/script/Cargo.lock @@ -79,7 +79,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.5.2#f2fac00afac9cb0fa4d07a3aea7cde1825a96419" +source = "git+https://github.com/yetanotherco/aligned_layer?rev=6908110aaa04ec3107f15ab8a8bb2603e7bbead9#6908110aaa04ec3107f15ab8a8bb2603e7bbead9" dependencies = [ "ciborium", "ethers 2.0.14 (git+https://github.com/yetanotherco/ethers-rs.git?tag=v2.0.15-fix-reconnections)", @@ -4984,7 +4984,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.72", ] [[package]] diff --git a/examples/zkquiz/quiz/script/Cargo.toml b/examples/zkquiz/quiz/script/Cargo.toml index b8787ab94..6aa3eb935 100644 --- a/examples/zkquiz/quiz/script/Cargo.toml +++ b/examples/zkquiz/quiz/script/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.1" } -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.5.2" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", rev = "6908110aaa04ec3107f15ab8a8bb2603e7bbead9" } ethers = { tag = "v2.0.15-fix-reconnections", features = [ "ws", "rustls", diff --git a/examples/zkquiz/quiz/script/VerifierContract.json b/examples/zkquiz/quiz/script/VerifierContract.json index 4e8e374d6..9dca47857 100644 --- a/examples/zkquiz/quiz/script/VerifierContract.json +++ b/examples/zkquiz/quiz/script/VerifierContract.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_alignedServiceManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"alignedServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"elfCommitment","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mintedProofs","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"BatchMetadataUpdate","inputs":[{"name":"_fromTokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_toTokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MetadataUpdate","inputs":[{"name":"_tokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60806040527f35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f16009553480156200003557600080fd5b50604051620016bd380380620016bd8339810160408190526200005891620000f5565b6040518060400160405280601581526020017f416c69676e6564204c61796572205a4b205175697a000000000000000000000081525060405180604001604052806004815260200163415a4b5160e01b8152508160009081620000bc9190620001cc565b506001620000cb8282620001cc565b5050600880546001600160a01b0319166001600160a01b0393909316929092179091555062000298565b6000602082840312156200010857600080fd5b81516001600160a01b03811681146200012057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200015257607f821691505b6020821081036200017357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c757600081815260208120601f850160051c81016020861015620001a25750805b601f850160051c820191505b81811015620001c357828155600101620001ae565b5050505b505050565b81516001600160401b03811115620001e857620001e862000127565b6200020081620001f984546200013d565b8462000179565b602080601f8311600181146200023857600084156200021f5750858301515b600019600386901b1c1916600185901b178555620001c3565b600085815260208120601f198616915b82811015620002695788860151825594840194600190910190840162000248565b5085821015620002885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61141580620002a86000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063c87b56dd11610071578063c87b56dd1461021e578063dd3df4bd14610231578063e985e9c514610254578063f19cd88214610267578063fa534dc01461027a57600080fd5b806370a08231146101dd57806395d89b41146101f0578063a22cb465146101f8578063b88d4fde1461020b57600080fd5b80632212d607116100de5780632212d6071461018d57806323b872dd146101a457806342842e0e146101b75780636352211e146101ca57600080fd5b806301ffc9a71461011057806306fdde0314610138578063081812fc1461014d578063095ea7b314610178575b600080fd5b61012361011e366004610e02565b61028d565b60405190151581526020015b60405180910390f35b6101406102b8565b60405161012f9190610e76565b61016061015b366004610e89565b61034a565b6040516001600160a01b03909116815260200161012f565b61018b610186366004610ebe565b610373565b005b61019660095481565b60405190815260200161012f565b61018b6101b2366004610ee8565b610382565b61018b6101c5366004610ee8565b610412565b6101606101d8366004610e89565b610432565b6101966101eb366004610f24565b61043d565b610140610485565b61018b610206366004610f4d565b610494565b61018b610219366004611027565b61049f565b61014061022c366004610e89565b6104b6565b61012361023f366004610e89565b600a6020526000908152604090205460ff1681565b61012361026236600461108f565b6104e1565b600854610160906001600160a01b031681565b6101966102883660046110c2565b61050f565b60006001600160e01b03198216632483248360e11b14806102b257506102b28261080d565b92915050565b6060600080546102c790611154565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390611154565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b5050505050905090565b60006103558261085d565b506000828152600460205260409020546001600160a01b03166102b2565b61037e828233610896565b5050565b6001600160a01b0382166103b157604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103be8383336108a3565b9050836001600160a01b0316816001600160a01b03161461040c576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103a8565b50505050565b61042d8383836040518060200160405280600081525061049f565b505050565b60006102b28261085d565b60006001600160a01b038216610469576040516322718ad960e21b8152600060048201526024016103a8565b506001600160a01b031660009081526003602052604090205490565b6060600180546102c790611154565b61037e33838361099c565b6104aa848484610382565b61040c84848484610a3b565b60606104c18261085d565b506040518060600160405280603581526020016113ab6035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600954146105575760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103a8565b606085901c33146105b45760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103a8565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600a9092529190205460ff16156106515760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103a8565b60085460405160009182916001600160a01b0390911690610682908d908d908d908d908d908d908d9060240161118e565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516106b791906111e2565b600060405180830381855afa9150503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b50915091508161073e5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103a8565b60008180602001905181019061075491906111fe565b9050806107a35760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103a8565b6000848152600a60205260408120805460ff191660011790556007805490826107cb8361121b565b9190505590506107db3382610b64565b6107fd816040518060600160405280603581526020016113ab60359139610bc9565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061083e57506001600160e01b03198216635b5e139f60e01b145b806102b257506301ffc9a760e01b6001600160e01b03198316146102b2565b6000818152600260205260408120546001600160a01b0316806102b257604051637e27328960e01b8152600481018490526024016103a8565b61042d8383836001610c19565b6000828152600260205260408120546001600160a01b03908116908316156108d0576108d0818486610d1f565b6001600160a01b0381161561090e576108ed600085600080610c19565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b0385161561093d576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109ce57604051630b61174360e31b81526001600160a01b03831660048201526024016103a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561040c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a7d903390889087908790600401611242565b6020604051808303816000875af1925050508015610ab8575060408051601f3d908101601f19168201909252610ab59181019061127f565b60015b610b21573d808015610ae6576040519150601f19603f3d011682016040523d82523d6000602084013e610aeb565b606091505b508051600003610b1957604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b5d57604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b5050505050565b6001600160a01b038216610b8e57604051633250574960e11b8152600060048201526024016103a8565b6000610b9c838360006108a3565b90506001600160a01b0381161561042d576040516339e3563760e11b8152600060048201526024016103a8565b6000828152600660205260409020610be182826112ea565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c2d57506001600160a01b03821615155b15610cef576000610c3d8461085d565b90506001600160a01b03831615801590610c695750826001600160a01b0316816001600160a01b031614155b8015610c7c5750610c7a81846104e1565b155b15610ca55760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103a8565b8115610ced5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d2a838383610d83565b61042d576001600160a01b038316610d5857604051637e27328960e01b8152600481018290526024016103a8565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103a8565b60006001600160a01b03831615801590610de15750826001600160a01b0316846001600160a01b03161480610dbd5750610dbd84846104e1565b80610de157506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610dff57600080fd5b50565b600060208284031215610e1457600080fd5b8135610e1f81610de9565b9392505050565b60005b83811015610e41578181015183820152602001610e29565b50506000910152565b60008151808452610e62816020860160208601610e26565b601f01601f19169290920160200192915050565b602081526000610e1f6020830184610e4a565b600060208284031215610e9b57600080fd5b5035919050565b80356001600160a01b0381168114610eb957600080fd5b919050565b60008060408385031215610ed157600080fd5b610eda83610ea2565b946020939093013593505050565b600080600060608486031215610efd57600080fd5b610f0684610ea2565b9250610f1460208501610ea2565b9150604084013590509250925092565b600060208284031215610f3657600080fd5b610e1f82610ea2565b8015158114610dff57600080fd5b60008060408385031215610f6057600080fd5b610f6983610ea2565b91506020830135610f7981610f3f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fab57600080fd5b813567ffffffffffffffff80821115610fc657610fc6610f84565b604051601f8301601f19908116603f01168101908282118183101715610fee57610fee610f84565b8160405283815286602085880101111561100757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561103d57600080fd5b61104685610ea2565b935061105460208601610ea2565b925060408501359150606085013567ffffffffffffffff81111561107757600080fd5b61108387828801610f9a565b91505092959194509250565b600080604083850312156110a257600080fd5b6110ab83610ea2565b91506110b960208401610ea2565b90509250929050565b600080600080600080600060e0888a0312156110dd57600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461110f57600080fd5b93506080880135925060a088013567ffffffffffffffff81111561113257600080fd5b61113e8a828b01610f9a565b92505060c0880135905092959891949750929550565b600181811c9082168061116857607f821691505b60208210810361118857634e487b7160e01b600052602260045260246000fd5b50919050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a082015260006111ce60e0830185610e4a565b90508260c083015298975050505050505050565b600082516111f4818460208701610e26565b9190910192915050565b60006020828403121561121057600080fd5b8151610e1f81610f3f565b60006001820161123b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061127590830184610e4a565b9695505050505050565b60006020828403121561129157600080fd5b8151610e1f81610de9565b601f82111561042d57600081815260208120601f850160051c810160208610156112c35750805b601f850160051c820191505b818110156112e2578281556001016112cf565b505050505050565b815167ffffffffffffffff81111561130457611304610f84565b611318816113128454611154565b8461129c565b602080601f83116001811461134d57600084156113355750858301515b600019600386901b1c1916600185901b1785556112e2565b600085815260208120601f198616915b8281101561137c5788860151825594840194600190910190840161135d565b508582101561139a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220c610e2b3fc584ff15378d793e3eceea724322a73ed33c7051568c6a5c551b55764736f6c63430008150033","sourceMap":"241:2396:35:-:0;;;402:66;371:97;;582:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1381:113:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1381:113:23;;;1455:5;1447;:13;;;;;;:::i;:::-;-1:-1:-1;1470:7:23;:17;1480:7;1470;:17;:::i;:::-;-1:-1:-1;;676:21:35::1;:46:::0;;-1:-1:-1;;;;;;676:46:35::1;-1:-1:-1::0;;;;;676:46:35;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;241:2396:35;;14:290:36;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:36;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:36:o;309:127::-;370:10;365:3;361:20;358:1;351:31;401:4;398:1;391:15;425:4;422:1;415:15;441:380;520:1;516:12;;;;563;;;584:61;;638:4;630:6;626:17;616:27;;584:61;691:2;683:6;680:14;660:18;657:38;654:161;;737:10;732:3;728:20;725:1;718:31;772:4;769:1;762:15;800:4;797:1;790:15;654:161;;441:380;;;:::o;952:545::-;1054:2;1049:3;1046:11;1043:448;;;1090:1;1115:5;1111:2;1104:17;1160:4;1156:2;1146:19;1230:2;1218:10;1214:19;1211:1;1207:27;1201:4;1197:38;1266:4;1254:10;1251:20;1248:47;;;-1:-1:-1;1289:4:36;1248:47;1344:2;1339:3;1335:12;1332:1;1328:20;1322:4;1318:31;1308:41;;1399:82;1417:2;1410:5;1407:13;1399:82;;;1462:17;;;1443:1;1432:13;1399:82;;;1403:3;;;1043:448;952:545;;;:::o;1673:1352::-;1793:10;;-1:-1:-1;;;;;1815:30:36;;1812:56;;;1848:18;;:::i;:::-;1877:97;1967:6;1927:38;1959:4;1953:11;1927:38;:::i;:::-;1921:4;1877:97;:::i;:::-;2029:4;;2093:2;2082:14;;2110:1;2105:663;;;;2812:1;2829:6;2826:89;;;-1:-1:-1;2881:19:36;;;2875:26;2826:89;-1:-1:-1;;1630:1:36;1626:11;;;1622:24;1618:29;1608:40;1654:1;1650:11;;;1605:57;2928:81;;2075:944;;2105:663;899:1;892:14;;;936:4;923:18;;-1:-1:-1;;2141:20:36;;;2259:236;2273:7;2270:1;2267:14;2259:236;;;2362:19;;;2356:26;2341:42;;2454:27;;;;2422:1;2410:14;;;;2289:19;;2259:236;;;2263:3;2523:6;2514:7;2511:19;2508:201;;;2584:19;;;2578:26;-1:-1:-1;;2667:1:36;2663:14;;;2679:3;2659:24;2655:37;2651:42;2636:58;2621:74;;2508:201;-1:-1:-1;;;;;2755:1:36;2739:14;;;2735:22;2722:36;;-1:-1:-1;1673:1352:36:o;:::-;241:2396:35;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063c87b56dd11610071578063c87b56dd1461021e578063dd3df4bd14610231578063e985e9c514610254578063f19cd88214610267578063fa534dc01461027a57600080fd5b806370a08231146101dd57806395d89b41146101f0578063a22cb465146101f8578063b88d4fde1461020b57600080fd5b80632212d607116100de5780632212d6071461018d57806323b872dd146101a457806342842e0e146101b75780636352211e146101ca57600080fd5b806301ffc9a71461011057806306fdde0314610138578063081812fc1461014d578063095ea7b314610178575b600080fd5b61012361011e366004610e02565b61028d565b60405190151581526020015b60405180910390f35b6101406102b8565b60405161012f9190610e76565b61016061015b366004610e89565b61034a565b6040516001600160a01b03909116815260200161012f565b61018b610186366004610ebe565b610373565b005b61019660095481565b60405190815260200161012f565b61018b6101b2366004610ee8565b610382565b61018b6101c5366004610ee8565b610412565b6101606101d8366004610e89565b610432565b6101966101eb366004610f24565b61043d565b610140610485565b61018b610206366004610f4d565b610494565b61018b610219366004611027565b61049f565b61014061022c366004610e89565b6104b6565b61012361023f366004610e89565b600a6020526000908152604090205460ff1681565b61012361026236600461108f565b6104e1565b600854610160906001600160a01b031681565b6101966102883660046110c2565b61050f565b60006001600160e01b03198216632483248360e11b14806102b257506102b28261080d565b92915050565b6060600080546102c790611154565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390611154565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b5050505050905090565b60006103558261085d565b506000828152600460205260409020546001600160a01b03166102b2565b61037e828233610896565b5050565b6001600160a01b0382166103b157604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103be8383336108a3565b9050836001600160a01b0316816001600160a01b03161461040c576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103a8565b50505050565b61042d8383836040518060200160405280600081525061049f565b505050565b60006102b28261085d565b60006001600160a01b038216610469576040516322718ad960e21b8152600060048201526024016103a8565b506001600160a01b031660009081526003602052604090205490565b6060600180546102c790611154565b61037e33838361099c565b6104aa848484610382565b61040c84848484610a3b565b60606104c18261085d565b506040518060600160405280603581526020016113ab6035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600954146105575760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103a8565b606085901c33146105b45760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103a8565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600a9092529190205460ff16156106515760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103a8565b60085460405160009182916001600160a01b0390911690610682908d908d908d908d908d908d908d9060240161118e565b60408051601f198184030181529181526020820180516001600160e01b03166303e94d3760e61b179052516106b791906111e2565b600060405180830381855afa9150503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b50915091508161073e5760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103a8565b60008180602001905181019061075491906111fe565b9050806107a35760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103a8565b6000848152600a60205260408120805460ff191660011790556007805490826107cb8361121b565b9190505590506107db3382610b64565b6107fd816040518060600160405280603581526020016113ab60359139610bc9565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061083e57506001600160e01b03198216635b5e139f60e01b145b806102b257506301ffc9a760e01b6001600160e01b03198316146102b2565b6000818152600260205260408120546001600160a01b0316806102b257604051637e27328960e01b8152600481018490526024016103a8565b61042d8383836001610c19565b6000828152600260205260408120546001600160a01b03908116908316156108d0576108d0818486610d1f565b6001600160a01b0381161561090e576108ed600085600080610c19565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b0385161561093d576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109ce57604051630b61174360e31b81526001600160a01b03831660048201526024016103a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561040c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a7d903390889087908790600401611242565b6020604051808303816000875af1925050508015610ab8575060408051601f3d908101601f19168201909252610ab59181019061127f565b60015b610b21573d808015610ae6576040519150601f19603f3d011682016040523d82523d6000602084013e610aeb565b606091505b508051600003610b1957604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b5d57604051633250574960e11b81526001600160a01b03851660048201526024016103a8565b5050505050565b6001600160a01b038216610b8e57604051633250574960e11b8152600060048201526024016103a8565b6000610b9c838360006108a3565b90506001600160a01b0381161561042d576040516339e3563760e11b8152600060048201526024016103a8565b6000828152600660205260409020610be182826112ea565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c2d57506001600160a01b03821615155b15610cef576000610c3d8461085d565b90506001600160a01b03831615801590610c695750826001600160a01b0316816001600160a01b031614155b8015610c7c5750610c7a81846104e1565b155b15610ca55760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103a8565b8115610ced5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d2a838383610d83565b61042d576001600160a01b038316610d5857604051637e27328960e01b8152600481018290526024016103a8565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103a8565b60006001600160a01b03831615801590610de15750826001600160a01b0316846001600160a01b03161480610dbd5750610dbd84846104e1565b80610de157506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610dff57600080fd5b50565b600060208284031215610e1457600080fd5b8135610e1f81610de9565b9392505050565b60005b83811015610e41578181015183820152602001610e29565b50506000910152565b60008151808452610e62816020860160208601610e26565b601f01601f19169290920160200192915050565b602081526000610e1f6020830184610e4a565b600060208284031215610e9b57600080fd5b5035919050565b80356001600160a01b0381168114610eb957600080fd5b919050565b60008060408385031215610ed157600080fd5b610eda83610ea2565b946020939093013593505050565b600080600060608486031215610efd57600080fd5b610f0684610ea2565b9250610f1460208501610ea2565b9150604084013590509250925092565b600060208284031215610f3657600080fd5b610e1f82610ea2565b8015158114610dff57600080fd5b60008060408385031215610f6057600080fd5b610f6983610ea2565b91506020830135610f7981610f3f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fab57600080fd5b813567ffffffffffffffff80821115610fc657610fc6610f84565b604051601f8301601f19908116603f01168101908282118183101715610fee57610fee610f84565b8160405283815286602085880101111561100757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561103d57600080fd5b61104685610ea2565b935061105460208601610ea2565b925060408501359150606085013567ffffffffffffffff81111561107757600080fd5b61108387828801610f9a565b91505092959194509250565b600080604083850312156110a257600080fd5b6110ab83610ea2565b91506110b960208401610ea2565b90509250929050565b600080600080600080600060e0888a0312156110dd57600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461110f57600080fd5b93506080880135925060a088013567ffffffffffffffff81111561113257600080fd5b61113e8a828b01610f9a565b92505060c0880135905092959891949750929550565b600181811c9082168061116857607f821691505b60208210810361118857634e487b7160e01b600052602260045260246000fd5b50919050565b8781528660208201528560408201526bffffffffffffffffffffffff198516606082015283608082015260e060a082015260006111ce60e0830185610e4a565b90508260c083015298975050505050505050565b600082516111f4818460208701610e26565b9190910192915050565b60006020828403121561121057600080fd5b8151610e1f81610f3f565b60006001820161123b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061127590830184610e4a565b9695505050505050565b60006020828403121561129157600080fd5b8151610e1f81610de9565b601f82111561042d57600081815260208120601f850160051c810160208610156112c35750805b601f850160051c820191505b818110156112e2578281556001016112cf565b505050505050565b815167ffffffffffffffff81111561130457611304610f84565b611318816113128454611154565b8461129c565b602080601f83116001811461134d57600084156113355750858301515b600019600386901b1c1916600185901b1785556112e2565b600085815260208120601f198616915b8281101561137c5788860151825594840194600190910190840161135d565b508582101561139a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220c610e2b3fc584ff15378d793e3eceea724322a73ed33c7051568c6a5c551b55764736f6c63430008150033","sourceMap":"241:2396:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:207:26;;;;;;:::i;:::-;;:::i;:::-;;;565:14:36;;558:22;540:41;;528:2;513:18;937:207:26;;;;;;;;2365:89:23;;;:::i;:::-;;;;;;;:::i;3497:154::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:36;;;1679:51;;1667:2;1652:18;3497:154:23;1533:203:36;3323:113:23;;;;;;:::i;:::-;;:::i;:::-;;371:97:35;;;;;;;;;2324:25:36;;;2312:2;2297:18;371:97:35;2178:177:36;4143:578:23;;;;;;:::i;:::-;;:::i;4787:132::-;;;;;;:::i;:::-;;:::i;2185:118::-;;;;;;:::i;:::-;;:::i;1920:208::-;;;;;;:::i;:::-;;:::i;2518:93::-;;;:::i;3718:144::-;;;;;;:::i;:::-;;:::i;4985:208::-;;;;;;:::i;:::-;;:::i;2434:200:35:-;;;;;;:::i;:::-;;:::i;531:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3928:153:23;;;;;;:::i;:::-;;:::i;328:36:35:-;;;;;-1:-1:-1;;;;;328:36:35;;;735:1693;;;;;;:::i;:::-;;:::i;937:207:26:-;1039:4;-1:-1:-1;;;;;;1062:35:26;;-1:-1:-1;;;1062:35:26;;:75;;;1101:36;1125:11;1101:23;:36::i;:::-;1055:82;937:207;-1:-1:-1;;937:207:26:o;2365:89:23:-;2410:13;2442:5;2435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2365:89;:::o;3497:154::-;3564:7;3583:22;3597:7;3583:13;:22::i;:::-;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6034:24:23;3623:21;5938:127;3323:113;3394:35;3403:2;3407:7;735:10:28;3394:8:23;:35::i;:::-;3323:113;;:::o;4143:578::-;-1:-1:-1;;;;;4237:16:23;;4233:87;;4276:33;;-1:-1:-1;;;4276:33:23;;4306:1;4276:33;;;1679:51:36;1652:18;;4276:33:23;;;;;;;;4233:87;4538:21;4562:34;4570:2;4574:7;735:10:28;4562:7:23;:34::i;:::-;4538:58;;4627:4;-1:-1:-1;;;;;4610:21:23;:13;-1:-1:-1;;;;;4610:21:23;;4606:109;;4654:50;;-1:-1:-1;;;4654:50:23;;-1:-1:-1;;;;;6854:15:36;;;4654:50:23;;;6836:34:36;6886:18;;;6879:34;;;6949:15;;6929:18;;;6922:43;6771:18;;4654:50:23;6596:375:36;4606:109:23;4223:498;4143:578;;;:::o;4787:132::-;4873:39;4890:4;4896:2;4900:7;4873:39;;;;;;;;;;;;:16;:39::i;:::-;4787:132;;;:::o;2185:118::-;2248:7;2274:22;2288:7;2274:13;:22::i;1920:208::-;1983:7;-1:-1:-1;;;;;2006:19:23;;2002:87;;2048:30;;-1:-1:-1;;;2048:30:23;;2075:1;2048:30;;;1679:51:36;1652:18;;2048:30:23;1533:203:36;2002:87:23;-1:-1:-1;;;;;;2105:16:23;;;;;:9;:16;;;;;;;1920:208::o;2518:93::-;2565:13;2597:7;2590:14;;;;;:::i;3718:144::-;3803:52;735:10:28;3836:8:23;3846;3803:18;:52::i;4985:208::-;5098:31;5111:4;5117:2;5121:7;5098:12;:31::i;:::-;5139:47;5162:4;5168:2;5172:7;5181:4;5139:22;:47::i;2434:200:35:-;2507:13;2532:22;2546:7;2532:13;:22::i;:::-;;2565:62;;;;;;;;;;;;;;;;;;2434:200;-1:-1:-1;;2434:200:35:o;3928:153:23:-;-1:-1:-1;;;;;4039:25:23;;;4016:4;4039:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3928:153::o;735:1693:35:-;1053:7;1097:30;1080:13;;:47;1072:78;;;;-1:-1:-1;;;1072:78:35;;7178:2:36;1072:78:35;;;7160:21:36;7217:2;7197:18;;;7190:30;-1:-1:-1;;;7236:18:36;;;7229:48;7294:18;;1072:78:35;6976:342:36;1072:78:35;1168:27;;;;1199:10;1168:41;1160:87;;;;-1:-1:-1;;;1160:87:35;;7525:2:36;1160:87:35;;;7507:21:36;7564:2;7544:18;;;7537:30;7603:34;7583:18;;;7576:62;-1:-1:-1;;;7654:18:36;;;7647:31;7695:19;;1160:87:35;7323:397:36;1160:87:35;1287:117;;;;;;;7938:19:36;;;7973:12;;;7966:28;;;8010:12;;;8003:28;;;-1:-1:-1;;8061:44:36;;8047:12;;;8040:66;1287:117:35;;;;;;;;;8122:13:36;;;;1287:117:35;;1277:128;;;;;;;;;-1:-1:-1;1424:22:35;;;:12;:22;;;;;;;;;1423:23;1415:56;;;;-1:-1:-1;;;1415:56:35;;8348:2:36;1415:56:35;;;8330:21:36;8387:2;8367:18;;;8360:30;-1:-1:-1;;;8406:18:36;;;8399:50;8466:18;;1415:56:35;8146:344:36;1415:56:35;1540:21;;1586:391;;1483:23;;;;-1:-1:-1;;;;;1540:21:35;;;;1586:391;;1722:15;;1755:18;;1791:30;;1839:18;;1875:15;;1908:11;;1937:26;;1586:391;;;:::i;:::-;;;;-1:-1:-1;;1586:391:35;;;;;;;;;;;;;;-1:-1:-1;;;;;1586:391:35;-1:-1:-1;;;1586:391:35;;;1540:447;;;1586:391;1540:447;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1482:505;;;;2006:18;1998:49;;;;-1:-1:-1;;;1998:49:35;;9681:2:36;1998:49:35;;;9663:21:36;9720:2;9700:18;;;9693:30;-1:-1:-1;;;9739:18:36;;;9732:48;9797:18;;1998:49:35;9479:342:36;1998:49:35;2058:24;2096:15;2085:35;;;;;;;;;;;;:::i;:::-;2058:62;;2138:19;2130:59;;;;-1:-1:-1;;;2130:59:35;;10278:2:36;2130:59:35;;;10260:21:36;10317:2;10297:18;;;10290:30;10356:29;10336:18;;;10329:57;10403:18;;2130:59:35;10076:351:36;2130:59:35;2200:22;;;;:12;:22;;;;;:29;;-1:-1:-1;;2200:29:35;2225:4;2200:29;;;2258:12;:14;;;2200:22;2258:14;;;:::i;:::-;;;;;2240:32;;2282:26;2288:10;2300:7;2282:5;:26::i;:::-;2318:78;2331:7;2318:78;;;;;;;;;;;;;;;;;:12;:78::i;:::-;2414:7;735:1693;-1:-1:-1;;;;;;;;;;;;735:1693:35:o;1561:300:23:-;1663:4;-1:-1:-1;;;;;;1698:40:23;;-1:-1:-1;;;1698:40:23;;:104;;-1:-1:-1;;;;;;;1754:48:23;;-1:-1:-1;;;1754:48:23;1698:104;:156;;;-1:-1:-1;;;;;;;;;;861:40:30;;;1818:36:23;762:146:30;16138:241:23;16201:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;16263:88;;16309:31;;-1:-1:-1;;;16309:31:23;;;;;2324:25:36;;;2297:18;;16309:31:23;2178:177:36;14418:120:23;14498:33;14507:2;14511:7;14520:4;14526;14498:8;:33::i;8838:795::-;8924:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;;;9035:18;;;9031:86;;9069:37;9086:4;9092;9098:7;9069:16;:37::i;:::-;-1:-1:-1;;;;;9161:18:23;;;9157:256;;9277:48;9294:1;9298:7;9315:1;9319:5;9277:8;:48::i;:::-;-1:-1:-1;;;;;9368:15:23;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9368:20:23;;;9157:256;-1:-1:-1;;;;;9427:16:23;;;9423:107;;-1:-1:-1;;;;;9487:13:23;;;;;;:9;:13;;;;;:18;;9504:1;9487:18;;;9423:107;9540:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9540:21:23;-1:-1:-1;;;;;9540:21:23;;;;;;;;;9577:27;;9540:16;;9577:27;;;;;;;9622:4;8838:795;-1:-1:-1;;;;8838:795:23:o;15591:312::-;-1:-1:-1;;;;;15698:22:23;;15694:91;;15743:31;;-1:-1:-1;;;15743:31:23;;-1:-1:-1;;;;;1697:32:36;;15743:31:23;;;1679:51:36;1652:18;;15743:31:23;1533:203:36;15694:91:23;-1:-1:-1;;;;;15794:25:23;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15794:46:23;;;;;;;;;;15855:41;;540::36;;;15855::23;;513:18:36;15855:41:23;;;;;;;15591:312;;;:::o;16918:782::-;-1:-1:-1;;;;;17034:14:23;;;:18;17030:664;;17072:71;;-1:-1:-1;;;17072:71:23;;-1:-1:-1;;;;;17072:36:23;;;;;:71;;735:10:28;;17123:4:23;;17129:7;;17138:4;;17072:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17072:71:23;;;;;;;;-1:-1:-1;;17072:71:23;;;;;;;;;;;;:::i;:::-;;;17068:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17381:6;:13;17398:1;17381:18;17377:293;;17430:25;;-1:-1:-1;;;17430:25:23;;-1:-1:-1;;;;;1697:32:36;;17430:25:23;;;1679:51:36;1652:18;;17430:25:23;1533:203:36;17377:293:23;17622:6;17616:13;17607:6;17603:2;17599:15;17592:38;17068:616;-1:-1:-1;;;;;;17190:51:23;;-1:-1:-1;;;17190:51:23;17186:130;;17272:25;;-1:-1:-1;;;17272:25:23;;-1:-1:-1;;;;;1697:32:36;;17272:25:23;;;1679:51:36;1652:18;;17272:25:23;1533:203:36;17186:130:23;17144:186;16918:782;;;;:::o;9955:327::-;-1:-1:-1;;;;;10022:16:23;;10018:87;;10061:33;;-1:-1:-1;;;10061:33:23;;10091:1;10061:33;;;1679:51:36;1652:18;;10061:33:23;1533:203:36;10018:87:23;10114:21;10138:32;10146:2;10150:7;10167:1;10138:7;:32::i;:::-;10114:56;-1:-1:-1;;;;;;10184:27:23;;;10180:96;;10234:31;;-1:-1:-1;;;10234:31:23;;10262:1;10234:31;;;1679:51:36;1652:18;;10234:31:23;1533:203:36;1922:167:26;2013:19;;;;:10;:19;;;;;:31;2035:9;2013:19;:31;:::i;:::-;-1:-1:-1;2059:23:26;;2324:25:36;;;2059:23:26;;2312:2:36;2297:18;2059:23:26;;;;;;;1922:167;;:::o;14720:662:23:-;14880:9;:31;;;-1:-1:-1;;;;;;14893:18:23;;;;14880:31;14876:460;;;14927:13;14943:22;14957:7;14943:13;:22::i;:::-;14927:38;-1:-1:-1;;;;;;15093:18:23;;;;;;:35;;;15124:4;-1:-1:-1;;;;;15115:13:23;:5;-1:-1:-1;;;;;15115:13:23;;;15093:35;:69;;;;;15133:29;15150:5;15157:4;15133:16;:29::i;:::-;15132:30;15093:69;15089:142;;;15189:27;;-1:-1:-1;;;15189:27:23;;-1:-1:-1;;;;;1697:32:36;;15189:27:23;;;1679:51:36;1652:18;;15189:27:23;1533:203:36;15089:142:23;15249:9;15245:81;;;15303:7;15299:2;-1:-1:-1;;;;;15283:28:23;15292:5;-1:-1:-1;;;;;15283:28:23;;;;;;;;;;;15245:81;14913:423;14876:460;-1:-1:-1;;15346:24:23;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15346:29:23;-1:-1:-1;;;;;15346:29:23;;;;;;;;;;14720:662::o;7082:368::-;7194:38;7208:5;7215:7;7224;7194:13;:38::i;:::-;7189:255;;-1:-1:-1;;;;;7252:19:23;;7248:186;;7298:31;;-1:-1:-1;;;7298:31:23;;;;;2324:25:36;;;2297:18;;7298:31:23;2178:177:36;7248:186:23;7375:44;;-1:-1:-1;;;7375:44:23;;-1:-1:-1;;;;;13813:32:36;;7375:44:23;;;13795:51:36;13862:18;;;13855:34;;;13768:18;;7375:44:23;13621:274:36;6376:272:23;6479:4;-1:-1:-1;;;;;6514:21:23;;;;;;:127;;;6561:7;-1:-1:-1;;;;;6552:16:23;:5;-1:-1:-1;;;;;6552:16:23;;:52;;;;6572:32;6589:5;6596:7;6572:16;:32::i;:::-;6552:88;;;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6608:32:23;;;6034:24;;6608:32;6552:88;6495:146;6376:272;-1:-1:-1;;;;6376:272:23:o;14:131:36:-;-1:-1:-1;;;;;;88:32:36;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:36:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:36;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:36;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:36:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:36;;1348:180;-1:-1:-1;1348:180:36:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:36;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:36:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:186::-;2752:6;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;3066:118::-;3152:5;3145:13;3138:21;3131:5;3128:32;3118:60;;3174:1;3171;3164:12;3189:315;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3354:29;3373:9;3354:29;:::i;:::-;3344:39;;3433:2;3422:9;3418:18;3405:32;3446:28;3468:5;3446:28;:::i;:::-;3493:5;3483:15;;;3189:315;;;;;:::o;3509:127::-;3570:10;3565:3;3561:20;3558:1;3551:31;3601:4;3598:1;3591:15;3625:4;3622:1;3615:15;3641:718;3683:5;3736:3;3729:4;3721:6;3717:17;3713:27;3703:55;;3754:1;3751;3744:12;3703:55;3790:6;3777:20;3816:18;3853:2;3849;3846:10;3843:36;;;3859:18;;:::i;:::-;3934:2;3928:9;3902:2;3988:13;;-1:-1:-1;;3984:22:36;;;4008:2;3980:31;3976:40;3964:53;;;4032:18;;;4052:22;;;4029:46;4026:72;;;4078:18;;:::i;:::-;4118:10;4114:2;4107:22;4153:2;4145:6;4138:18;4199:3;4192:4;4187:2;4179:6;4175:15;4171:26;4168:35;4165:55;;;4216:1;4213;4206:12;4165:55;4280:2;4273:4;4265:6;4261:17;4254:4;4246:6;4242:17;4229:54;4327:1;4320:4;4315:2;4307:6;4303:15;4299:26;4292:37;4347:6;4338:15;;;;;;3641:718;;;;:::o;4364:537::-;4459:6;4467;4475;4483;4536:3;4524:9;4515:7;4511:23;4507:33;4504:53;;;4553:1;4550;4543:12;4504:53;4576:29;4595:9;4576:29;:::i;:::-;4566:39;;4624:38;4658:2;4647:9;4643:18;4624:38;:::i;:::-;4614:48;;4709:2;4698:9;4694:18;4681:32;4671:42;;4764:2;4753:9;4749:18;4736:32;4791:18;4783:6;4780:30;4777:50;;;4823:1;4820;4813:12;4777:50;4846:49;4887:7;4878:6;4867:9;4863:22;4846:49;:::i;:::-;4836:59;;;4364:537;;;;;;;:::o;5091:260::-;5159:6;5167;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;5259:29;5278:9;5259:29;:::i;:::-;5249:39;;5307:38;5341:2;5330:9;5326:18;5307:38;:::i;:::-;5297:48;;5091:260;;;;;:::o;5356:850::-;5478:6;5486;5494;5502;5510;5518;5526;5579:3;5567:9;5558:7;5554:23;5550:33;5547:53;;;5596:1;5593;5586:12;5547:53;5619:23;;;-1:-1:-1;5689:2:36;5674:18;;5661:32;;-1:-1:-1;5740:2:36;5725:18;;5712:32;;-1:-1:-1;5794:2:36;5779:18;;5766:32;-1:-1:-1;;5827:43:36;;5817:54;;5807:82;;5885:1;5882;5875:12;5807:82;5908:5;-1:-1:-1;5960:3:36;5945:19;;5932:33;;-1:-1:-1;6016:3:36;6001:19;;5988:33;6044:18;6033:30;;6030:50;;;6076:1;6073;6066:12;6030:50;6099:49;6140:7;6131:6;6120:9;6116:22;6099:49;:::i;:::-;6089:59;;;6195:3;6184:9;6180:19;6167:33;6157:43;;5356:850;;;;;;;;;;:::o;6211:380::-;6290:1;6286:12;;;;6333;;;6354:61;;6408:4;6400:6;6396:17;6386:27;;6354:61;6461:2;6453:6;6450:14;6430:18;6427:38;6424:161;;6507:10;6502:3;6498:20;6495:1;6488:31;6542:4;6539:1;6532:15;6570:4;6567:1;6560:15;6424:161;;6211:380;;;:::o;8495:687::-;8810:6;8799:9;8792:25;8853:6;8848:2;8837:9;8833:18;8826:34;8896:6;8891:2;8880:9;8876:18;8869:34;8955:26;8951:31;8943:6;8939:44;8934:2;8923:9;8919:18;8912:72;9021:6;9015:3;9004:9;9000:19;8993:35;9065:3;9059;9048:9;9044:19;9037:32;8773:4;9086:46;9127:3;9116:9;9112:19;9104:6;9086:46;:::i;:::-;9078:54;;9169:6;9163:3;9152:9;9148:19;9141:35;8495:687;;;;;;;;;;:::o;9187:287::-;9316:3;9354:6;9348:13;9370:66;9429:6;9424:3;9417:4;9409:6;9405:17;9370:66;:::i;:::-;9452:16;;;;;9187:287;-1:-1:-1;;9187:287:36:o;9826:245::-;9893:6;9946:2;9934:9;9925:7;9921:23;9917:32;9914:52;;;9962:1;9959;9952:12;9914:52;9994:9;9988:16;10013:28;10035:5;10013:28;:::i;10432:232::-;10471:3;10492:17;;;10489:140;;10551:10;10546:3;10542:20;10539:1;10532:31;10586:4;10583:1;10576:15;10614:4;10611:1;10604:15;10489:140;-1:-1:-1;10656:1:36;10645:13;;10432:232::o;10669:489::-;-1:-1:-1;;;;;10938:15:36;;;10920:34;;10990:15;;10985:2;10970:18;;10963:43;11037:2;11022:18;;11015:34;;;11085:3;11080:2;11065:18;;11058:31;;;10863:4;;11106:46;;11132:19;;11124:6;11106:46;:::i;:::-;11098:54;10669:489;-1:-1:-1;;;;;;10669:489:36:o;11163:249::-;11232:6;11285:2;11273:9;11264:7;11260:23;11256:32;11253:52;;;11301:1;11298;11291:12;11253:52;11333:9;11327:16;11352:30;11376:5;11352:30;:::i;11543:545::-;11645:2;11640:3;11637:11;11634:448;;;11681:1;11706:5;11702:2;11695:17;11751:4;11747:2;11737:19;11821:2;11809:10;11805:19;11802:1;11798:27;11792:4;11788:38;11857:4;11845:10;11842:20;11839:47;;;-1:-1:-1;11880:4:36;11839:47;11935:2;11930:3;11926:12;11923:1;11919:20;11913:4;11909:31;11899:41;;11990:82;12008:2;12001:5;11998:13;11990:82;;;12053:17;;;12034:1;12023:13;11990:82;;;11994:3;;;11543:545;;;:::o;12264:1352::-;12390:3;12384:10;12417:18;12409:6;12406:30;12403:56;;;12439:18;;:::i;:::-;12468:97;12558:6;12518:38;12550:4;12544:11;12518:38;:::i;:::-;12512:4;12468:97;:::i;:::-;12620:4;;12684:2;12673:14;;12701:1;12696:663;;;;13403:1;13420:6;13417:89;;;-1:-1:-1;13472:19:36;;;13466:26;13417:89;-1:-1:-1;;12221:1:36;12217:11;;;12213:24;12209:29;12199:40;12245:1;12241:11;;;12196:57;13519:81;;12666:944;;12696:663;11490:1;11483:14;;;11527:4;11514:18;;-1:-1:-1;;12732:20:36;;;12850:236;12864:7;12861:1;12858:14;12850:236;;;12953:19;;;12947:26;12932:42;;13045:27;;;;13013:1;13001:14;;;;12880:19;;12850:236;;;12854:3;13114:6;13105:7;13102:19;13099:201;;;13175:19;;;13169:26;-1:-1:-1;;13258:1:36;13254:14;;;13270:3;13250:24;13246:37;13242:42;13227:58;13212:74;;13099:201;-1:-1:-1;;;;;13346:1:36;13330:14;;;13326:22;13313:36;;-1:-1:-1;12264:1352:36:o","linkReferences":{}},"methodIdentifiers":{"alignedServiceManager()":"f19cd882","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","elfCommitment()":"2212d607","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","mintedProofs(bytes32)":"dd3df4bd","name()":"06fdde03","ownerOf(uint256)":"6352211e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)":"fa534dc0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedServiceManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"alignedServiceManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"elfCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"mintedProofs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"BatchMetadataUpdate(uint256,uint256)\":{\"details\":\"This event emits when the metadata of a range of tokens is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFTs.\"},\"MetadataUpdate(uint256)\":{\"details\":\"This event emits when the metadata of a token is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFT.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/VerifierContract.sol\":\"VerifierContract\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd\",\"dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96\",\"dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/VerifierContract.sol\":{\"keccak256\":\"0xd3344cfa7286501ef5bdfabfe336dfab042c4c420e13be7ca3d7f8f74cf9c8b6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5bcf78be8463542ce798e79fc6c7c3acc89b4cd6941500503c7fbd1d5f324c2d\",\"dweb:/ipfs/QmPKcDT6wVbD5PWAKDYJCfEyG1RGn8QYe9CXx2jmvFngZy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_alignedServiceManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_fromTokenId","type":"uint256","indexed":false},{"internalType":"uint256","name":"_toTokenId","type":"uint256","indexed":false}],"type":"event","name":"BatchMetadataUpdate","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256","indexed":false}],"type":"event","name":"MetadataUpdate","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"alignedServiceManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"elfCommitment","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"mintedProofs","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"approve(address,uint256)":{"details":"See {IERC721-approve}."},"balanceOf(address)":{"details":"See {IERC721-balanceOf}."},"getApproved(uint256)":{"details":"See {IERC721-getApproved}."},"isApprovedForAll(address,address)":{"details":"See {IERC721-isApprovedForAll}."},"name()":{"details":"See {IERC721Metadata-name}."},"ownerOf(uint256)":{"details":"See {IERC721-ownerOf}."},"safeTransferFrom(address,address,uint256)":{"details":"See {IERC721-safeTransferFrom}."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"See {IERC721-safeTransferFrom}."},"setApprovalForAll(address,bool)":{"details":"See {IERC721-setApprovalForAll}."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}"},"symbol()":{"details":"See {IERC721Metadata-symbol}."},"tokenURI(uint256)":{"details":"See {IERC721Metadata-tokenURI}."},"transferFrom(address,address,uint256)":{"details":"See {IERC721-transferFrom}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/VerifierContract.sol":"VerifierContract"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol":{"keccak256":"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44","urls":["bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd","dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol":{"keccak256":"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d","urls":["bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b","dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784","urls":["bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd","dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4","urls":["bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7","dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49","urls":["bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22","dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol":{"keccak256":"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670","urls":["bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96","dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/VerifierContract.sol":{"keccak256":"0xd3344cfa7286501ef5bdfabfe336dfab042c4c420e13be7ca3d7f8f74cf9c8b6","urls":["bzz-raw://5bcf78be8463542ce798e79fc6c7c3acc89b4cd6941500503c7fbd1d5f324c2d","dweb:/ipfs/QmPKcDT6wVbD5PWAKDYJCfEyG1RGn8QYe9CXx2jmvFngZy"],"license":"UNLICENSED"}},"version":1},"id":35} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_alignedServiceManager","type":"address","internalType":"address"},{"name":"_paymentServiceAddr","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"alignedServiceManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"elfCommitment","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mintedProofs","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"paymentServiceAddr","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchInclusion","inputs":[{"name":"proofCommitment","type":"bytes32","internalType":"bytes32"},{"name":"pubInputCommitment","type":"bytes32","internalType":"bytes32"},{"name":"provingSystemAuxDataCommitment","type":"bytes32","internalType":"bytes32"},{"name":"proofGeneratorAddr","type":"bytes20","internalType":"bytes20"},{"name":"batchMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"merkleProof","type":"bytes","internalType":"bytes"},{"name":"verificationDataBatchIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"BatchMetadataUpdate","inputs":[{"name":"_fromTokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_toTokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MetadataUpdate","inputs":[{"name":"_tokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60806040527f35dd40ab04e180712996495caec915b8a7c488433acbb50c4d8d912cb55bf1f1600a553480156200003557600080fd5b506040516200172538038062001725833981016040819052620000589162000121565b6040518060400160405280601581526020017f416c69676e6564204c61796572205a4b205175697a000000000000000000000081525060405180604001604052806004815260200163415a4b5160e01b8152508160009081620000bc9190620001fe565b506001620000cb8282620001fe565b5050600880546001600160a01b039485166001600160a01b031991821617909155600980549390941692169190911790915550620002ca565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018457607f821691505b602082108103620001a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f957600081815260208120601f850160051c81016020861015620001d45750805b601f850160051c820191505b81811015620001f557828155600101620001e0565b5050505b505050565b81516001600160401b038111156200021a576200021a62000159565b62000232816200022b84546200016f565b84620001ab565b602080601f8311600181146200026a5760008415620002515750858301515b600019600386901b1c1916600185901b178555620001f5565b600085815260208120601f198616915b828110156200029b578886015182559484019460019091019084016200027a565b5085821015620002ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61144b80620002da6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806390a05f2e116100a2578063c87b56dd11610071578063c87b56dd1461023c578063dd3df4bd1461024f578063e985e9c514610272578063f19cd88214610285578063fa534dc01461029857600080fd5b806390a05f2e146101fb57806395d89b411461020e578063a22cb46514610216578063b88d4fde1461022957600080fd5b80632212d607116100e95780632212d6071461019857806323b872dd146101af57806342842e0e146101c25780636352211e146101d557806370a08231146101e857600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e610129366004610e25565b6102ab565b60405190151581526020015b60405180910390f35b61014b6102d6565b60405161013a9190610e99565b61016b610166366004610eac565b610368565b6040516001600160a01b03909116815260200161013a565b610196610191366004610ee1565b610391565b005b6101a1600a5481565b60405190815260200161013a565b6101966101bd366004610f0b565b6103a0565b6101966101d0366004610f0b565b610430565b61016b6101e3366004610eac565b610450565b6101a16101f6366004610f47565b61045b565b60095461016b906001600160a01b031681565b61014b6104a3565b610196610224366004610f70565b6104b2565b61019661023736600461104a565b6104bd565b61014b61024a366004610eac565b6104d4565b61012e61025d366004610eac565b600b6020526000908152604090205460ff1681565b61012e6102803660046110b2565b6104ff565b60085461016b906001600160a01b031681565b6101a16102a63660046110e5565b61052d565b60006001600160e01b03198216632483248360e11b14806102d057506102d082610830565b92915050565b6060600080546102e590611177565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611177565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b5050505050905090565b600061037382610880565b506000828152600460205260409020546001600160a01b03166102d0565b61039c8282336108b9565b5050565b6001600160a01b0382166103cf57604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103dc8383336108c6565b9050836001600160a01b0316816001600160a01b03161461042a576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103c6565b50505050565b61044b838383604051806020016040528060008152506104bd565b505050565b60006102d082610880565b60006001600160a01b038216610487576040516322718ad960e21b8152600060048201526024016103c6565b506001600160a01b031660009081526003602052604090205490565b6060600180546102e590611177565b61039c3383836109bf565b6104c88484846103a0565b61042a84848484610a5e565b60606104df82610880565b506040518060600160405280603581526020016113e16035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600a54146105755760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103c6565b606085901c33146105d25760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103c6565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600b9092529190205460ff161561066f5760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103c6565b60085460095460405160009283926001600160a01b03918216926106a5928f928f928f928f928f928f928f9216906024016111b1565b60408051601f198184030181529181526020820180516001600160e01b03166306045a9160e01b179052516106da9190611218565b600060405180830381855afa9150503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5091509150816107615760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103c6565b6000818060200190518101906107779190611234565b9050806107c65760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103c6565b6000848152600b60205260408120805460ff191660011790556007805490826107ee83611251565b9190505590506107fe3382610b87565b610820816040518060600160405280603581526020016113e160359139610bec565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061086157506001600160e01b03198216635b5e139f60e01b145b806102d057506301ffc9a760e01b6001600160e01b03198316146102d0565b6000818152600260205260408120546001600160a01b0316806102d057604051637e27328960e01b8152600481018490526024016103c6565b61044b8383836001610c3c565b6000828152600260205260408120546001600160a01b03908116908316156108f3576108f3818486610d42565b6001600160a01b0381161561093157610910600085600080610c3c565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610960576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109f157604051630b61174360e31b81526001600160a01b03831660048201526024016103c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561042a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610aa0903390889087908790600401611278565b6020604051808303816000875af1925050508015610adb575060408051601f3d908101601f19168201909252610ad8918101906112b5565b60015b610b44573d808015610b09576040519150601f19603f3d011682016040523d82523d6000602084013e610b0e565b606091505b508051600003610b3c57604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b8057604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b5050505050565b6001600160a01b038216610bb157604051633250574960e11b8152600060048201526024016103c6565b6000610bbf838360006108c6565b90506001600160a01b0381161561044b576040516339e3563760e11b8152600060048201526024016103c6565b6000828152600660205260409020610c048282611320565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c5057506001600160a01b03821615155b15610d12576000610c6084610880565b90506001600160a01b03831615801590610c8c5750826001600160a01b0316816001600160a01b031614155b8015610c9f5750610c9d81846104ff565b155b15610cc85760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103c6565b8115610d105783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d4d838383610da6565b61044b576001600160a01b038316610d7b57604051637e27328960e01b8152600481018290526024016103c6565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103c6565b60006001600160a01b03831615801590610e045750826001600160a01b0316846001600160a01b03161480610de05750610de084846104ff565b80610e0457506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610e2257600080fd5b50565b600060208284031215610e3757600080fd5b8135610e4281610e0c565b9392505050565b60005b83811015610e64578181015183820152602001610e4c565b50506000910152565b60008151808452610e85816020860160208601610e49565b601f01601f19169290920160200192915050565b602081526000610e426020830184610e6d565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b0381168114610edc57600080fd5b919050565b60008060408385031215610ef457600080fd5b610efd83610ec5565b946020939093013593505050565b600080600060608486031215610f2057600080fd5b610f2984610ec5565b9250610f3760208501610ec5565b9150604084013590509250925092565b600060208284031215610f5957600080fd5b610e4282610ec5565b8015158114610e2257600080fd5b60008060408385031215610f8357600080fd5b610f8c83610ec5565b91506020830135610f9c81610f62565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fce57600080fd5b813567ffffffffffffffff80821115610fe957610fe9610fa7565b604051601f8301601f19908116603f0116810190828211818310171561101157611011610fa7565b8160405283815286602085880101111561102a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561106057600080fd5b61106985610ec5565b935061107760208601610ec5565b925060408501359150606085013567ffffffffffffffff81111561109a57600080fd5b6110a687828801610fbd565b91505092959194509250565b600080604083850312156110c557600080fd5b6110ce83610ec5565b91506110dc60208401610ec5565b90509250929050565b600080600080600080600060e0888a03121561110057600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461113257600080fd5b93506080880135925060a088013567ffffffffffffffff81111561115557600080fd5b6111618a828b01610fbd565b92505060c0880135905092959891949750929550565b600181811c9082168061118b57607f821691505b6020821081036111ab57634e487b7160e01b600052602260045260246000fd5b50919050565b60006101008a83528960208401528860408401526bffffffffffffffffffffffff19881660608401528660808401528060a08401526111f281840187610e6d565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b6000825161122a818460208701610e49565b9190910192915050565b60006020828403121561124657600080fd5b8151610e4281610f62565b60006001820161127157634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906112ab90830184610e6d565b9695505050505050565b6000602082840312156112c757600080fd5b8151610e4281610e0c565b601f82111561044b57600081815260208120601f850160051c810160208610156112f95750805b601f850160051c820191505b8181101561131857828155600101611305565b505050505050565b815167ffffffffffffffff81111561133a5761133a610fa7565b61134e816113488454611177565b846112d2565b602080601f831160018114611383576000841561136b5750858301515b600019600386901b1c1916600185901b178555611318565b600085815260208120601f198616915b828110156113b257888601518255948401946001909101908401611393565b50858210156113d05787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220e18828ee8df71e0807a53db821b319416c0c2e1d2b9761b2de39a61c4555fc6d64736f6c63430008150033","sourceMap":"241:2873:35:-:0;;;449:66;410:105;;629:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1381:113:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1381:113:23;;;1455:5;1447;:13;;;;;;:::i;:::-;-1:-1:-1;1470:7:23;:17;1480:7;1470;:17;:::i;:::-;-1:-1:-1;;774:21:35::1;:46:::0;;-1:-1:-1;;;;;774:46:35;;::::1;-1:-1:-1::0;;;;;;774:46:35;;::::1;;::::0;;;830:18:::1;:40:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;241:2873:35;;14:177:36;93:13;;-1:-1:-1;;;;;135:31:36;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:127::-;555:10;550:3;546:20;543:1;536:31;586:4;583:1;576:15;610:4;607:1;600:15;626:380;705:1;701:12;;;;748;;;769:61;;823:4;815:6;811:17;801:27;;769:61;876:2;868:6;865:14;845:18;842:38;839:161;;922:10;917:3;913:20;910:1;903:31;957:4;954:1;947:15;985:4;982:1;975:15;839:161;;626:380;;;:::o;1137:545::-;1239:2;1234:3;1231:11;1228:448;;;1275:1;1300:5;1296:2;1289:17;1345:4;1341:2;1331:19;1415:2;1403:10;1399:19;1396:1;1392:27;1386:4;1382:38;1451:4;1439:10;1436:20;1433:47;;;-1:-1:-1;1474:4:36;1433:47;1529:2;1524:3;1520:12;1517:1;1513:20;1507:4;1503:31;1493:41;;1584:82;1602:2;1595:5;1592:13;1584:82;;;1647:17;;;1628:1;1617:13;1584:82;;;1588:3;;;1228:448;1137:545;;;:::o;1858:1352::-;1978:10;;-1:-1:-1;;;;;2000:30:36;;1997:56;;;2033:18;;:::i;:::-;2062:97;2152:6;2112:38;2144:4;2138:11;2112:38;:::i;:::-;2106:4;2062:97;:::i;:::-;2214:4;;2278:2;2267:14;;2295:1;2290:663;;;;2997:1;3014:6;3011:89;;;-1:-1:-1;3066:19:36;;;3060:26;3011:89;-1:-1:-1;;1815:1:36;1811:11;;;1807:24;1803:29;1793:40;1839:1;1835:11;;;1790:57;3113:81;;2260:944;;2290:663;1084:1;1077:14;;;1121:4;1108:18;;-1:-1:-1;;2326:20:36;;;2444:236;2458:7;2455:1;2452:14;2444:236;;;2547:19;;;2541:26;2526:42;;2639:27;;;;2607:1;2595:14;;;;2474:19;;2444:236;;;2448:3;2708:6;2699:7;2696:19;2693:201;;;2769:19;;;2763:26;-1:-1:-1;;2852:1:36;2848:14;;;2864:3;2844:24;2840:37;2836:42;2821:58;2806:74;;2693:201;-1:-1:-1;;;;;2940:1:36;2924:14;;;2920:22;2907:36;;-1:-1:-1;1858:1352:36:o;:::-;241:2873:35;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101165760003560e01c806390a05f2e116100a2578063c87b56dd11610071578063c87b56dd1461023c578063dd3df4bd1461024f578063e985e9c514610272578063f19cd88214610285578063fa534dc01461029857600080fd5b806390a05f2e146101fb57806395d89b411461020e578063a22cb46514610216578063b88d4fde1461022957600080fd5b80632212d607116100e95780632212d6071461019857806323b872dd146101af57806342842e0e146101c25780636352211e146101d557806370a08231146101e857600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e610129366004610e25565b6102ab565b60405190151581526020015b60405180910390f35b61014b6102d6565b60405161013a9190610e99565b61016b610166366004610eac565b610368565b6040516001600160a01b03909116815260200161013a565b610196610191366004610ee1565b610391565b005b6101a1600a5481565b60405190815260200161013a565b6101966101bd366004610f0b565b6103a0565b6101966101d0366004610f0b565b610430565b61016b6101e3366004610eac565b610450565b6101a16101f6366004610f47565b61045b565b60095461016b906001600160a01b031681565b61014b6104a3565b610196610224366004610f70565b6104b2565b61019661023736600461104a565b6104bd565b61014b61024a366004610eac565b6104d4565b61012e61025d366004610eac565b600b6020526000908152604090205460ff1681565b61012e6102803660046110b2565b6104ff565b60085461016b906001600160a01b031681565b6101a16102a63660046110e5565b61052d565b60006001600160e01b03198216632483248360e11b14806102d057506102d082610830565b92915050565b6060600080546102e590611177565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611177565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b5050505050905090565b600061037382610880565b506000828152600460205260409020546001600160a01b03166102d0565b61039c8282336108b9565b5050565b6001600160a01b0382166103cf57604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103dc8383336108c6565b9050836001600160a01b0316816001600160a01b03161461042a576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103c6565b50505050565b61044b838383604051806020016040528060008152506104bd565b505050565b60006102d082610880565b60006001600160a01b038216610487576040516322718ad960e21b8152600060048201526024016103c6565b506001600160a01b031660009081526003602052604090205490565b6060600180546102e590611177565b61039c3383836109bf565b6104c88484846103a0565b61042a84848484610a5e565b60606104df82610880565b506040518060600160405280603581526020016113e16035913992915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600085600a54146105755760405162461bcd60e51b815260206004820152601260248201527108a988c40c8decae640dcdee840dac2e8c6d60731b60448201526064016103c6565b606085901c33146105d25760405162461bcd60e51b815260206004820152602160248201527f70726f6f6647656e657261746f724164647220646f6573206e6f74206d6174636044820152600d60fb1b60648201526084016103c6565b6040805160208082018b90528183018a9052606082018990526bffffffffffffffffffffffff198816608083015282516074818403018152609490920183528151918101919091206000818152600b9092529190205460ff161561066f5760405162461bcd60e51b81526020600482015260146024820152731c1c9bdbd988185b1c9958591e481b5a5b9d195960621b60448201526064016103c6565b60085460095460405160009283926001600160a01b03918216926106a5928f928f928f928f928f928f928f9216906024016111b1565b60408051601f198184030181529181526020820180516001600160e01b03166306045a9160e01b179052516106da9190611218565b600060405180830381855afa9150503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5091509150816107615760405162461bcd60e51b81526020600482015260126024820152711cdd185d1a58d7d8d85b1b0819985a5b195960721b60448201526064016103c6565b6000818060200190518101906107779190611234565b9050806107c65760405162461bcd60e51b815260206004820152601b60248201527f70726f6f66206e6f7420696e636c7564656420696e206261746368000000000060448201526064016103c6565b6000848152600b60205260408120805460ff191660011790556007805490826107ee83611251565b9190505590506107fe3382610b87565b610820816040518060600160405280603581526020016113e160359139610bec565b9c9b505050505050505050505050565b60006001600160e01b031982166380ac58cd60e01b148061086157506001600160e01b03198216635b5e139f60e01b145b806102d057506301ffc9a760e01b6001600160e01b03198316146102d0565b6000818152600260205260408120546001600160a01b0316806102d057604051637e27328960e01b8152600481018490526024016103c6565b61044b8383836001610c3c565b6000828152600260205260408120546001600160a01b03908116908316156108f3576108f3818486610d42565b6001600160a01b0381161561093157610910600085600080610c3c565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610960576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b0382166109f157604051630b61174360e31b81526001600160a01b03831660048201526024016103c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561042a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610aa0903390889087908790600401611278565b6020604051808303816000875af1925050508015610adb575060408051601f3d908101601f19168201909252610ad8918101906112b5565b60015b610b44573d808015610b09576040519150601f19603f3d011682016040523d82523d6000602084013e610b0e565b606091505b508051600003610b3c57604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b8057604051633250574960e11b81526001600160a01b03851660048201526024016103c6565b5050505050565b6001600160a01b038216610bb157604051633250574960e11b8152600060048201526024016103c6565b6000610bbf838360006108c6565b90506001600160a01b0381161561044b576040516339e3563760e11b8152600060048201526024016103c6565b6000828152600660205260409020610c048282611320565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b8080610c5057506001600160a01b03821615155b15610d12576000610c6084610880565b90506001600160a01b03831615801590610c8c5750826001600160a01b0316816001600160a01b031614155b8015610c9f5750610c9d81846104ff565b155b15610cc85760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016103c6565b8115610d105783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610d4d838383610da6565b61044b576001600160a01b038316610d7b57604051637e27328960e01b8152600481018290526024016103c6565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103c6565b60006001600160a01b03831615801590610e045750826001600160a01b0316846001600160a01b03161480610de05750610de084846104ff565b80610e0457506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160e01b031981168114610e2257600080fd5b50565b600060208284031215610e3757600080fd5b8135610e4281610e0c565b9392505050565b60005b83811015610e64578181015183820152602001610e4c565b50506000910152565b60008151808452610e85816020860160208601610e49565b601f01601f19169290920160200192915050565b602081526000610e426020830184610e6d565b600060208284031215610ebe57600080fd5b5035919050565b80356001600160a01b0381168114610edc57600080fd5b919050565b60008060408385031215610ef457600080fd5b610efd83610ec5565b946020939093013593505050565b600080600060608486031215610f2057600080fd5b610f2984610ec5565b9250610f3760208501610ec5565b9150604084013590509250925092565b600060208284031215610f5957600080fd5b610e4282610ec5565b8015158114610e2257600080fd5b60008060408385031215610f8357600080fd5b610f8c83610ec5565b91506020830135610f9c81610f62565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fce57600080fd5b813567ffffffffffffffff80821115610fe957610fe9610fa7565b604051601f8301601f19908116603f0116810190828211818310171561101157611011610fa7565b8160405283815286602085880101111561102a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561106057600080fd5b61106985610ec5565b935061107760208601610ec5565b925060408501359150606085013567ffffffffffffffff81111561109a57600080fd5b6110a687828801610fbd565b91505092959194509250565b600080604083850312156110c557600080fd5b6110ce83610ec5565b91506110dc60208401610ec5565b90509250929050565b600080600080600080600060e0888a03121561110057600080fd5b87359650602088013595506040880135945060608801356bffffffffffffffffffffffff198116811461113257600080fd5b93506080880135925060a088013567ffffffffffffffff81111561115557600080fd5b6111618a828b01610fbd565b92505060c0880135905092959891949750929550565b600181811c9082168061118b57607f821691505b6020821081036111ab57634e487b7160e01b600052602260045260246000fd5b50919050565b60006101008a83528960208401528860408401526bffffffffffffffffffffffff19881660608401528660808401528060a08401526111f281840187610e6d565b60c084019590955250506001600160a01b039190911660e0909101529695505050505050565b6000825161122a818460208701610e49565b9190910192915050565b60006020828403121561124657600080fd5b8151610e4281610f62565b60006001820161127157634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906112ab90830184610e6d565b9695505050505050565b6000602082840312156112c757600080fd5b8151610e4281610e0c565b601f82111561044b57600081815260208120601f850160051c810160208610156112f95750805b601f850160051c820191505b8181101561131857828155600101611305565b505050505050565b815167ffffffffffffffff81111561133a5761133a610fa7565b61134e816113488454611177565b846112d2565b602080601f831160018114611383576000841561136b5750858301515b600019600386901b1c1916600185901b178555611318565b600085815260208120601f198616915b828110156113b257888601518255948401946001909101908401611393565b50858210156113d05787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe697066733a2f2f516d554b76696e793978326f51556567794a464642415555327135727675354373507a725561425344756b704851a2646970667358221220e18828ee8df71e0807a53db821b319416c0c2e1d2b9761b2de39a61c4555fc6d64736f6c63430008150033","sourceMap":"241:2873:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:207:26;;;;;;:::i;:::-;;:::i;:::-;;;565:14:36;;558:22;540:41;;528:2;513:18;937:207:26;;;;;;;;2365:89:23;;;:::i;:::-;;;;;;;:::i;3497:154::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:36;;;1679:51;;1667:2;1652:18;3497:154:23;1533:203:36;3323:113:23;;;;;;:::i;:::-;;:::i;:::-;;410:105:35;;;;;;;;;2324:25:36;;;2312:2;2297:18;410:105:35;2178:177:36;4143:578:23;;;;;;:::i;:::-;;:::i;4787:132::-;;;;;;:::i;:::-;;:::i;2185:118::-;;;;;;:::i;:::-;;:::i;1920:208::-;;;;;;:::i;:::-;;:::i;370:33:35:-;;;;;-1:-1:-1;;;;;370:33:35;;;2518:93:23;;;:::i;3718:144::-;;;;;;:::i;:::-;;:::i;4985:208::-;;;;;;:::i;:::-;;:::i;2898:214:35:-;;;;;;:::i;:::-;;:::i;578:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3928:153:23;;;;;;:::i;:::-;;:::i;328:36:35:-;;;;;-1:-1:-1;;;;;328:36:35;;;883:2009;;;;;;:::i;:::-;;:::i;937:207:26:-;1039:4;-1:-1:-1;;;;;;1062:35:26;;-1:-1:-1;;;1062:35:26;;:75;;;1101:36;1125:11;1101:23;:36::i;:::-;1055:82;937:207;-1:-1:-1;;937:207:26:o;2365:89:23:-;2410:13;2442:5;2435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2365:89;:::o;3497:154::-;3564:7;3583:22;3597:7;3583:13;:22::i;:::-;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6034:24:23;3623:21;5938:127;3323:113;3394:35;3403:2;3407:7;735:10:28;3394:8:23;:35::i;:::-;3323:113;;:::o;4143:578::-;-1:-1:-1;;;;;4237:16:23;;4233:87;;4276:33;;-1:-1:-1;;;4276:33:23;;4306:1;4276:33;;;1679:51:36;1652:18;;4276:33:23;;;;;;;;4233:87;4538:21;4562:34;4570:2;4574:7;735:10:28;4562:7:23;:34::i;:::-;4538:58;;4627:4;-1:-1:-1;;;;;4610:21:23;:13;-1:-1:-1;;;;;4610:21:23;;4606:109;;4654:50;;-1:-1:-1;;;4654:50:23;;-1:-1:-1;;;;;6854:15:36;;;4654:50:23;;;6836:34:36;6886:18;;;6879:34;;;6949:15;;6929:18;;;6922:43;6771:18;;4654:50:23;6596:375:36;4606:109:23;4223:498;4143:578;;;:::o;4787:132::-;4873:39;4890:4;4896:2;4900:7;4873:39;;;;;;;;;;;;:16;:39::i;:::-;4787:132;;;:::o;2185:118::-;2248:7;2274:22;2288:7;2274:13;:22::i;1920:208::-;1983:7;-1:-1:-1;;;;;2006:19:23;;2002:87;;2048:30;;-1:-1:-1;;;2048:30:23;;2075:1;2048:30;;;1679:51:36;1652:18;;2048:30:23;1533:203:36;2002:87:23;-1:-1:-1;;;;;;2105:16:23;;;;;:9;:16;;;;;;;1920:208::o;2518:93::-;2565:13;2597:7;2590:14;;;;;:::i;3718:144::-;3803:52;735:10:28;3836:8:23;3846;3803:18;:52::i;4985:208::-;5098:31;5111:4;5117:2;5121:7;5098:12;:31::i;:::-;5139:47;5162:4;5168:2;5172:7;5181:4;5139:22;:47::i;2898:214:35:-;2985:13;3010:22;3024:7;3010:13;:22::i;:::-;;3043:62;;;;;;;;;;;;;;;;;;2898:214;-1:-1:-1;;2898:214:35:o;3928:153:23:-;-1:-1:-1;;;;;4039:25:23;;;4016:4;4039:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3928:153::o;883:2009:35:-;1201:7;1258:30;1241:13;;:47;1220:112;;;;-1:-1:-1;;;1220:112:35;;7178:2:36;1220:112:35;;;7160:21:36;7217:2;7197:18;;;7190:30;-1:-1:-1;;;7236:18:36;;;7229:48;7294:18;;1220:112:35;6976:342:36;1220:112:35;1363:27;;;;1394:10;1363:41;1342:121;;;;-1:-1:-1;;;1342:121:35;;7525:2:36;1342:121:35;;;7507:21:36;7564:2;7544:18;;;7537:30;7603:34;7583:18;;;7576:62;-1:-1:-1;;;7654:18:36;;;7647:31;7695:19;;1342:121:35;7323:397:36;1342:121:35;1516:183;;;;;;;7938:19:36;;;7973:12;;;7966:28;;;8010:12;;;8003:28;;;-1:-1:-1;;8061:44:36;;8047:12;;;8040:66;1516:183:35;;;;;;;;;8122:13:36;;;;1516:183:35;;1493:216;;;;;;;;;-1:-1:-1;1728:22:35;;;:12;:22;;;;;;;;;1727:23;1719:56;;;;-1:-1:-1;;;1719:56:35;;8348:2:36;1719:56:35;;;8330:21:36;8387:2;8367:18;;;8360:30;-1:-1:-1;;;8406:18:36;;;8399:50;8466:18;;1719:56:35;8146:344:36;1719:56:35;1878:21;;2367:18;;1928:475;;1800:23;;;;-1:-1:-1;;;;;1878:21:35;;;;1928:475;;2080:15;;2117:18;;2157:30;;2209:18;;2249:15;;2286:11;;2319:26;;2367:18;;1928:475;;;:::i;:::-;;;;-1:-1:-1;;1928:475:35;;;;;;;;;;;;;;-1:-1:-1;;;;;1928:475:35;-1:-1:-1;;;1928:475:35;;;1878:539;;;1928:475;1878:539;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:631;;;;2436:18;2428:49;;;;-1:-1:-1;;;2428:49:35;;9799:2:36;2428:49:35;;;9781:21:36;9838:2;9818:18;;;9811:30;-1:-1:-1;;;9857:18:36;;;9850:48;9915:18;;2428:49:35;9597:342:36;2428:49:35;2488:24;2526:15;2515:35;;;;;;;;;;;;:::i;:::-;2488:62;;2568:19;2560:59;;;;-1:-1:-1;;;2560:59:35;;10396:2:36;2560:59:35;;;10378:21:36;10435:2;10415:18;;;10408:30;10474:29;10454:18;;;10447:57;10521:18;;2560:59:35;10194:351:36;2560:59:35;2630:22;;;;:12;:22;;;;;:29;;-1:-1:-1;;2630:29:35;2655:4;2630:29;;;2688:12;:14;;;2630:22;2688:14;;;:::i;:::-;;;;;2670:32;;2712:26;2718:10;2730:7;2712:5;:26::i;:::-;2748:112;2774:7;2748:112;;;;;;;;;;;;;;;;;:12;:112::i;:::-;2878:7;883:2009;-1:-1:-1;;;;;;;;;;;;883:2009:35:o;1561:300:23:-;1663:4;-1:-1:-1;;;;;;1698:40:23;;-1:-1:-1;;;1698:40:23;;:104;;-1:-1:-1;;;;;;;1754:48:23;;-1:-1:-1;;;1754:48:23;1698:104;:156;;;-1:-1:-1;;;;;;;;;;861:40:30;;;1818:36:23;762:146:30;16138:241:23;16201:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;16263:88;;16309:31;;-1:-1:-1;;;16309:31:23;;;;;2324:25:36;;;2297:18;;16309:31:23;2178:177:36;14418:120:23;14498:33;14507:2;14511:7;14520:4;14526;14498:8;:33::i;8838:795::-;8924:7;5799:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5799:16:23;;;;9035:18;;;9031:86;;9069:37;9086:4;9092;9098:7;9069:16;:37::i;:::-;-1:-1:-1;;;;;9161:18:23;;;9157:256;;9277:48;9294:1;9298:7;9315:1;9319:5;9277:8;:48::i;:::-;-1:-1:-1;;;;;9368:15:23;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9368:20:23;;;9157:256;-1:-1:-1;;;;;9427:16:23;;;9423:107;;-1:-1:-1;;;;;9487:13:23;;;;;;:9;:13;;;;;:18;;9504:1;9487:18;;;9423:107;9540:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9540:21:23;-1:-1:-1;;;;;9540:21:23;;;;;;;;;9577:27;;9540:16;;9577:27;;;;;;;9622:4;8838:795;-1:-1:-1;;;;8838:795:23:o;15591:312::-;-1:-1:-1;;;;;15698:22:23;;15694:91;;15743:31;;-1:-1:-1;;;15743:31:23;;-1:-1:-1;;;;;1697:32:36;;15743:31:23;;;1679:51:36;1652:18;;15743:31:23;1533:203:36;15694:91:23;-1:-1:-1;;;;;15794:25:23;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15794:46:23;;;;;;;;;;15855:41;;540::36;;;15855::23;;513:18:36;15855:41:23;;;;;;;15591:312;;;:::o;16918:782::-;-1:-1:-1;;;;;17034:14:23;;;:18;17030:664;;17072:71;;-1:-1:-1;;;17072:71:23;;-1:-1:-1;;;;;17072:36:23;;;;;:71;;735:10:28;;17123:4:23;;17129:7;;17138:4;;17072:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17072:71:23;;;;;;;;-1:-1:-1;;17072:71:23;;;;;;;;;;;;:::i;:::-;;;17068:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17381:6;:13;17398:1;17381:18;17377:293;;17430:25;;-1:-1:-1;;;17430:25:23;;-1:-1:-1;;;;;1697:32:36;;17430:25:23;;;1679:51:36;1652:18;;17430:25:23;1533:203:36;17377:293:23;17622:6;17616:13;17607:6;17603:2;17599:15;17592:38;17068:616;-1:-1:-1;;;;;;17190:51:23;;-1:-1:-1;;;17190:51:23;17186:130;;17272:25;;-1:-1:-1;;;17272:25:23;;-1:-1:-1;;;;;1697:32:36;;17272:25:23;;;1679:51:36;1652:18;;17272:25:23;1533:203:36;17186:130:23;17144:186;16918:782;;;;:::o;9955:327::-;-1:-1:-1;;;;;10022:16:23;;10018:87;;10061:33;;-1:-1:-1;;;10061:33:23;;10091:1;10061:33;;;1679:51:36;1652:18;;10061:33:23;1533:203:36;10018:87:23;10114:21;10138:32;10146:2;10150:7;10167:1;10138:7;:32::i;:::-;10114:56;-1:-1:-1;;;;;;10184:27:23;;;10180:96;;10234:31;;-1:-1:-1;;;10234:31:23;;10262:1;10234:31;;;1679:51:36;1652:18;;10234:31:23;1533:203:36;1922:167:26;2013:19;;;;:10;:19;;;;;:31;2035:9;2013:19;:31;:::i;:::-;-1:-1:-1;2059:23:26;;2324:25:36;;;2059:23:26;;2312:2:36;2297:18;2059:23:26;;;;;;;1922:167;;:::o;14720:662:23:-;14880:9;:31;;;-1:-1:-1;;;;;;14893:18:23;;;;14880:31;14876:460;;;14927:13;14943:22;14957:7;14943:13;:22::i;:::-;14927:38;-1:-1:-1;;;;;;15093:18:23;;;;;;:35;;;15124:4;-1:-1:-1;;;;;15115:13:23;:5;-1:-1:-1;;;;;15115:13:23;;;15093:35;:69;;;;;15133:29;15150:5;15157:4;15133:16;:29::i;:::-;15132:30;15093:69;15089:142;;;15189:27;;-1:-1:-1;;;15189:27:23;;-1:-1:-1;;;;;1697:32:36;;15189:27:23;;;1679:51:36;1652:18;;15189:27:23;1533:203:36;15089:142:23;15249:9;15245:81;;;15303:7;15299:2;-1:-1:-1;;;;;15283:28:23;15292:5;-1:-1:-1;;;;;15283:28:23;;;;;;;;;;;15245:81;14913:423;14876:460;-1:-1:-1;;15346:24:23;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15346:29:23;-1:-1:-1;;;;;15346:29:23;;;;;;;;;;14720:662::o;7082:368::-;7194:38;7208:5;7215:7;7224;7194:13;:38::i;:::-;7189:255;;-1:-1:-1;;;;;7252:19:23;;7248:186;;7298:31;;-1:-1:-1;;;7298:31:23;;;;;2324:25:36;;;2297:18;;7298:31:23;2178:177:36;7248:186:23;7375:44;;-1:-1:-1;;;7375:44:23;;-1:-1:-1;;;;;13931:32:36;;7375:44:23;;;13913:51:36;13980:18;;;13973:34;;;13886:18;;7375:44:23;13739:274:36;6376:272:23;6479:4;-1:-1:-1;;;;;6514:21:23;;;;;;:127;;;6561:7;-1:-1:-1;;;;;6552:16:23;:5;-1:-1:-1;;;;;6552:16:23;;:52;;;;6572:32;6589:5;6596:7;6572:16;:32::i;:::-;6552:88;;;-1:-1:-1;6008:7:23;6034:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6608:32:23;;;6034:24;;6608:32;6552:88;6495:146;6376:272;-1:-1:-1;;;;6376:272:23:o;14:131:36:-;-1:-1:-1;;;;;;88:32:36;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:36:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:36;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:36;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:36:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:36;;1348:180;-1:-1:-1;1348:180:36:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:36;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:36:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:186::-;2752:6;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;3066:118::-;3152:5;3145:13;3138:21;3131:5;3128:32;3118:60;;3174:1;3171;3164:12;3189:315;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3354:29;3373:9;3354:29;:::i;:::-;3344:39;;3433:2;3422:9;3418:18;3405:32;3446:28;3468:5;3446:28;:::i;:::-;3493:5;3483:15;;;3189:315;;;;;:::o;3509:127::-;3570:10;3565:3;3561:20;3558:1;3551:31;3601:4;3598:1;3591:15;3625:4;3622:1;3615:15;3641:718;3683:5;3736:3;3729:4;3721:6;3717:17;3713:27;3703:55;;3754:1;3751;3744:12;3703:55;3790:6;3777:20;3816:18;3853:2;3849;3846:10;3843:36;;;3859:18;;:::i;:::-;3934:2;3928:9;3902:2;3988:13;;-1:-1:-1;;3984:22:36;;;4008:2;3980:31;3976:40;3964:53;;;4032:18;;;4052:22;;;4029:46;4026:72;;;4078:18;;:::i;:::-;4118:10;4114:2;4107:22;4153:2;4145:6;4138:18;4199:3;4192:4;4187:2;4179:6;4175:15;4171:26;4168:35;4165:55;;;4216:1;4213;4206:12;4165:55;4280:2;4273:4;4265:6;4261:17;4254:4;4246:6;4242:17;4229:54;4327:1;4320:4;4315:2;4307:6;4303:15;4299:26;4292:37;4347:6;4338:15;;;;;;3641:718;;;;:::o;4364:537::-;4459:6;4467;4475;4483;4536:3;4524:9;4515:7;4511:23;4507:33;4504:53;;;4553:1;4550;4543:12;4504:53;4576:29;4595:9;4576:29;:::i;:::-;4566:39;;4624:38;4658:2;4647:9;4643:18;4624:38;:::i;:::-;4614:48;;4709:2;4698:9;4694:18;4681:32;4671:42;;4764:2;4753:9;4749:18;4736:32;4791:18;4783:6;4780:30;4777:50;;;4823:1;4820;4813:12;4777:50;4846:49;4887:7;4878:6;4867:9;4863:22;4846:49;:::i;:::-;4836:59;;;4364:537;;;;;;;:::o;5091:260::-;5159:6;5167;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;5259:29;5278:9;5259:29;:::i;:::-;5249:39;;5307:38;5341:2;5330:9;5326:18;5307:38;:::i;:::-;5297:48;;5091:260;;;;;:::o;5356:850::-;5478:6;5486;5494;5502;5510;5518;5526;5579:3;5567:9;5558:7;5554:23;5550:33;5547:53;;;5596:1;5593;5586:12;5547:53;5619:23;;;-1:-1:-1;5689:2:36;5674:18;;5661:32;;-1:-1:-1;5740:2:36;5725:18;;5712:32;;-1:-1:-1;5794:2:36;5779:18;;5766:32;-1:-1:-1;;5827:43:36;;5817:54;;5807:82;;5885:1;5882;5875:12;5807:82;5908:5;-1:-1:-1;5960:3:36;5945:19;;5932:33;;-1:-1:-1;6016:3:36;6001:19;;5988:33;6044:18;6033:30;;6030:50;;;6076:1;6073;6066:12;6030:50;6099:49;6140:7;6131:6;6120:9;6116:22;6099:49;:::i;:::-;6089:59;;;6195:3;6184:9;6180:19;6167:33;6157:43;;5356:850;;;;;;;;;;:::o;6211:380::-;6290:1;6286:12;;;;6333;;;6354:61;;6408:4;6400:6;6396:17;6386:27;;6354:61;6461:2;6453:6;6450:14;6430:18;6427:38;6424:161;;6507:10;6502:3;6498:20;6495:1;6488:31;6542:4;6539:1;6532:15;6570:4;6567:1;6560:15;6424:161;;6211:380;;;:::o;8495:805::-;8801:4;8830:3;8860:6;8849:9;8842:25;8903:6;8898:2;8887:9;8883:18;8876:34;8946:6;8941:2;8930:9;8926:18;8919:34;9005:26;9001:31;8993:6;8989:44;8984:2;8973:9;8969:18;8962:72;9071:6;9065:3;9054:9;9050:19;9043:35;9115:2;9109:3;9098:9;9094:19;9087:31;9135:45;9176:2;9165:9;9161:18;9153:6;9135:45;:::i;:::-;9211:3;9196:19;;9189:35;;;;-1:-1:-1;;;;;;;9261:32:36;;;;9255:3;9240:19;;;9233:61;9127:53;8495:805;-1:-1:-1;;;;;;8495:805:36:o;9305:287::-;9434:3;9472:6;9466:13;9488:66;9547:6;9542:3;9535:4;9527:6;9523:17;9488:66;:::i;:::-;9570:16;;;;;9305:287;-1:-1:-1;;9305:287:36:o;9944:245::-;10011:6;10064:2;10052:9;10043:7;10039:23;10035:32;10032:52;;;10080:1;10077;10070:12;10032:52;10112:9;10106:16;10131:28;10153:5;10131:28;:::i;10550:232::-;10589:3;10610:17;;;10607:140;;10669:10;10664:3;10660:20;10657:1;10650:31;10704:4;10701:1;10694:15;10732:4;10729:1;10722:15;10607:140;-1:-1:-1;10774:1:36;10763:13;;10550:232::o;10787:489::-;-1:-1:-1;;;;;11056:15:36;;;11038:34;;11108:15;;11103:2;11088:18;;11081:43;11155:2;11140:18;;11133:34;;;11203:3;11198:2;11183:18;;11176:31;;;10981:4;;11224:46;;11250:19;;11242:6;11224:46;:::i;:::-;11216:54;10787:489;-1:-1:-1;;;;;;10787:489:36:o;11281:249::-;11350:6;11403:2;11391:9;11382:7;11378:23;11374:32;11371:52;;;11419:1;11416;11409:12;11371:52;11451:9;11445:16;11470:30;11494:5;11470:30;:::i;11661:545::-;11763:2;11758:3;11755:11;11752:448;;;11799:1;11824:5;11820:2;11813:17;11869:4;11865:2;11855:19;11939:2;11927:10;11923:19;11920:1;11916:27;11910:4;11906:38;11975:4;11963:10;11960:20;11957:47;;;-1:-1:-1;11998:4:36;11957:47;12053:2;12048:3;12044:12;12041:1;12037:20;12031:4;12027:31;12017:41;;12108:82;12126:2;12119:5;12116:13;12108:82;;;12171:17;;;12152:1;12141:13;12108:82;;;12112:3;;;11661:545;;;:::o;12382:1352::-;12508:3;12502:10;12535:18;12527:6;12524:30;12521:56;;;12557:18;;:::i;:::-;12586:97;12676:6;12636:38;12668:4;12662:11;12636:38;:::i;:::-;12630:4;12586:97;:::i;:::-;12738:4;;12802:2;12791:14;;12819:1;12814:663;;;;13521:1;13538:6;13535:89;;;-1:-1:-1;13590:19:36;;;13584:26;13535:89;-1:-1:-1;;12339:1:36;12335:11;;;12331:24;12327:29;12317:40;12363:1;12359:11;;;12314:57;13637:81;;12784:944;;12814:663;11608:1;11601:14;;;11645:4;11632:18;;-1:-1:-1;;12850:20:36;;;12968:236;12982:7;12979:1;12976:14;12968:236;;;13071:19;;;13065:26;13050:42;;13163:27;;;;13131:1;13119:14;;;;12998:19;;12968:236;;;12972:3;13232:6;13223:7;13220:19;13217:201;;;13293:19;;;13287:26;-1:-1:-1;;13376:1:36;13372:14;;;13388:3;13368:24;13364:37;13360:42;13345:58;13330:74;;13217:201;-1:-1:-1;;;;;13464:1:36;13448:14;;;13444:22;13431:36;;-1:-1:-1;12382:1352:36:o","linkReferences":{}},"methodIdentifiers":{"alignedServiceManager()":"f19cd882","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","elfCommitment()":"2212d607","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","mintedProofs(bytes32)":"dd3df4bd","name()":"06fdde03","ownerOf(uint256)":"6352211e","paymentServiceAddr()":"90a05f2e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd","verifyBatchInclusion(bytes32,bytes32,bytes32,bytes20,bytes32,bytes,uint256)":"fa534dc0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alignedServiceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentServiceAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"alignedServiceManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"elfCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"mintedProofs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paymentServiceAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proofCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pubInputCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"provingSystemAuxDataCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes20\",\"name\":\"proofGeneratorAddr\",\"type\":\"bytes20\"},{\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"verificationDataBatchIndex\",\"type\":\"uint256\"}],\"name\":\"verifyBatchInclusion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"BatchMetadataUpdate(uint256,uint256)\":{\"details\":\"This event emits when the metadata of a range of tokens is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFTs.\"},\"MetadataUpdate(uint256)\":{\"details\":\"This event emits when the metadata of a token is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFT.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/VerifierContract.sol\":\"VerifierContract\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd\",\"dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96\",\"dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/VerifierContract.sol\":{\"keccak256\":\"0xc8659bc4c13fefdfa3dcbc8cfefc578a7bbfa3e265d0058cd2cd474bdab87966\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a218a59d1a5502392148e281e6018d7214fc5dbe3e830ae683601e16986734f8\",\"dweb:/ipfs/QmVJ6yQ4vijhg6FEZQnaBY8YJspFxEgPqZZhPiiQHahVdw\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_alignedServiceManager","type":"address"},{"internalType":"address","name":"_paymentServiceAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_fromTokenId","type":"uint256","indexed":false},{"internalType":"uint256","name":"_toTokenId","type":"uint256","indexed":false}],"type":"event","name":"BatchMetadataUpdate","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256","indexed":false}],"type":"event","name":"MetadataUpdate","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"alignedServiceManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"elfCommitment","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"mintedProofs","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paymentServiceAddr","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"bytes32","name":"proofCommitment","type":"bytes32"},{"internalType":"bytes32","name":"pubInputCommitment","type":"bytes32"},{"internalType":"bytes32","name":"provingSystemAuxDataCommitment","type":"bytes32"},{"internalType":"bytes20","name":"proofGeneratorAddr","type":"bytes20"},{"internalType":"bytes32","name":"batchMerkleRoot","type":"bytes32"},{"internalType":"bytes","name":"merkleProof","type":"bytes"},{"internalType":"uint256","name":"verificationDataBatchIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"verifyBatchInclusion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"approve(address,uint256)":{"details":"See {IERC721-approve}."},"balanceOf(address)":{"details":"See {IERC721-balanceOf}."},"getApproved(uint256)":{"details":"See {IERC721-getApproved}."},"isApprovedForAll(address,address)":{"details":"See {IERC721-isApprovedForAll}."},"name()":{"details":"See {IERC721Metadata-name}."},"ownerOf(uint256)":{"details":"See {IERC721-ownerOf}."},"safeTransferFrom(address,address,uint256)":{"details":"See {IERC721-safeTransferFrom}."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"See {IERC721-safeTransferFrom}."},"setApprovalForAll(address,bool)":{"details":"See {IERC721-setApprovalForAll}."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}"},"symbol()":{"details":"See {IERC721Metadata-symbol}."},"tokenURI(uint256)":{"details":"See {IERC721Metadata-tokenURI}."},"transferFrom(address,address,uint256)":{"details":"See {IERC721-transferFrom}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/VerifierContract.sol":"VerifierContract"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol":{"keccak256":"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44","urls":["bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd","dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol":{"keccak256":"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d","urls":["bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b","dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784","urls":["bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd","dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4","urls":["bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7","dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49","urls":["bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22","dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol":{"keccak256":"0xcc6f49e0c57072d6a18eef0d5fc22a4cc20462c18f0c365d2dd9a2c732fde670","urls":["bzz-raw://24915e61c7896c336b60788408cd5792b97b782e98e392920a2c55eb1803fe96","dweb:/ipfs/QmVHhcmFnMYZBCjnVUk6f5quMCDsBR2j669a1nuMiGWY9Z"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/VerifierContract.sol":{"keccak256":"0xc8659bc4c13fefdfa3dcbc8cfefc578a7bbfa3e265d0058cd2cd474bdab87966","urls":["bzz-raw://a218a59d1a5502392148e281e6018d7214fc5dbe3e830ae683601e16986734f8","dweb:/ipfs/QmVJ6yQ4vijhg6FEZQnaBY8YJspFxEgPqZZhPiiQHahVdw"],"license":"UNLICENSED"}},"version":1},"id":35} \ No newline at end of file diff --git a/examples/zkquiz/quiz/script/src/main.rs b/examples/zkquiz/quiz/script/src/main.rs index ea3027330..485262410 100644 --- a/examples/zkquiz/quiz/script/src/main.rs +++ b/examples/zkquiz/quiz/script/src/main.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use std::sync::Arc; use aligned_sdk::core::types::{AlignedVerificationData, Chain, ProvingSystemId, VerificationData}; -use aligned_sdk::sdk::{get_next_nonce, submit_and_wait_verification}; +use aligned_sdk::sdk::{submit_and_wait_verification, get_next_nonce}; use clap::Parser; use dialoguer::Confirm; use ethers::prelude::*; @@ -72,7 +72,7 @@ async fn main() { let client = ProverClient::new(); let (pk, vk) = client.setup(ELF); - match client.prove(&pk, stdin).compressed().run() { + match client.prove(&pk, stdin).run() { Ok(proof) => { println!("Proof generated successfully. Verifying proof..."); @@ -117,6 +117,7 @@ async fn main() { &verification_data, wallet.clone(), nonce, + BATCHER_PAYMENTS_ADDRESS ) .await { @@ -125,7 +126,6 @@ async fn main() { "Proof submitted and verified successfully on batch {}, claiming prize...", hex::encode(aligned_verification_data.batch_merkle_root) ); - if let Err(e) = verify_batch_inclusion( aligned_verification_data.clone(), signer.clone(), @@ -135,7 +135,7 @@ async fn main() { { println!("Failed to claim prize: {:?}", e); } - } + }, Err(e) => { println!("Proof verification failed: {:?}", e); } diff --git a/operator/pkg/operator.go b/operator/pkg/operator.go index 3a861a86d..116c4648e 100644 --- a/operator/pkg/operator.go +++ b/operator/pkg/operator.go @@ -11,8 +11,6 @@ import ( "time" "github.com/ethereum/go-ethereum/crypto" - "github.com/yetanotherco/aligned_layer/operator/mina" - "github.com/yetanotherco/aligned_layer/operator/mina_account" "github.com/yetanotherco/aligned_layer/operator/risc_zero" "github.com/prometheus/client_golang/prometheus" @@ -39,19 +37,20 @@ import ( ) type Operator struct { - Config config.OperatorConfig - Address ethcommon.Address - Socket string - Timeout time.Duration - PrivKey *ecdsa.PrivateKey - KeyPair *bls.KeyPair - OperatorId eigentypes.OperatorId - avsSubscriber chainio.AvsSubscriber - NewTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 - Logger logging.Logger - aggRpcClient AggregatorRpcClient - metricsReg *prometheus.Registry - metrics *metrics.Metrics + Config config.OperatorConfig + Address ethcommon.Address + Socket string + Timeout time.Duration + PrivKey *ecdsa.PrivateKey + KeyPair *bls.KeyPair + OperatorId eigentypes.OperatorId + avsSubscriber chainio.AvsSubscriber + NewTaskCreatedChan chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch + NewTaskCreatedChanV2 chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2 + Logger logging.Logger + aggRpcClient AggregatorRpcClient + metricsReg *prometheus.Registry + metrics *metrics.Metrics //Socket string //Timeout time.Duration } @@ -93,7 +92,8 @@ func NewOperatorFromConfig(configuration config.OperatorConfig) (*Operator, erro if err != nil { log.Fatalf("Could not create AVS subscriber") } - newTaskCreatedChan := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) + newTaskCreatedChan := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatch) + newTaskCreatedChanV2 := make(chan *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) rpcClient, err := NewAggregatorRpcClient(configuration.Operator.AggregatorServerIpPortAddress, logger) if err != nil { @@ -108,15 +108,16 @@ func NewOperatorFromConfig(configuration config.OperatorConfig) (*Operator, erro operatorMetrics := metrics.NewMetrics(configuration.Operator.MetricsIpPortAddress, reg, logger) operator := &Operator{ - Config: configuration, - Logger: logger, - avsSubscriber: *avsSubscriber, - Address: address, - NewTaskCreatedChan: newTaskCreatedChan, - aggRpcClient: *rpcClient, - OperatorId: operatorId, - metricsReg: reg, - metrics: operatorMetrics, + Config: configuration, + Logger: logger, + avsSubscriber: *avsSubscriber, + Address: address, + NewTaskCreatedChan: newTaskCreatedChan, + NewTaskCreatedChanV2: newTaskCreatedChanV2, + aggRpcClient: *rpcClient, + OperatorId: operatorId, + metricsReg: reg, + metrics: operatorMetrics, // Timeout // Socket } @@ -127,12 +128,19 @@ func NewOperatorFromConfig(configuration config.OperatorConfig) (*Operator, erro func (o *Operator) SubscribeToNewTasks() (chan error, error) { return o.avsSubscriber.SubscribeToNewTasks(o.NewTaskCreatedChan) } +func (o *Operator) SubscribeToNewTasksV2() (chan error, error) { + return o.avsSubscriber.SubscribeToNewTasksV2(o.NewTaskCreatedChanV2) +} func (o *Operator) Start(ctx context.Context) error { sub, err := o.SubscribeToNewTasks() if err != nil { log.Fatal("Could not subscribe to new tasks") } + subV2, err := o.SubscribeToNewTasksV2() + if err != nil { + log.Fatal("Could not subscribe to new tasks") + } var metricsErrChan <-chan error if o.Config.Operator.EnableMetrics { @@ -141,6 +149,8 @@ func (o *Operator) Start(ctx context.Context) error { metricsErrChan = make(chan error, 1) } + var switchBlockNumber = uint32(2_268_375) // 2_268_375 is the block at sep 3th 15:00 + for { select { case <-context.Background().Done(): @@ -154,44 +164,110 @@ func (o *Operator) Start(ctx context.Context) error { if err != nil { o.Logger.Fatal("Could not subscribe to new tasks") } + case err := <-subV2: + o.Logger.Infof("Error in websocket subscription", "err", err) + sub, err = o.SubscribeToNewTasks() + if err != nil { + o.Logger.Fatal("Could not subscribe to new tasks") + } case newBatchLog := <-o.NewTaskCreatedChan: - go o.handleNewBatchLog(newBatchLog) + if newBatchLog.TaskCreatedBlock < switchBlockNumber { + o.Logger.Infof("Received new batch log: V1") + err := o.ProcessNewBatchLog(newBatchLog) + if err != nil { + o.Logger.Infof("batch %x did not verify. Err: %v", newBatchLog.BatchMerkleRoot, err) + continue + } + + responseSignature := o.SignTaskResponse(newBatchLog.BatchMerkleRoot) + o.Logger.Debugf("responseSignature about to send: %x", responseSignature) + + signedTaskResponse := types.SignedTaskResponse{ + BatchMerkleRoot: newBatchLog.BatchMerkleRoot, + BlsSignature: *responseSignature, + OperatorId: o.OperatorId, + } + o.Logger.Infof("Signed Task Response to send: BatchIdentifierHash=%s, BatchMerkleRoot=%s, SenderAddress=%s", + hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), + ) + go o.aggRpcClient.SendSignedTaskResponseToAggregator(&signedTaskResponse) + } + + case newBatchLogV2 := <-o.NewTaskCreatedChanV2: + if newBatchLogV2.TaskCreatedBlock >= switchBlockNumber { + o.Logger.Infof("Received new batch log: V2") + err := o.ProcessNewBatchLogV2(newBatchLogV2) + if err != nil { + o.Logger.Infof("batch %x did not verify. Err: %v", newBatchLogV2.BatchMerkleRoot, err) + continue + } + + batchIdentifier := append(newBatchLogV2.BatchMerkleRoot[:], newBatchLogV2.SenderAddress[:]...) + var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) + responseSignature := o.SignTaskResponse(batchIdentifierHash) + o.Logger.Debugf("responseSignature about to send: %x", responseSignature) + + signedTaskResponse := types.SignedTaskResponseV2{ + BatchIdentifierHash: batchIdentifierHash, + BatchMerkleRoot: newBatchLogV2.BatchMerkleRoot, + SenderAddress: newBatchLogV2.SenderAddress, + BlsSignature: *responseSignature, + OperatorId: o.OperatorId, + } + o.Logger.Infof("Signed Task Response to send: BatchIdentifierHash=%s, BatchMerkleRoot=%s, SenderAddress=%s", + hex.EncodeToString(signedTaskResponse.BatchIdentifierHash[:]), + hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), + hex.EncodeToString(signedTaskResponse.SenderAddress[:]), + ) + go o.aggRpcClient.SendSignedTaskResponseToAggregatorV2(&signedTaskResponse) + } } } } -func (o *Operator) handleNewBatchLog(newBatchLog *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) { - o.Logger.Infof("Received new batch log") - err := o.ProcessNewBatchLog(newBatchLog) +// Takes a NewTaskCreatedLog struct as input and returns a TaskResponseHeader struct. +// The TaskResponseHeader struct is the struct that is signed and sent to the contract as a task response. +func (o *Operator) ProcessNewBatchLog(newBatchLog *servicemanager.ContractAlignedLayerServiceManagerNewBatch) error { + + o.Logger.Info("Received new batch with proofs to verify", + "batch merkle root", "0x"+hex.EncodeToString(newBatchLog.BatchMerkleRoot[:]), + ) + + ctx, cancel := context.WithTimeout(context.Background(), BatchDownloadTimeout) + defer cancel() + + verificationDataBatch, err := o.getBatchFromS3(ctx, newBatchLog.BatchDataPointer, newBatchLog.BatchMerkleRoot) if err != nil { - o.Logger.Infof("batch %x did not verify. Err: %v", newBatchLog.BatchMerkleRoot, err) - return + o.Logger.Errorf("Could not get proofs from S3 bucket: %v", err) + return err } - batchIdentifier := append(newBatchLog.BatchMerkleRoot[:], newBatchLog.SenderAddress[:]...) - var batchIdentifierHash = *(*[32]byte)(crypto.Keccak256(batchIdentifier)) - responseSignature := o.SignTaskResponse(batchIdentifierHash) - o.Logger.Debugf("responseSignature about to send: %x", responseSignature) - - signedTaskResponse := types.SignedTaskResponse{ - BatchIdentifierHash: batchIdentifierHash, - BatchMerkleRoot: newBatchLog.BatchMerkleRoot, - SenderAddress: newBatchLog.SenderAddress, - BlsSignature: *responseSignature, - OperatorId: o.OperatorId, + verificationDataBatchLen := len(verificationDataBatch) + results := make(chan bool, verificationDataBatchLen) + var wg sync.WaitGroup + wg.Add(verificationDataBatchLen) + for _, verificationData := range verificationDataBatch { + go func(data VerificationData) { + defer wg.Done() + o.verify(data, results) + o.metrics.IncOperatorTaskResponses() + }(verificationData) } - o.Logger.Infof("Signed Task Response to send: BatchIdentifierHash=%s, BatchMerkleRoot=%s, SenderAddress=%s", - hex.EncodeToString(signedTaskResponse.BatchIdentifierHash[:]), - hex.EncodeToString(signedTaskResponse.BatchMerkleRoot[:]), - hex.EncodeToString(signedTaskResponse.SenderAddress[:]), - ) - - o.aggRpcClient.SendSignedTaskResponseToAggregator(&signedTaskResponse) -} -// Takes a NewTaskCreatedLog struct as input and returns a TaskResponseHeader struct. -// The TaskResponseHeader struct is the struct that is signed and sent to the contract as a task response. -func (o *Operator) ProcessNewBatchLog(newBatchLog *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) error { + go func() { + wg.Wait() + close(results) + }() + + for result := range results { + if !result { + return fmt.Errorf("invalid proof") + } + } + + return nil +} +func (o *Operator) ProcessNewBatchLogV2(newBatchLog *servicemanager.ContractAlignedLayerServiceManagerNewBatchV2) error { o.Logger.Info("Received new batch with proofs to verify", "batch merkle root", "0x"+hex.EncodeToString(newBatchLog.BatchMerkleRoot[:]), @@ -294,28 +370,6 @@ func (o *Operator) verify(verificationData VerificationData, results chan bool) o.Logger.Infof("Risc0 proof verification result: %t", verificationResult) results <- verificationResult - case common.Mina: - proofLen := (uint)(len(verificationData.Proof)) - pubInputLen := (uint)(len(verificationData.PubInput)) - proofBuffer := make([]byte, mina.MAX_PROOF_SIZE) - copy(proofBuffer, verificationData.Proof) - pubInputBuffer := make([]byte, mina.MAX_PUB_INPUT_SIZE) - copy(pubInputBuffer, verificationData.PubInput) - - verificationResult := mina.VerifyMinaState(([mina.MAX_PROOF_SIZE]byte)(proofBuffer), proofLen, ([mina.MAX_PUB_INPUT_SIZE]byte)(pubInputBuffer), (uint)(pubInputLen)) - o.Logger.Infof("Mina state proof verification result: %t", verificationResult) - results <- verificationResult - case common.MinaAccount: - proofLen := (uint)(len(verificationData.Proof)) - pubInputLen := (uint)(len(verificationData.PubInput)) - proofBuffer := make([]byte, mina.MAX_PROOF_SIZE) - copy(proofBuffer, verificationData.Proof) - pubInputBuffer := make([]byte, mina.MAX_PUB_INPUT_SIZE) - copy(pubInputBuffer, verificationData.PubInput) - - verificationResult := mina_account.VerifyAccountInclusion(([mina_account.MAX_PROOF_SIZE]byte)(proofBuffer), proofLen, ([mina_account.MAX_PUB_INPUT_SIZE]byte)(pubInputBuffer), (uint)(pubInputLen)) - o.Logger.Infof("Mina account inclusion proof verification result: %t", verificationResult) - results <- verificationResult default: o.Logger.Error("Unrecognized proving system ID") results <- false diff --git a/operator/pkg/rpc_client.go b/operator/pkg/rpc_client.go index 5726f14df..2f72e997e 100644 --- a/operator/pkg/rpc_client.go +++ b/operator/pkg/rpc_client.go @@ -37,6 +37,32 @@ func NewAggregatorRpcClient(aggregatorIpPortAddr string, logger logging.Logger) // SendSignedTaskResponseToAggregator is the method called by operators via RPC to send // their signed task response. func (c *AggregatorRpcClient) SendSignedTaskResponseToAggregator(signedTaskResponse *types.SignedTaskResponse) { + var reply uint8 + for retries := 0; retries < MaxRetries; retries++ { + err := c.rpcClient.Call("Aggregator.ProcessOperatorSignedTaskResponse", signedTaskResponse, &reply) + if err != nil { + c.logger.Error("Received error from aggregator", "err", err) + if errors.Is(err, rpc.ErrShutdown) { + c.logger.Error("Aggregator is shutdown. Reconnecting...") + client, err := rpc.DialHTTP("tcp", c.aggregatorIpPortAddr) + if err != nil { + c.logger.Error("Could not reconnect to aggregator", "err", err) + time.Sleep(RetryInterval) + } else { + c.rpcClient = client + c.logger.Info("Reconnected to aggregator") + } + } else { + c.logger.Infof("Received error from aggregator: %s. Retrying ProcessOperatorSignedTaskResponse RPC call...", err) + time.Sleep(RetryInterval) + } + } else { + c.logger.Info("Signed task response header accepted by aggregator.", "reply", reply) + return + } + } +} +func (c *AggregatorRpcClient) SendSignedTaskResponseToAggregatorV2(signedTaskResponse *types.SignedTaskResponseV2) { var reply uint8 for retries := 0; retries < MaxRetries; retries++ { err := c.rpcClient.Call("Aggregator.ProcessOperatorSignedTaskResponseV2", signedTaskResponse, &reply)