diff --git a/.github/workflows/abi.yml b/.github/workflows/abi.yml new file mode 100644 index 0000000..ccc0eb8 --- /dev/null +++ b/.github/workflows/abi.yml @@ -0,0 +1,48 @@ +name: abi-consistent-check + +on: + push: + branches: [ "main"] + pull_request: + branches: [ "main" ] + +jobs: + build-and-compare: + runs-on: ubuntu-latest + + steps: + - name: Clone current repository + uses: actions/checkout@v3 + + - name: Get the Git revision from the current repository + id: get-rev + run: echo "rev=$(cat ./storage-contracts-abis/0g-storage-contracts-rev)" >> $GITHUB_OUTPUT + + - name: Clone another repository + uses: actions/checkout@v3 + with: + repository: '0glabs/0g-storage-contracts' + path: '0g-storage-contracts' + + - name: Checkout specific revision + working-directory: ./0g-storage-contracts + run: | + git fetch --depth=1 origin ${{ steps.get-rev.outputs.rev }} + git checkout ${{ steps.get-rev.outputs.rev }} + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '18.17' + cache: 'yarn' + cache-dependency-path: ./0g-storage-contracts + + - name: Run yarn in the cloned repository + working-directory: ./0g-storage-contracts + run: | + yarn + yarn build + + - name: Compare files + run: | + ./scripts/check_abis.sh ./0g-storage-contracts/artifacts/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 7e39815..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "0g-storage-contracts"] - path = 0g-storage-contracts - url = https://github.com/0glabs/0g-storage-contracts.git diff --git a/0g-storage-contracts b/0g-storage-contracts deleted file mode 160000 index 8f8f906..0000000 --- a/0g-storage-contracts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8f8f906224f966651de0b745738fb8aab4f492c4 diff --git a/common/contract-interface/src/lib.rs b/common/contract-interface/src/lib.rs index 5ba6e18..1417dc6 100644 --- a/common/contract-interface/src/lib.rs +++ b/common/contract-interface/src/lib.rs @@ -3,16 +3,10 @@ use ethers::prelude::abigen; // run `cargo doc -p contract-interface --open` to read struct definition #[cfg(not(feature = "dev"))] -abigen!( - ZgsFlow, - "../../0g-storage-contracts/artifacts/contracts/dataFlow/Flow.sol/Flow.json" -); +abigen!(ZgsFlow, "../../storage-contracts-abis/Flow.json"); #[cfg(not(feature = "dev"))] -abigen!( - PoraMine, - "../../0g-storage-contracts/artifacts/contracts/miner/Mine.sol/PoraMine.json" -); +abigen!(PoraMine, "../../storage-contracts-abis/PoraMine.json"); #[cfg(not(feature = "dev"))] abigen!( diff --git a/node/miner/src/lib.rs b/node/miner/src/lib.rs index 0fc06f4..5e9de59 100644 --- a/node/miner/src/lib.rs +++ b/node/miner/src/lib.rs @@ -9,6 +9,7 @@ mod loader; mod metrics; mod mine; mod miner_id; +mod monitor; pub mod pora; mod recall_range; mod sealer; diff --git a/node/miner/src/mine.rs b/node/miner/src/mine.rs index 6f41dd2..6fe6ace 100644 --- a/node/miner/src/mine.rs +++ b/node/miner/src/mine.rs @@ -9,7 +9,6 @@ use tokio::time::{sleep, Duration, Instant}; use storage::config::ShardConfig; use zgs_spec::{SECTORS_PER_LOAD, SECTORS_PER_MAX_MINING_RANGE, SECTORS_PER_PRICING}; -use super::metrics; use crate::recall_range::RecallRange; use crate::{ pora::{AnswerWithoutProof, Miner}, @@ -20,7 +19,7 @@ use crate::{ use std::sync::Arc; pub struct PoraService { - mine_context_receiver: mpsc::UnboundedReceiver, + mine_context_receiver: broadcast::Receiver, mine_answer_sender: mpsc::UnboundedSender, msg_recv: broadcast::Receiver, loader: Arc, @@ -33,9 +32,29 @@ pub struct PoraService { iter_batch: usize, } -struct PoraPuzzle { +#[derive(Debug, Clone, PartialEq, Eq)] +pub(super) struct PoraPuzzle { context: MineContext, target_quality: U256, + max_shards: u64, +} + +impl PoraPuzzle { + pub fn new(context: MineContext, target_quality: U256, max_shards: u64) -> Self { + Self { + context, + target_quality, + max_shards, + } + } + + pub fn max_shards(&self) -> u64 { + self.max_shards + } + + pub fn context_digest(&self) -> H256 { + H256(self.context.digest) + } } #[derive(Clone, Debug, Default)] pub struct MineRangeConfig { @@ -89,7 +108,7 @@ impl PoraService { pub fn spawn( executor: TaskExecutor, msg_recv: broadcast::Receiver, - mine_context_receiver: mpsc::UnboundedReceiver, + mine_context_receiver: broadcast::Receiver, loader: Arc, config: &MinerConfig, miner_id: H256, @@ -138,15 +157,19 @@ impl PoraService { Ok(MinerMessage::SetStartPosition(pos)) => { info!("Change start position to: {:?}", pos); self.mine_range.start_position = pos; + self.report_reason_if_mine_stop("update mine range"); + } Ok(MinerMessage::SetEndPosition(pos)) => { info!("Change end position to: {:?}", pos); self.mine_range.end_position = pos; + self.report_reason_if_mine_stop("update mine range"); } Ok(MinerMessage::SetShardConfig(shard_config)) => { self.mine_range.shard_config = shard_config; + self.report_reason_if_mine_stop("update shard"); } - Err(broadcast::error::RecvError::Closed)=>{ + Err(broadcast::error::RecvError::Closed) => { warn!("Unexpected: Mine service config channel closed."); channel_opened = false; } @@ -157,21 +180,26 @@ impl PoraService { } maybe_msg = self.mine_context_receiver.recv() => { - if let Some(msg) = maybe_msg { - info!("Update mine service: {:?}", msg); - info!("Mine iterations statistics: {}", metrics::report()); - self.puzzle = msg.map(|(context, target_quality)| PoraPuzzle { - context, target_quality - }); - } else { - warn!("Mine context channel closed."); + match maybe_msg { + Ok(msg) => { + info!("Update mine service: {:?}", msg); + self.puzzle = msg; + self.report_reason_if_mine_stop("update mine context"); + }, + Err(broadcast::error::RecvError::Closed) => { + warn!("Mine context channel closed."); + }, + Err(_) => {} } } () = &mut diastole, if !diastole.is_elapsed() => { } - _ = async {}, if mining_enabled && cpu_percent > 0 && self.as_miner().map_or(false, |miner| miner.range.mining_length > 0) && diastole.is_elapsed() => { + _ = async {}, if mining_enabled + && cpu_percent > 0 + && self.as_miner().is_ok() + && diastole.is_elapsed() => { let nonce = H256(rand::thread_rng().gen()); let miner = self.as_miner().unwrap(); @@ -194,13 +222,27 @@ impl PoraService { } #[inline] - fn as_miner(&self) -> Option { - let puzzle = self.puzzle.as_ref()?; + fn as_miner(&self) -> Result { + let puzzle = self.puzzle.as_ref().ok_or("no mine context")?; - let range = self.mine_range.to_valid_range(&puzzle.context)?; - (range.mining_length > 0).then_some(())?; + let range = self + .mine_range + .to_valid_range(&puzzle.context) + .ok_or("no mine range")?; - Some(Miner { + if range.mining_length == 0 { + return Err("mine range is zero"); + } + + if puzzle.max_shards() < self.mine_range.shard_config.num_shard as u64 { + return Err("too many mine shards"); + } + + if self.mine_range.shard_config.num_shard as u64 > puzzle.context.flow_length.as_u64() { + return Err("Not enough flow length to shard"); + } + + Ok(Miner { range, miner_id: &self.miner_id, mine_range_config: &self.mine_range, @@ -209,4 +251,10 @@ impl PoraService { loader: &*self.loader, }) } + + fn report_reason_if_mine_stop(&self, event: &'static str) { + if let Err(reason) = self.as_miner() { + info!(reason, "Mine stopped on {}", event); + } + } } diff --git a/node/miner/src/monitor.rs b/node/miner/src/monitor.rs new file mode 100644 index 0000000..c82de2c --- /dev/null +++ b/node/miner/src/monitor.rs @@ -0,0 +1,27 @@ +use std::time::Duration; + +use task_executor::TaskExecutor; +use tokio::time::sleep; + +use super::metrics; + +pub struct Monitor { + period: Duration, +} + +impl Monitor { + pub fn spawn(executor: TaskExecutor, period: Duration) { + let monitor = Monitor { period }; + executor.spawn( + async move { Box::pin(monitor.start()).await }, + "pora_master", + ); + } + + async fn start(&self) { + loop { + info!("Mine iterations statistics: {}", metrics::report()); + let _ = sleep(self.period).await; + } + } +} diff --git a/node/miner/src/pora.rs b/node/miner/src/pora.rs index 4d0b9f6..db7ff88 100644 --- a/node/miner/src/pora.rs +++ b/node/miner/src/pora.rs @@ -102,15 +102,16 @@ impl<'a> Miner<'a> { } let quality = self.pora(idx, &sealed_data, pad_seed); - let quality_scale = self.range.shard_mask.count_zeros(); - if quality <= U256::MAX >> quality_scale - && quality << quality_scale <= *self.target_quality - { + let difficulty_scale_x64 = self + .range + .difficulty_scale_x64(self.context.flow_length.as_u64()); + + if quality <= (self.target_quality / difficulty_scale_x64) << 64 { debug!( - "Find a PoRA valid answer, quality: {}, target_quality {}, scale {}", + "Find a PoRA valid answer, quality: {}, target_quality {}, scale {:.3}", U256::MAX / quality, U256::MAX / self.target_quality, - quality_scale + difficulty_scale_x64.as_u128() as f64 / (u64::MAX as f64 + 1.0) ); inc_counter(&HIT_COUNT); // Undo mix data when find a valid solition diff --git a/node/miner/src/recall_range.rs b/node/miner/src/recall_range.rs index 771573c..56275a2 100644 --- a/node/miner/src/recall_range.rs +++ b/node/miner/src/recall_range.rs @@ -1,6 +1,6 @@ use ethereum_types::U256; use tiny_keccak::{Hasher, Keccak}; -use zgs_spec::SECTORS_PER_LOAD; +use zgs_spec::{SECTORS_PER_LOAD, SECTORS_PER_MAX_MINING_RANGE}; #[derive(PartialEq, Eq, Clone, Copy, Debug)] pub struct RecallRange { @@ -38,6 +38,16 @@ impl RecallRange { Some(self.start_position + recall_offset * SECTORS_PER_LOAD as u64) } + + pub fn difficulty_scale_x64(&self, flow_length: u64) -> U256 { + let no_shard_mine_length = std::cmp::min(flow_length, SECTORS_PER_MAX_MINING_RANGE as u64); + let sharded_mine_length = std::cmp::min( + flow_length >> self.shard_mask.count_zeros(), + SECTORS_PER_MAX_MINING_RANGE as u64, + ); + + (U256::from(no_shard_mine_length) << 64) / sharded_mine_length + } } impl From for contract_interface::RecallRange { diff --git a/node/miner/src/service.rs b/node/miner/src/service.rs index 485fe6c..6966b67 100644 --- a/node/miner/src/service.rs +++ b/node/miner/src/service.rs @@ -1,9 +1,11 @@ use crate::miner_id::check_and_request_miner_id; +use crate::monitor::Monitor; use crate::sealer::Sealer; use crate::submitter::Submitter; use crate::{config::MinerConfig, mine::PoraService, watcher::MineContextWatcher}; use network::NetworkMessage; use std::sync::Arc; +use std::time::Duration; use storage::config::ShardConfig; use storage_async::Store; use tokio::sync::broadcast; @@ -48,7 +50,7 @@ impl MineService { let mine_answer_receiver = PoraService::spawn( executor.clone(), msg_recv.resubscribe(), - mine_context_receiver, + mine_context_receiver.resubscribe(), store.clone(), &config, miner_id, @@ -57,12 +59,15 @@ impl MineService { Submitter::spawn( executor.clone(), mine_answer_receiver, + mine_context_receiver, provider.clone(), store.clone(), &config, ); - Sealer::spawn(executor, provider, store, &config, miner_id); + Sealer::spawn(executor.clone(), provider, store, &config, miner_id); + + Monitor::spawn(executor, Duration::from_secs(5)); debug!("Starting miner service"); diff --git a/node/miner/src/submitter.rs b/node/miner/src/submitter.rs index 398436c..76e9952 100644 --- a/node/miner/src/submitter.rs +++ b/node/miner/src/submitter.rs @@ -6,19 +6,23 @@ use ethers::providers::PendingTransaction; use hex::ToHex; use shared_types::FlowRangeProof; use std::sync::Arc; +use std::time::Duration; +use storage::H256; use storage_async::Store; use task_executor::TaskExecutor; -use tokio::sync::mpsc; +use tokio::sync::{broadcast, mpsc}; use crate::config::{MineServiceMiddleware, MinerConfig}; use crate::pora::AnswerWithoutProof; +use crate::watcher::MineContextMessage; use zgs_spec::{BYTES_PER_SEAL, SECTORS_PER_SEAL}; -const SUBMISSION_RETIES: usize = 3; +const SUBMISSION_RETIES: usize = 15; pub struct Submitter { mine_answer_receiver: mpsc::UnboundedReceiver, + mine_context_receiver: broadcast::Receiver, mine_contract: PoraMine, flow_contract: ZgsFlow, default_gas_limit: Option, @@ -29,6 +33,7 @@ impl Submitter { pub fn spawn( executor: TaskExecutor, mine_answer_receiver: mpsc::UnboundedReceiver, + mine_context_receiver: broadcast::Receiver, provider: Arc, store: Arc, config: &MinerConfig, @@ -39,6 +44,7 @@ impl Submitter { let submitter = Submitter { mine_answer_receiver, + mine_context_receiver, mine_contract, flow_contract, store, @@ -51,18 +57,39 @@ impl Submitter { } async fn start(mut self) { + let mut current_context_digest: Option = None; loop { - match self.mine_answer_receiver.recv().await { - Some(answer) => { - if let Err(e) = self.submit_answer(answer).await { - warn!(e) + tokio::select! { + answer_msg = self.mine_answer_receiver.recv() => { + match answer_msg { + Some(answer) => { + if Some(answer.context_digest) != current_context_digest { + info!("Skip submission because of inconsistent context digest"); + continue; + } + if let Err(e) = self.submit_answer(answer).await { + warn!(e); + } + } + None => { + warn!("Mine submitter stopped because mine answer channel is closed."); + return; + } } } - None => { - warn!("Mine submitter stopped because mine answer channel is closed."); - break; + + context_msg = self.mine_context_receiver.recv() => { + match context_msg { + Ok(puzzle) => { + current_context_digest = puzzle.map(|p| p.context_digest()); + } + Err(broadcast::error::RecvError::Closed) => { + warn!("Mine context channel closed."); + }, + Err(_) => {} + } } - }; + } } } @@ -136,6 +163,7 @@ impl Submitter { let receipt = pending_transaction .retries(SUBMISSION_RETIES) + .interval(Duration::from_secs(2)) .await .map_err(|e| format!("Fail to execute mine answer transaction: {:?}", e))? .ok_or(format!( diff --git a/node/miner/src/watcher.rs b/node/miner/src/watcher.rs index c6573ff..e21d1f1 100644 --- a/node/miner/src/watcher.rs +++ b/node/miner/src/watcher.rs @@ -19,9 +19,9 @@ use std::sync::Arc; use std::time::Duration; use std::{ops::DerefMut, str::FromStr}; -use crate::{config::MineServiceMiddleware, MinerConfig, MinerMessage}; +use crate::{config::MineServiceMiddleware, mine::PoraPuzzle, MinerConfig, MinerMessage}; -pub type MineContextMessage = Option<(MineContext, U256)>; +pub type MineContextMessage = Option; lazy_static! { pub static ref EMPTY_HASH: H256 = @@ -33,7 +33,7 @@ pub struct MineContextWatcher { flow_contract: ZgsFlow, mine_contract: PoraMine, - mine_context_sender: mpsc::UnboundedSender, + mine_context_sender: broadcast::Sender, last_report: MineContextMessage, msg_recv: broadcast::Receiver, @@ -45,14 +45,14 @@ impl MineContextWatcher { msg_recv: broadcast::Receiver, provider: Arc, config: &MinerConfig, - ) -> mpsc::UnboundedReceiver { + ) -> broadcast::Receiver { let provider = provider; let mine_contract = PoraMine::new(config.mine_address, provider.clone()); let flow_contract = ZgsFlow::new(config.flow_address, provider.clone()); let (mine_context_sender, mine_context_receiver) = - mpsc::unbounded_channel::(); + broadcast::channel::(4096); let watcher = MineContextWatcher { provider, flow_contract, @@ -108,12 +108,17 @@ impl MineContextWatcher { let context_call = self.flow_contract.make_context_with_result(); let valid_call = self.mine_contract.can_submit(); let quality_call = self.mine_contract.pora_target(); + let shards_call = self.mine_contract.max_shards(); - let (context, can_submit, quality) = - try_join!(context_call.call(), valid_call.call(), quality_call.call()) - .map_err(|e| format!("Failed to query mining context: {:?}", e))?; + let (context, can_submit, quality, max_shards) = try_join!( + context_call.call(), + valid_call.call(), + quality_call.call(), + shards_call.call() + ) + .map_err(|e| format!("Failed to query mining context: {:?}", e))?; let report = if can_submit && context.digest != EMPTY_HASH.0 { - Some((context, quality)) + Some(PoraPuzzle::new(context, quality, max_shards)) } else { None }; diff --git a/node/rpc/src/admin/api.rs b/node/rpc/src/admin/api.rs index 260409e..d26962c 100644 --- a/node/rpc/src/admin/api.rs +++ b/node/rpc/src/admin/api.rs @@ -40,5 +40,9 @@ pub trait Rpc { async fn get_peers(&self) -> RpcResult>; #[method(name = "getFileLocation")] - async fn get_file_location(&self, tx_seq: u64) -> RpcResult>>; + async fn get_file_location( + &self, + tx_seq: u64, + all_shards: bool, + ) -> RpcResult>>; } diff --git a/node/rpc/src/admin/impl.rs b/node/rpc/src/admin/impl.rs index afabe7f..db6b0ff 100644 --- a/node/rpc/src/admin/impl.rs +++ b/node/rpc/src/admin/impl.rs @@ -185,7 +185,13 @@ impl RpcServer for RpcServerImpl { .collect()) } - async fn get_file_location(&self, tx_seq: u64) -> RpcResult>> { + async fn get_file_location( + &self, + tx_seq: u64, + all_shards: bool, + ) -> RpcResult>> { + info!("admin_getFileLocation()"); + let tx = match self.ctx.log_store.get_tx_by_seq_number(tx_seq).await? { Some(tx) => tx, None => { @@ -221,7 +227,9 @@ impl RpcServer for RpcServerImpl { shard_config: shard_config.unwrap(), }) .collect(); - if all_shards_available(info.iter().map(|info| info.shard_config).collect()) { + + if !all_shards || all_shards_available(info.iter().map(|info| info.shard_config).collect()) + { Ok(Some(info)) } else { Ok(None) diff --git a/node/sync/src/auto_sync/batcher.rs b/node/sync/src/auto_sync/batcher.rs index 3e45ac3..847048d 100644 --- a/node/sync/src/auto_sync/batcher.rs +++ b/node/sync/src/auto_sync/batcher.rs @@ -126,7 +126,7 @@ impl Batcher { Ok(Some(SyncResult::Failed)) } - // file sync timeout + // finding peers timeout Some(SyncState::FindingPeers { origin, .. }) if origin.elapsed() > self.config.find_peer_timeout => { @@ -135,6 +135,15 @@ impl Batcher { Ok(Some(SyncResult::Timeout)) } + // connecting peers timeout + Some(SyncState::ConnectingPeers { origin, .. }) + if origin.elapsed() > self.config.find_peer_timeout => + { + debug!(%tx_seq, "Terminate file sync due to connecting peers timeout"); + self.terminate_file_sync(tx_seq, false).await; + Ok(Some(SyncResult::Timeout)) + } + // others _ => Ok(None), } diff --git a/node/sync/src/controllers/serial.rs b/node/sync/src/controllers/serial.rs index 4f94b34..a69aee4 100644 --- a/node/sync/src/controllers/serial.rs +++ b/node/sync/src/controllers/serial.rs @@ -40,6 +40,7 @@ pub enum SyncState { }, FoundPeers, ConnectingPeers { + origin: InstantWrapper, since: InstantWrapper, }, AwaitingOutgoingConnection { @@ -253,6 +254,7 @@ impl SerialSyncController { info!(%self.tx_seq, %num_peers_dailed, "Connecting peers"); self.state = SyncState::ConnectingPeers { + origin: self.since, since: Instant::now().into(), }; } @@ -632,6 +634,7 @@ impl SerialSyncController { SyncState::FoundPeers => { if self.peers.all_shards_available(vec![Connecting, Connected]) { self.state = SyncState::ConnectingPeers { + origin: self.since, since: Instant::now().into(), }; } else { diff --git a/scripts/check_abis.sh b/scripts/check_abis.sh new file mode 100755 index 0000000..0982d93 --- /dev/null +++ b/scripts/check_abis.sh @@ -0,0 +1,12 @@ + +set -e + +artifacts_path="$1" + +check_abis() { + for contract_name in "$@"; do + diff $(./scripts/search_abi.sh "$artifacts_path" "$contract_name.json") "storage-contracts-abis/$contract_name.json" + done +} +check_abis DummyMarket DummyReward Flow PoraMine PoraMineTest FixedPrice ChunkLinearReward FixedPriceFlow + diff --git a/scripts/search_abi.sh b/scripts/search_abi.sh new file mode 100755 index 0000000..966f123 --- /dev/null +++ b/scripts/search_abi.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +directory="$1" # The directory to search in +filename="$2" # The filename to search for + +# Find the file in the directory +found_files=$(find "$directory" -type f -name "$filename") + +# Check if any files were found +if [ -z "$found_files" ]; then + echo "Error: No files named '$filename' found in directory '$directory'." >&2 + exit 1 +else + echo "$found_files" +fi \ No newline at end of file diff --git a/scripts/update_abis.sh b/scripts/update_abis.sh new file mode 100755 index 0000000..f8c4c27 --- /dev/null +++ b/scripts/update_abis.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e + +default_path="../0g-storage-contracts" +path="${1:-$default_path}" + +# Step 1: Check if the path is a valid Git directory with commits +if [ ! -d "$path/.git" ] || [ -z "$(git -C "$path" rev-parse HEAD 2> /dev/null)" ]; then + echo "Error: The specified path is not a valid Git repository with commits." + exit 1 +fi +if [ ! -z "$(git -C "$path" status --porcelain)" ]; then + echo "Error: There are uncommitted changes in the contract repository." + exit 1 +fi + +# Step 2: Build the contracts +build_contracts() { + local target_path="$path" + local original_path=$(pwd) # Save the current directory + + if cd "$target_path"; then + yarn + yarn build + cd "$original_path" + else + echo "Error: Failed to switch to directory $target_path." + exit 1 + fi +} + +build_contracts + +# Step 3: Copy the file from a specified sub-path +copy_file() { + local source_path="$1" + local destination_path="$2" + + # Check if the source file exists + if [ ! -f "$source_path" ]; then + echo "Error: The file $source_path does not exist." + exit 1 + fi + + # Copy the file to the destination + cp "$source_path" "$destination_path" + echo "File copied: $source_path -> $destination_path." +} + +copy_abis() { + for contract_name in "$@"; do + copy_file $(./scripts/search_abi.sh "$path/artifacts" "$contract_name.json") "storage-contracts-abis/$contract_name.json" + done +} + +copy_abis DummyMarket DummyReward Flow PoraMine PoraMineTest FixedPrice ChunkLinearReward FixedPriceFlow + + +# Step 4: Get the current Git revision and write it to a specified file +git_revision=$(git -C "$path" rev-parse HEAD) +revision_file="storage-contracts-abis/0g-storage-contracts-rev" +echo "$git_revision" > "$revision_file" + +echo "Write git rev $git_revision to $revision_file." diff --git a/storage-contracts-abis/0g-storage-contracts-rev b/storage-contracts-abis/0g-storage-contracts-rev new file mode 100644 index 0000000..9911fd0 --- /dev/null +++ b/storage-contracts-abis/0g-storage-contracts-rev @@ -0,0 +1 @@ +dbeff538b949599c203e43be6ecc05e9e997d09d diff --git a/storage-contracts-abis/ChunkLinearReward.json b/storage-contracts-abis/ChunkLinearReward.json new file mode 100644 index 0000000..423b0c2 --- /dev/null +++ b/storage-contracts-abis/ChunkLinearReward.json @@ -0,0 +1,619 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ChunkLinearReward", + "sourceName": "contracts/reward/ChunkLinearReward.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "releaseSeconds_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DistributeReward", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PARAMS_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "claimMineReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "donate", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "chargedSectors", + "type": "uint256" + } + ], + "name": "fillReward", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "firstRewardableChunk", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "market_", + "type": "address" + }, + { + "internalType": "address", + "name": "mine_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "market", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mine", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + } + ], + "name": "payments", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "releaseSeconds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + } + ], + "name": "rewardDeadline", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewards", + "outputs": [ + { + "internalType": "uint128", + "name": "lockedReward", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "claimableReward", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "distributedReward", + "type": "uint128" + }, + { + "internalType": "uint40", + "name": "startTime", + "type": "uint40" + }, + { + "internalType": "uint40", + "name": "lastUpdate", + "type": "uint40" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "serviceFeeRateBps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "baseReward_", + "type": "uint256" + } + ], + "name": "setBaseReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "name": "setServiceFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "treasury_", + "type": "address" + } + ], + "name": "setTreasury", + "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": "totalBaseReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "treasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "payee", + "type": "address" + } + ], + "name": "withdrawPayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c06040523480156200001157600080fd5b506040516200262238038062002622833981016040819052620000349162000083565b604051620000429062000075565b604051809103906000f0801580156200005f573d6000803e3d6000fd5b506001600160a01b031660805260a0526200009d565b61058c806200209683390190565b6000602082840312156200009657600080fd5b5051919050565b60805160a051611fb0620000e660003960008181610283015281816106fc0152818161145e01526115370152600081816107820152818161109601526115a40152611fb06000f3fe6080604052600436106101cd5760003560e01c80639010d07c116100f7578063b7a3c04c11610095578063e2982c2111610064578063e2982c2114610548578063ed88c68e14610568578063f0f4426014610570578063f301af421461059057600080fd5b8063b7a3c04c146104d2578063c0575111146104f2578063ca15c87314610508578063d547741f1461052857600080fd5b80639b1d3091116100d15780639b1d30911461044d578063a217fddf1461046d578063b15d20da14610482578063b3b30c1a146104a457600080fd5b80639010d07c146103ed57806391d148541461040d57806399f4b2511461042d57600080fd5b806331b3eb941161016f57806361d027b31161013e57806361d027b31461036957806376ad03bc146103a15780637f1b5e43146103b757806380f55605146103cd57600080fd5b806331b3eb94146102f657806336568abe14610316578063485cc9551461033657806359e967001461035657600080fd5b8063158ef93e116101ab578063158ef93e146102575780632129593114610271578063248a9ca3146102a55780632f2ff15d146102d657600080fd5b806301ffc9a7146101d25780630373a23a146102075780630a539a1914610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611b4a565b610637565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b50610227610222366004611b74565b610662565b005b34801561023557600080fd5b50610249610244366004611b74565b610680565b6040519081526020016101fe565b34801561026357600080fd5b506000546101f29060ff1681565b34801561027d57600080fd5b506102497f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b157600080fd5b506102496102c0366004611b74565b6000908152600160208190526040909120015490565b3480156102e257600080fd5b506102276102f1366004611ba2565b610738565b34801561030257600080fd5b50610227610311366004611bd2565b610763565b34801561032257600080fd5b50610227610331366004611ba2565b6107e1565b34801561034257600080fd5b50610227610351366004611bef565b610864565b610227610364366004611c1d565b610926565b34801561037557600080fd5b50600954610389906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b3480156103ad57600080fd5b5061024960075481565b3480156103c357600080fd5b5061024960065481565b3480156103d957600080fd5b50600354610389906001600160a01b031681565b3480156103f957600080fd5b50610389610408366004611c1d565b610d0e565b34801561041957600080fd5b506101f2610428366004611ba2565b610d26565b34801561043957600080fd5b50600454610389906001600160a01b031681565b34801561045957600080fd5b50610227610468366004611b74565b610d51565b34801561047957600080fd5b50610249600081565b34801561048e57600080fd5b50610249600080516020611f5b83398151915281565b3480156104b057600080fd5b506104b9610d6f565b60405167ffffffffffffffff90911681526020016101fe565b3480156104de57600080fd5b506102276104ed366004611c3f565b610e1d565b3480156104fe57600080fd5b5061024960085481565b34801561051457600080fd5b50610249610523366004611b74565b611037565b34801561053457600080fd5b50610227610543366004611ba2565b61104e565b34801561055457600080fd5b50610249610563366004611bd2565b611074565b610227611103565b34801561057c57600080fd5b5061022761058b366004611bd2565b61111c565b34801561059c57600080fd5b506105f56105ab366004611b74565b600560205260009081526040902080546001909101546001600160801b0380831692600160801b908190048216929182169164ffffffffff918104821691600160a81b9091041685565b604080516001600160801b0396871681529486166020860152929094169183019190915264ffffffffff9081166060830152909116608082015260a0016101fe565b60006001600160e01b03198216635a05180f60e01b148061065c575061065c82611157565b92915050565b600080516020611f5b83398151915261067a8161118c565b50600755565b6000818152600560209081526040808320815160a08101835281546001600160801b038082168352600160801b918290048116958301959095526001909201549384169281019290925264ffffffffff908304811660608301819052600160a81b9093041660808201529082036106fa5750600092915050565b7f0000000000000000000000000000000000000000000000000000000000000000816060015164ffffffffff166107319190611c8d565b9392505050565b600082815260016020819052604090912001546107548161118c565b61075e8383611199565b505050565b6040516351cff8d960e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906351cff8d990602401600060405180830381600087803b1580156107c657600080fd5b505af11580156107da573d6000803e3d6000fd5b5050505050565b6001600160a01b03811633146108565760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61086082826111bb565b5050565b60005460ff16156108c35760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b606482015260840161084d565b6000805460ff191660011781556108e0906108db3390565b611199565b6108f8600080516020611f5b83398151915233611199565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6003546001600160a01b0316336001600160a01b0316146109895760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e00604482015260640161084d565b60006127106008543461099c9190611ca0565b6109a69190611cd5565b905080156109c4576009546109c4906001600160a01b0316826111dd565b60006109d08234611ce9565b9050826000816101006109e561040080611ca0565b6109f190610400611ca0565b6109fc906008611ca0565b610a069190611cd5565b610a109085611ca0565b610a1a9190611cd5565b90506000610a288388611c8d565b90506000610100610a3b61040080611ca0565b610a4790610400611ca0565b610a52906008611ca0565b610a5c9190611cd5565b610a669089611cfc565b610100610a7561040080611ca0565b610a8190610400611ca0565b610a8c906008611ca0565b610a969190611cd5565b610aa09190611ce9565b905060006001610100610ab561040080611ca0565b610ac190610400611ca0565b610acc906008611ca0565b610ad69190611cd5565b610ae0848c611c8d565b610aea9190611cd5565b610af49190611ce9565b90506000610100610b0761040080611ca0565b610b1390610400611ca0565b610b1e906008611ca0565b610b289190611cd5565b610b33600186611ce9565b610b3d9190611cfc565b610b48906001611c8d565b90506000610100610b5b61040080611ca0565b610b6790610400611ca0565b610b72906008611ca0565b610b7c9190611cd5565b610b868387611ce9565b610b909190611cd5565b90506000610100610ba361040080611ca0565b610baf90610400611ca0565b610bba906008611ca0565b610bc49190611cd5565b610bcf836001611c8d565b610bd99190611ca0565b86149050818403610c02576000848152600560205260409020610bfd9034836112f6565b610d00565b610c5f610100610c1461040080611ca0565b610c2090610400611ca0565b610c2b906008611ca0565b610c359190611cd5565b610c3f878a611ca0565b610c499190611cd5565b60008681526005602052604090209060016112f6565b6000610c6c856001611c8d565b90505b82811015610ca3576000818152600560205260409020610c91908960016112f6565b80610c9b81611d10565b915050610c6f565b50610d00610100610cb661040080611ca0565b610cc290610400611ca0565b610ccd906008611ca0565b610cd79190611cd5565b610ce1858a611ca0565b610ceb9190611cd5565b600084815260056020526040902090836112f6565b505050505050505050505050565b6000828152600260205260408120610731908361142a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611f5b833981519152610d698161118c565b50600855565b6000806104005b610d898167ffffffffffffffff16611436565b15610da357905080610d9c600282611d29565b9050610d76565b8067ffffffffffffffff168267ffffffffffffffff161015610e175760006002610dcd8484611d59565b610dd79190611d7a565b610de19084611da1565b9050610df68167ffffffffffffffff16611436565b15610e0d57610e06816001611da1565b9250610e11565b8091505b50610da3565b50919050565b6004546001600160a01b0316336001600160a01b031614610e805760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e00604482015260640161084d565b6000838152600560209081526040808320815160a08101835281546001600160801b038082168352600160801b918290048116958301959095526001909201549384169281019290925264ffffffffff90830481166060830152600160a81b909204909116608082015290610ef482611456565b9050610f008282611482565b6000610f0b836114d1565b60008781526005602090815260408083208751928801516001600160801b03938416600160801b9185168202178255918801516001909101805460608a015160808b0151939095166001600160a81b03199091161764ffffffffff9485169093029290921764ffffffffff60a81b1916600160a81b9390911692909202919091179055909150610f9c878584611532565b905060008160065411610fb157600654610fb3565b815b9050610fbf8184611c8d565b92508060066000828254610fd39190611ce9565b9091555050821561102d57610fe88784611585565b866001600160a01b0316887f83617a1b0f847971f005bd162dde513cfe93df96e6293c3bbb5fe9c40629dd4c8560405161102491815260200190565b60405180910390a35b5050505050505050565b600081815260026020526040812061065c90611606565b6000828152600160208190526040909120015461106a8161118c565b61075e83836111bb565b6040516371d4ed8d60e11b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e3a9db1a90602401602060405180830381865afa1580156110df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065c9190611dc2565b34600660008282546111159190611c8d565b9091555050565b600080516020611f5b8339815191526111348161118c565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216637965db0b60e01b148061065c57506301ffc9a760e01b6001600160e01b031983161461065c565b6111968133611610565b50565b6111a38282611669565b600082815260026020526040902061075e90826116d4565b6111c582826116e9565b600082815260026020526040902061075e9082611750565b8047101561122d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161084d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461127a576040519150601f19603f3d011682016040523d82523d6000602084013e61127f565b606091505b505090508061075e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161084d565b6001600160801b0382111561133f5760405162461bcd60e51b815260206004820152600f60248201526e526577617264206f766572666c6f7760881b604482015260640161084d565b6001830154600160801b900464ffffffffff161561139f5760405162461bcd60e51b815260206004820181905260248201527f526577617264206974656d20686173206265656e20696e697469616c697a6564604482015260640161084d565b8254829084906000906113bc9084906001600160801b0316611ddb565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550801561075e575050600101805469ffffffffffffffffffff60801b1916600160801b4264ffffffffff1690810264ffffffffff60a81b191691909117600160a81b91909102179055565b60006107318383611765565b60008061144283610680565b905080158015906107315750421192915050565b600061065c827f000000000000000000000000000000000000000000000000000000000000000061178f565b80826000018181516114949190611dfb565b6001600160801b03169052506020820180518291906114b4908390611ddb565b6001600160801b03169052505064ffffffffff4216608090910152565b600080600283602001516114e59190611e1b565b905080836020018181516114f99190611dfb565b6001600160801b0316905250604083018051829190611519908390611ddb565b6001600160801b03908116909152919091169392505050565b6000427f0000000000000000000000000000000000000000000000000000000000000000846060015164ffffffffff1661156c9190611c8d565b111561157b5750600754610731565b5060009392505050565b60405163f340fa0160e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f340fa019083906024016000604051808303818588803b1580156115e957600080fd5b505af11580156115fd573d6000803e3d6000fd5b50505050505050565b600061065c825490565b61161a8282610d26565b6108605761162781611853565b611632836020611865565b604051602001611643929190611e59565b60408051601f198184030181529082905262461bcd60e51b825261084d91600401611ece565b6116738282610d26565b6108605760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610731836001600160a01b038416611a01565b6116f38282610d26565b156108605760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610731836001600160a01b038416611a50565b600082600001828154811061177c5761177c611f01565b9060005260206000200154905092915050565b6000826080015164ffffffffff166000036117ac5750600061065c565b6000836040015184602001516117c29190611ddb565b6001600160801b0316905060008185600001516001600160801b03166117e89190611c8d565b90506000856060015164ffffffffff16426118039190611ce9565b90506000856118128385611ca0565b61181c9190611cd5565b9050828111156118295750815b8381101561183e57600094505050505061065c565b6118488482611ce9565b979650505050505050565b606061065c6001600160a01b03831660145b60606000611874836002611ca0565b61187f906002611c8d565b67ffffffffffffffff81111561189757611897611f17565b6040519080825280601f01601f1916602001820160405280156118c1576020820181803683370190505b509050600360fc1b816000815181106118dc576118dc611f01565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061190b5761190b611f01565b60200101906001600160f81b031916908160001a905350600061192f846002611ca0565b61193a906001611c8d565b90505b60018111156119b2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061196e5761196e611f01565b1a60f81b82828151811061198457611984611f01565b60200101906001600160f81b031916908160001a90535060049490941c936119ab81611f2d565b905061193d565b5083156107315760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161084d565b6000818152600183016020526040812054611a485750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065c565b50600061065c565b60008181526001830160205260408120548015611b39576000611a74600183611ce9565b8554909150600090611a8890600190611ce9565b9050818114611aed576000866000018281548110611aa857611aa8611f01565b9060005260206000200154905080876000018481548110611acb57611acb611f01565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611afe57611afe611f44565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065c565b600091505061065c565b5092915050565b600060208284031215611b5c57600080fd5b81356001600160e01b03198116811461073157600080fd5b600060208284031215611b8657600080fd5b5035919050565b6001600160a01b038116811461119657600080fd5b60008060408385031215611bb557600080fd5b823591506020830135611bc781611b8d565b809150509250929050565b600060208284031215611be457600080fd5b813561073181611b8d565b60008060408385031215611c0257600080fd5b8235611c0d81611b8d565b91506020830135611bc781611b8d565b60008060408385031215611c3057600080fd5b50508035926020909101359150565b600080600060608486031215611c5457600080fd5b833592506020840135611c6681611b8d565b929592945050506040919091013590565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065c5761065c611c77565b6000816000190483118215151615611cba57611cba611c77565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611ce457611ce4611cbf565b500490565b8181038181111561065c5761065c611c77565b600082611d0b57611d0b611cbf565b500690565b600060018201611d2257611d22611c77565b5060010190565b600067ffffffffffffffff80831681851681830481118215151615611d5057611d50611c77565b02949350505050565b67ffffffffffffffff828116828216039080821115611b4357611b43611c77565b600067ffffffffffffffff80841680611d9557611d95611cbf565b92169190910492915050565b67ffffffffffffffff818116838216019080821115611b4357611b43611c77565b600060208284031215611dd457600080fd5b5051919050565b6001600160801b03818116838216019080821115611b4357611b43611c77565b6001600160801b03828116828216039080821115611b4357611b43611c77565b60006001600160801b0380841680611d9557611d95611cbf565b60005b83811015611e50578181015183820152602001611e38565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611e91816017850160208801611e35565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ec2816028840160208801611e35565b01602801949350505050565b6020815260008251806020840152611eed816040850160208701611e35565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600081611f3c57611f3c611c77565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a264697066735822122011623615efde74e54e33006a7cf6893b47d34d216d6fcddd126b275916f5bd9e64736f6c63430008100033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61050e8061007e6000396000f3fe6080604052600436106100555760003560e01c806351cff8d91461005a578063715018a61461007c5780638da5cb5b14610091578063e3a9db1a146100be578063f2fde38b14610102578063f340fa0114610122575b600080fd5b34801561006657600080fd5b5061007a61007536600461048d565b610135565b005b34801561008857600080fd5b5061007a6101ac565b34801561009d57600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b3480156100ca57600080fd5b506100f46100d936600461048d565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100b5565b34801561010e57600080fd5b5061007a61011d36600461048d565b6101c0565b61007a61013036600461048d565b61023e565b61013d6102b0565b6001600160a01b0381166000818152600160205260408120805491905590610165908261030a565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516101a091815260200190565b60405180910390a25050565b6101b46102b0565b6101be6000610428565b565b6101c86102b0565b6001600160a01b0381166102325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61023b81610428565b50565b6102466102b0565b6001600160a01b0381166000908152600160205260408120805434928392916102709084906104b1565b90915550506040518181526001600160a01b038316907f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4906020016101a0565b6000546001600160a01b031633146101be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610229565b8047101561035a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610229565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146103a7576040519150601f19603f3d011682016040523d82523d6000602084013e6103ac565b606091505b50509050806104235760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610229565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461023b57600080fd5b60006020828403121561049f57600080fd5b81356104aa81610478565b9392505050565b808201808211156104d257634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220e52cf2b51f0a8d14b10d6c445edb47884f6fbd6d5fbaed7572ef106f818cf48064736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106101cd5760003560e01c80639010d07c116100f7578063b7a3c04c11610095578063e2982c2111610064578063e2982c2114610548578063ed88c68e14610568578063f0f4426014610570578063f301af421461059057600080fd5b8063b7a3c04c146104d2578063c0575111146104f2578063ca15c87314610508578063d547741f1461052857600080fd5b80639b1d3091116100d15780639b1d30911461044d578063a217fddf1461046d578063b15d20da14610482578063b3b30c1a146104a457600080fd5b80639010d07c146103ed57806391d148541461040d57806399f4b2511461042d57600080fd5b806331b3eb941161016f57806361d027b31161013e57806361d027b31461036957806376ad03bc146103a15780637f1b5e43146103b757806380f55605146103cd57600080fd5b806331b3eb94146102f657806336568abe14610316578063485cc9551461033657806359e967001461035657600080fd5b8063158ef93e116101ab578063158ef93e146102575780632129593114610271578063248a9ca3146102a55780632f2ff15d146102d657600080fd5b806301ffc9a7146101d25780630373a23a146102075780630a539a1914610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611b4a565b610637565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b50610227610222366004611b74565b610662565b005b34801561023557600080fd5b50610249610244366004611b74565b610680565b6040519081526020016101fe565b34801561026357600080fd5b506000546101f29060ff1681565b34801561027d57600080fd5b506102497f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b157600080fd5b506102496102c0366004611b74565b6000908152600160208190526040909120015490565b3480156102e257600080fd5b506102276102f1366004611ba2565b610738565b34801561030257600080fd5b50610227610311366004611bd2565b610763565b34801561032257600080fd5b50610227610331366004611ba2565b6107e1565b34801561034257600080fd5b50610227610351366004611bef565b610864565b610227610364366004611c1d565b610926565b34801561037557600080fd5b50600954610389906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b3480156103ad57600080fd5b5061024960075481565b3480156103c357600080fd5b5061024960065481565b3480156103d957600080fd5b50600354610389906001600160a01b031681565b3480156103f957600080fd5b50610389610408366004611c1d565b610d0e565b34801561041957600080fd5b506101f2610428366004611ba2565b610d26565b34801561043957600080fd5b50600454610389906001600160a01b031681565b34801561045957600080fd5b50610227610468366004611b74565b610d51565b34801561047957600080fd5b50610249600081565b34801561048e57600080fd5b50610249600080516020611f5b83398151915281565b3480156104b057600080fd5b506104b9610d6f565b60405167ffffffffffffffff90911681526020016101fe565b3480156104de57600080fd5b506102276104ed366004611c3f565b610e1d565b3480156104fe57600080fd5b5061024960085481565b34801561051457600080fd5b50610249610523366004611b74565b611037565b34801561053457600080fd5b50610227610543366004611ba2565b61104e565b34801561055457600080fd5b50610249610563366004611bd2565b611074565b610227611103565b34801561057c57600080fd5b5061022761058b366004611bd2565b61111c565b34801561059c57600080fd5b506105f56105ab366004611b74565b600560205260009081526040902080546001909101546001600160801b0380831692600160801b908190048216929182169164ffffffffff918104821691600160a81b9091041685565b604080516001600160801b0396871681529486166020860152929094169183019190915264ffffffffff9081166060830152909116608082015260a0016101fe565b60006001600160e01b03198216635a05180f60e01b148061065c575061065c82611157565b92915050565b600080516020611f5b83398151915261067a8161118c565b50600755565b6000818152600560209081526040808320815160a08101835281546001600160801b038082168352600160801b918290048116958301959095526001909201549384169281019290925264ffffffffff908304811660608301819052600160a81b9093041660808201529082036106fa5750600092915050565b7f0000000000000000000000000000000000000000000000000000000000000000816060015164ffffffffff166107319190611c8d565b9392505050565b600082815260016020819052604090912001546107548161118c565b61075e8383611199565b505050565b6040516351cff8d960e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906351cff8d990602401600060405180830381600087803b1580156107c657600080fd5b505af11580156107da573d6000803e3d6000fd5b5050505050565b6001600160a01b03811633146108565760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61086082826111bb565b5050565b60005460ff16156108c35760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b606482015260840161084d565b6000805460ff191660011781556108e0906108db3390565b611199565b6108f8600080516020611f5b83398151915233611199565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6003546001600160a01b0316336001600160a01b0316146109895760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e00604482015260640161084d565b60006127106008543461099c9190611ca0565b6109a69190611cd5565b905080156109c4576009546109c4906001600160a01b0316826111dd565b60006109d08234611ce9565b9050826000816101006109e561040080611ca0565b6109f190610400611ca0565b6109fc906008611ca0565b610a069190611cd5565b610a109085611ca0565b610a1a9190611cd5565b90506000610a288388611c8d565b90506000610100610a3b61040080611ca0565b610a4790610400611ca0565b610a52906008611ca0565b610a5c9190611cd5565b610a669089611cfc565b610100610a7561040080611ca0565b610a8190610400611ca0565b610a8c906008611ca0565b610a969190611cd5565b610aa09190611ce9565b905060006001610100610ab561040080611ca0565b610ac190610400611ca0565b610acc906008611ca0565b610ad69190611cd5565b610ae0848c611c8d565b610aea9190611cd5565b610af49190611ce9565b90506000610100610b0761040080611ca0565b610b1390610400611ca0565b610b1e906008611ca0565b610b289190611cd5565b610b33600186611ce9565b610b3d9190611cfc565b610b48906001611c8d565b90506000610100610b5b61040080611ca0565b610b6790610400611ca0565b610b72906008611ca0565b610b7c9190611cd5565b610b868387611ce9565b610b909190611cd5565b90506000610100610ba361040080611ca0565b610baf90610400611ca0565b610bba906008611ca0565b610bc49190611cd5565b610bcf836001611c8d565b610bd99190611ca0565b86149050818403610c02576000848152600560205260409020610bfd9034836112f6565b610d00565b610c5f610100610c1461040080611ca0565b610c2090610400611ca0565b610c2b906008611ca0565b610c359190611cd5565b610c3f878a611ca0565b610c499190611cd5565b60008681526005602052604090209060016112f6565b6000610c6c856001611c8d565b90505b82811015610ca3576000818152600560205260409020610c91908960016112f6565b80610c9b81611d10565b915050610c6f565b50610d00610100610cb661040080611ca0565b610cc290610400611ca0565b610ccd906008611ca0565b610cd79190611cd5565b610ce1858a611ca0565b610ceb9190611cd5565b600084815260056020526040902090836112f6565b505050505050505050505050565b6000828152600260205260408120610731908361142a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611f5b833981519152610d698161118c565b50600855565b6000806104005b610d898167ffffffffffffffff16611436565b15610da357905080610d9c600282611d29565b9050610d76565b8067ffffffffffffffff168267ffffffffffffffff161015610e175760006002610dcd8484611d59565b610dd79190611d7a565b610de19084611da1565b9050610df68167ffffffffffffffff16611436565b15610e0d57610e06816001611da1565b9250610e11565b8091505b50610da3565b50919050565b6004546001600160a01b0316336001600160a01b031614610e805760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e00604482015260640161084d565b6000838152600560209081526040808320815160a08101835281546001600160801b038082168352600160801b918290048116958301959095526001909201549384169281019290925264ffffffffff90830481166060830152600160a81b909204909116608082015290610ef482611456565b9050610f008282611482565b6000610f0b836114d1565b60008781526005602090815260408083208751928801516001600160801b03938416600160801b9185168202178255918801516001909101805460608a015160808b0151939095166001600160a81b03199091161764ffffffffff9485169093029290921764ffffffffff60a81b1916600160a81b9390911692909202919091179055909150610f9c878584611532565b905060008160065411610fb157600654610fb3565b815b9050610fbf8184611c8d565b92508060066000828254610fd39190611ce9565b9091555050821561102d57610fe88784611585565b866001600160a01b0316887f83617a1b0f847971f005bd162dde513cfe93df96e6293c3bbb5fe9c40629dd4c8560405161102491815260200190565b60405180910390a35b5050505050505050565b600081815260026020526040812061065c90611606565b6000828152600160208190526040909120015461106a8161118c565b61075e83836111bb565b6040516371d4ed8d60e11b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e3a9db1a90602401602060405180830381865afa1580156110df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065c9190611dc2565b34600660008282546111159190611c8d565b9091555050565b600080516020611f5b8339815191526111348161118c565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216637965db0b60e01b148061065c57506301ffc9a760e01b6001600160e01b031983161461065c565b6111968133611610565b50565b6111a38282611669565b600082815260026020526040902061075e90826116d4565b6111c582826116e9565b600082815260026020526040902061075e9082611750565b8047101561122d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161084d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461127a576040519150601f19603f3d011682016040523d82523d6000602084013e61127f565b606091505b505090508061075e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161084d565b6001600160801b0382111561133f5760405162461bcd60e51b815260206004820152600f60248201526e526577617264206f766572666c6f7760881b604482015260640161084d565b6001830154600160801b900464ffffffffff161561139f5760405162461bcd60e51b815260206004820181905260248201527f526577617264206974656d20686173206265656e20696e697469616c697a6564604482015260640161084d565b8254829084906000906113bc9084906001600160801b0316611ddb565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550801561075e575050600101805469ffffffffffffffffffff60801b1916600160801b4264ffffffffff1690810264ffffffffff60a81b191691909117600160a81b91909102179055565b60006107318383611765565b60008061144283610680565b905080158015906107315750421192915050565b600061065c827f000000000000000000000000000000000000000000000000000000000000000061178f565b80826000018181516114949190611dfb565b6001600160801b03169052506020820180518291906114b4908390611ddb565b6001600160801b03169052505064ffffffffff4216608090910152565b600080600283602001516114e59190611e1b565b905080836020018181516114f99190611dfb565b6001600160801b0316905250604083018051829190611519908390611ddb565b6001600160801b03908116909152919091169392505050565b6000427f0000000000000000000000000000000000000000000000000000000000000000846060015164ffffffffff1661156c9190611c8d565b111561157b5750600754610731565b5060009392505050565b60405163f340fa0160e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f340fa019083906024016000604051808303818588803b1580156115e957600080fd5b505af11580156115fd573d6000803e3d6000fd5b50505050505050565b600061065c825490565b61161a8282610d26565b6108605761162781611853565b611632836020611865565b604051602001611643929190611e59565b60408051601f198184030181529082905262461bcd60e51b825261084d91600401611ece565b6116738282610d26565b6108605760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610731836001600160a01b038416611a01565b6116f38282610d26565b156108605760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610731836001600160a01b038416611a50565b600082600001828154811061177c5761177c611f01565b9060005260206000200154905092915050565b6000826080015164ffffffffff166000036117ac5750600061065c565b6000836040015184602001516117c29190611ddb565b6001600160801b0316905060008185600001516001600160801b03166117e89190611c8d565b90506000856060015164ffffffffff16426118039190611ce9565b90506000856118128385611ca0565b61181c9190611cd5565b9050828111156118295750815b8381101561183e57600094505050505061065c565b6118488482611ce9565b979650505050505050565b606061065c6001600160a01b03831660145b60606000611874836002611ca0565b61187f906002611c8d565b67ffffffffffffffff81111561189757611897611f17565b6040519080825280601f01601f1916602001820160405280156118c1576020820181803683370190505b509050600360fc1b816000815181106118dc576118dc611f01565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061190b5761190b611f01565b60200101906001600160f81b031916908160001a905350600061192f846002611ca0565b61193a906001611c8d565b90505b60018111156119b2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061196e5761196e611f01565b1a60f81b82828151811061198457611984611f01565b60200101906001600160f81b031916908160001a90535060049490941c936119ab81611f2d565b905061193d565b5083156107315760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161084d565b6000818152600183016020526040812054611a485750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065c565b50600061065c565b60008181526001830160205260408120548015611b39576000611a74600183611ce9565b8554909150600090611a8890600190611ce9565b9050818114611aed576000866000018281548110611aa857611aa8611f01565b9060005260206000200154905080876000018481548110611acb57611acb611f01565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611afe57611afe611f44565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065c565b600091505061065c565b5092915050565b600060208284031215611b5c57600080fd5b81356001600160e01b03198116811461073157600080fd5b600060208284031215611b8657600080fd5b5035919050565b6001600160a01b038116811461119657600080fd5b60008060408385031215611bb557600080fd5b823591506020830135611bc781611b8d565b809150509250929050565b600060208284031215611be457600080fd5b813561073181611b8d565b60008060408385031215611c0257600080fd5b8235611c0d81611b8d565b91506020830135611bc781611b8d565b60008060408385031215611c3057600080fd5b50508035926020909101359150565b600080600060608486031215611c5457600080fd5b833592506020840135611c6681611b8d565b929592945050506040919091013590565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065c5761065c611c77565b6000816000190483118215151615611cba57611cba611c77565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611ce457611ce4611cbf565b500490565b8181038181111561065c5761065c611c77565b600082611d0b57611d0b611cbf565b500690565b600060018201611d2257611d22611c77565b5060010190565b600067ffffffffffffffff80831681851681830481118215151615611d5057611d50611c77565b02949350505050565b67ffffffffffffffff828116828216039080821115611b4357611b43611c77565b600067ffffffffffffffff80841680611d9557611d95611cbf565b92169190910492915050565b67ffffffffffffffff818116838216019080821115611b4357611b43611c77565b600060208284031215611dd457600080fd5b5051919050565b6001600160801b03818116838216019080821115611b4357611b43611c77565b6001600160801b03828116828216039080821115611b4357611b43611c77565b60006001600160801b0380841680611d9557611d95611cbf565b60005b83811015611e50578181015183820152602001611e38565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611e91816017850160208801611e35565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ec2816028840160208801611e35565b01602801949350505050565b6020815260008251806020840152611eed816040850160208701611e35565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600081611f3c57611f3c611c77565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a264697066735822122011623615efde74e54e33006a7cf6893b47d34d216d6fcddd126b275916f5bd9e64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/DummyMarket.json b/storage-contracts-abis/DummyMarket.json new file mode 100644 index 0000000..bfc49fe --- /dev/null +++ b/storage-contracts-abis/DummyMarket.json @@ -0,0 +1,34 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DummyMarket", + "sourceName": "contracts/test/DummyMarket.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "uploadSectors", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paddingSectors", + "type": "uint256" + } + ], + "name": "chargeFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b5060a08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063da6eb36a14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b50508135936020830135935060409092013591905056fea264697066735822122054eb84b374e7eb5c57b284f82f977fe19500436ef4128d3e147969cefdd4cbcd64736f6c63430008100033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063da6eb36a14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b50508135936020830135935060409092013591905056fea264697066735822122054eb84b374e7eb5c57b284f82f977fe19500436ef4128d3e147969cefdd4cbcd64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/DummyReward.json b/storage-contracts-abis/DummyReward.json new file mode 100644 index 0000000..16f9b3b --- /dev/null +++ b/storage-contracts-abis/DummyReward.json @@ -0,0 +1,77 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DummyReward", + "sourceName": "contracts/test/DummyReward.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DistributeReward", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "claimMineReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "uploadSectors", + "type": "uint256" + } + ], + "name": "fillReward", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060f18061001f6000396000f3fe60806040526004361060265760003560e01c806359e9670014602b578063b7a3c04c14603c575b600080fd5b603a60363660046058565b5050565b005b348015604757600080fd5b50603a60533660046079565b505050565b60008060408385031215606a57600080fd5b50508035926020909101359150565b600080600060608486031215608d57600080fd5b8335925060208401356001600160a01b038116811460aa57600080fd5b92959294505050604091909101359056fea264697066735822122031a993c3def9ed899c5b5a53bab495d498047e1a8ce262b61e700511cfb9adf164736f6c63430008100033", + "deployedBytecode": "0x60806040526004361060265760003560e01c806359e9670014602b578063b7a3c04c14603c575b600080fd5b603a60363660046058565b5050565b005b348015604757600080fd5b50603a60533660046079565b505050565b60008060408385031215606a57600080fd5b50508035926020909101359150565b600080600060608486031215608d57600080fd5b8335925060208401356001600160a01b038116811460aa57600080fd5b92959294505050604091909101359056fea264697066735822122031a993c3def9ed899c5b5a53bab495d498047e1a8ce262b61e700511cfb9adf164736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/FixedPrice.json b/storage-contracts-abis/FixedPrice.json new file mode 100644 index 0000000..6af2ad8 --- /dev/null +++ b/storage-contracts-abis/FixedPrice.json @@ -0,0 +1,386 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FixedPrice", + "sourceName": "contracts/market/FixedPrice.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PARAMS_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "uploadSectors", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paddingSectors", + "type": "uint256" + } + ], + "name": "chargeFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "flow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricePerSector_", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flow_", + "type": "address" + }, + { + "internalType": "address", + "name": "reward_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pricePerSector", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricePerSector_", + "type": "uint256" + } + ], + "name": "setPricePerSector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50610fca806100206000396000f3fe6080604052600436106101025760003560e01c806361ec508211610095578063b15d20da11610064578063b15d20da146102c1578063b4988fd0146102f5578063ca15c87314610315578063d547741f14610335578063da6eb36a1461035557600080fd5b806361ec5082146102565780639010d07c1461026c57806391d148541461028c578063a217fddf146102ac57600080fd5b8063248a9ca3116100d1578063248a9ca3146101b75780632f2ff15d146101f6578063343aad821461021657806336568abe1461023657600080fd5b806301ffc9a71461010e57806314aa90a114610143578063158ef93e14610165578063228cb7331461017f57600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004610cdd565b610375565b60405190151581526020015b60405180910390f35b34801561014f57600080fd5b5061016361015e366004610d07565b6103a0565b005b34801561017157600080fd5b5060005461012e9060ff1681565b34801561018b57600080fd5b5060375461019f906001600160a01b031681565b6040516001600160a01b03909116815260200161013a565b3480156101c357600080fd5b506101e86101d2366004610d07565b6000908152600160208190526040909120015490565b60405190815260200161013a565b34801561020257600080fd5b50610163610211366004610d3c565b6103d0565b34801561022257600080fd5b5060365461019f906001600160a01b031681565b34801561024257600080fd5b50610163610251366004610d3c565b6103fb565b34801561026257600080fd5b506101e860355481565b34801561027857600080fd5b5061019f610287366004610d68565b61047e565b34801561029857600080fd5b5061012e6102a7366004610d3c565b61049d565b3480156102b857600080fd5b506101e8600081565b3480156102cd57600080fd5b506101e87fb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e581565b34801561030157600080fd5b50610163610310366004610d8a565b6104c8565b34801561032157600080fd5b506101e8610330366004610d07565b6105a2565b34801561034157600080fd5b50610163610350366004610d3c565b6105b9565b34801561036157600080fd5b50610163610370366004610dc6565b6105df565b60006001600160e01b03198216635a05180f60e01b148061039a575061039a826107d2565b92915050565b7fb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e56103ca81610807565b50603555565b600082815260016020819052604090912001546103ec81610807565b6103f68383610814565b505050565b6001600160a01b03811633146104705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61047a8282610836565b5050565b60008281526002602052604081206104969083610858565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60005460ff16156105275760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610467565b6000805460ff191660011781556105449061053f3390565b610814565b61056e7fb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e533610814565b603592909255603680546001600160a01b039283166001600160a01b03199182161790915560378054929093169116179055565b600081815260026020526040812061039a90610864565b600082815260016020819052604090912001546105d581610807565b6103f68383610836565b6036546001600160a01b0316336001600160a01b0316146106425760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e006044820152606401610467565b600061064e8284610e08565b90506000836035546106609190610e1b565b9050478111156106a85760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820706169642066656560681b6044820152606401610467565b60006106b48247610e3a565b90506000836106c38685610e1b565b6106cd9190610e4d565b905060006106db8285610e3a565b9050851561074a576037546040516259e96760e81b8152600481018a9052602481018890526001600160a01b03909116906359e967009084906044016000604051808303818588803b15801561073057600080fd5b505af1158015610744573d6000803e3d6000fd5b50505050505b6037546001600160a01b03166359e967006107658386610e08565b61076f898c610e08565b8a6040518463ffffffff1660e01b8152600401610796929190918252602082015260400190565b6000604051808303818588803b1580156107af57600080fd5b505af11580156107c3573d6000803e3d6000fd5b50505050505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061039a57506301ffc9a760e01b6001600160e01b031983161461039a565b610811813361086e565b50565b61081e82826108c7565b60008281526002602052604090206103f69082610932565b6108408282610947565b60008281526002602052604090206103f690826109ae565b600061049683836109c3565b600061039a825490565b610878828261049d565b61047a57610885816109ed565b6108908360206109ff565b6040516020016108a1929190610e93565b60408051601f198184030181529082905262461bcd60e51b825261046791600401610f08565b6108d1828261049d565b61047a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610496836001600160a01b038416610b9b565b610951828261049d565b1561047a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610496836001600160a01b038416610bea565b60008260000182815481106109da576109da610f3b565b9060005260206000200154905092915050565b606061039a6001600160a01b03831660145b60606000610a0e836002610e1b565b610a19906002610e08565b67ffffffffffffffff811115610a3157610a31610f51565b6040519080825280601f01601f191660200182016040528015610a5b576020820181803683370190505b509050600360fc1b81600081518110610a7657610a76610f3b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610aa557610aa5610f3b565b60200101906001600160f81b031916908160001a9053506000610ac9846002610e1b565b610ad4906001610e08565b90505b6001811115610b4c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610b0857610b08610f3b565b1a60f81b828281518110610b1e57610b1e610f3b565b60200101906001600160f81b031916908160001a90535060049490941c93610b4581610f67565b9050610ad7565b5083156104965760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610467565b6000818152600183016020526040812054610be25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561039a565b50600061039a565b60008181526001830160205260408120548015610cd3576000610c0e600183610e3a565b8554909150600090610c2290600190610e3a565b9050818114610c87576000866000018281548110610c4257610c42610f3b565b9060005260206000200154905080876000018481548110610c6557610c65610f3b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610c9857610c98610f7e565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061039a565b600091505061039a565b600060208284031215610cef57600080fd5b81356001600160e01b03198116811461049657600080fd5b600060208284031215610d1957600080fd5b5035919050565b80356001600160a01b0381168114610d3757600080fd5b919050565b60008060408385031215610d4f57600080fd5b82359150610d5f60208401610d20565b90509250929050565b60008060408385031215610d7b57600080fd5b50508035926020909101359150565b600080600060608486031215610d9f57600080fd5b83359250610daf60208501610d20565b9150610dbd60408501610d20565b90509250925092565b600080600060608486031215610ddb57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610df2565b6000816000190483118215151615610e3557610e35610df2565b500290565b8181038181111561039a5761039a610df2565b600082610e6a57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015610e8a578181015183820152602001610e72565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610ecb816017850160208801610e6f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610efc816028840160208801610e6f565b01602801949350505050565b6020815260008251806020840152610f27816040850160208701610e6f565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600081610f7657610f76610df2565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204aff6eb0cf319e2d5357495a87f2ce917d6d7b0a676eb4b2e2f1a74b72b6bb2a64736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106101025760003560e01c806361ec508211610095578063b15d20da11610064578063b15d20da146102c1578063b4988fd0146102f5578063ca15c87314610315578063d547741f14610335578063da6eb36a1461035557600080fd5b806361ec5082146102565780639010d07c1461026c57806391d148541461028c578063a217fddf146102ac57600080fd5b8063248a9ca3116100d1578063248a9ca3146101b75780632f2ff15d146101f6578063343aad821461021657806336568abe1461023657600080fd5b806301ffc9a71461010e57806314aa90a114610143578063158ef93e14610165578063228cb7331461017f57600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004610cdd565b610375565b60405190151581526020015b60405180910390f35b34801561014f57600080fd5b5061016361015e366004610d07565b6103a0565b005b34801561017157600080fd5b5060005461012e9060ff1681565b34801561018b57600080fd5b5060375461019f906001600160a01b031681565b6040516001600160a01b03909116815260200161013a565b3480156101c357600080fd5b506101e86101d2366004610d07565b6000908152600160208190526040909120015490565b60405190815260200161013a565b34801561020257600080fd5b50610163610211366004610d3c565b6103d0565b34801561022257600080fd5b5060365461019f906001600160a01b031681565b34801561024257600080fd5b50610163610251366004610d3c565b6103fb565b34801561026257600080fd5b506101e860355481565b34801561027857600080fd5b5061019f610287366004610d68565b61047e565b34801561029857600080fd5b5061012e6102a7366004610d3c565b61049d565b3480156102b857600080fd5b506101e8600081565b3480156102cd57600080fd5b506101e87fb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e581565b34801561030157600080fd5b50610163610310366004610d8a565b6104c8565b34801561032157600080fd5b506101e8610330366004610d07565b6105a2565b34801561034157600080fd5b50610163610350366004610d3c565b6105b9565b34801561036157600080fd5b50610163610370366004610dc6565b6105df565b60006001600160e01b03198216635a05180f60e01b148061039a575061039a826107d2565b92915050565b7fb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e56103ca81610807565b50603555565b600082815260016020819052604090912001546103ec81610807565b6103f68383610814565b505050565b6001600160a01b03811633146104705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61047a8282610836565b5050565b60008281526002602052604081206104969083610858565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60005460ff16156105275760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610467565b6000805460ff191660011781556105449061053f3390565b610814565b61056e7fb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e533610814565b603592909255603680546001600160a01b039283166001600160a01b03199182161790915560378054929093169116179055565b600081815260026020526040812061039a90610864565b600082815260016020819052604090912001546105d581610807565b6103f68383610836565b6036546001600160a01b0316336001600160a01b0316146106425760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e006044820152606401610467565b600061064e8284610e08565b90506000836035546106609190610e1b565b9050478111156106a85760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820706169642066656560681b6044820152606401610467565b60006106b48247610e3a565b90506000836106c38685610e1b565b6106cd9190610e4d565b905060006106db8285610e3a565b9050851561074a576037546040516259e96760e81b8152600481018a9052602481018890526001600160a01b03909116906359e967009084906044016000604051808303818588803b15801561073057600080fd5b505af1158015610744573d6000803e3d6000fd5b50505050505b6037546001600160a01b03166359e967006107658386610e08565b61076f898c610e08565b8a6040518463ffffffff1660e01b8152600401610796929190918252602082015260400190565b6000604051808303818588803b1580156107af57600080fd5b505af11580156107c3573d6000803e3d6000fd5b50505050505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061039a57506301ffc9a760e01b6001600160e01b031983161461039a565b610811813361086e565b50565b61081e82826108c7565b60008281526002602052604090206103f69082610932565b6108408282610947565b60008281526002602052604090206103f690826109ae565b600061049683836109c3565b600061039a825490565b610878828261049d565b61047a57610885816109ed565b6108908360206109ff565b6040516020016108a1929190610e93565b60408051601f198184030181529082905262461bcd60e51b825261046791600401610f08565b6108d1828261049d565b61047a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610496836001600160a01b038416610b9b565b610951828261049d565b1561047a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610496836001600160a01b038416610bea565b60008260000182815481106109da576109da610f3b565b9060005260206000200154905092915050565b606061039a6001600160a01b03831660145b60606000610a0e836002610e1b565b610a19906002610e08565b67ffffffffffffffff811115610a3157610a31610f51565b6040519080825280601f01601f191660200182016040528015610a5b576020820181803683370190505b509050600360fc1b81600081518110610a7657610a76610f3b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610aa557610aa5610f3b565b60200101906001600160f81b031916908160001a9053506000610ac9846002610e1b565b610ad4906001610e08565b90505b6001811115610b4c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610b0857610b08610f3b565b1a60f81b828281518110610b1e57610b1e610f3b565b60200101906001600160f81b031916908160001a90535060049490941c93610b4581610f67565b9050610ad7565b5083156104965760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610467565b6000818152600183016020526040812054610be25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561039a565b50600061039a565b60008181526001830160205260408120548015610cd3576000610c0e600183610e3a565b8554909150600090610c2290600190610e3a565b9050818114610c87576000866000018281548110610c4257610c42610f3b565b9060005260206000200154905080876000018481548110610c6557610c65610f3b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610c9857610c98610f7e565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061039a565b600091505061039a565b600060208284031215610cef57600080fd5b81356001600160e01b03198116811461049657600080fd5b600060208284031215610d1957600080fd5b5035919050565b80356001600160a01b0381168114610d3757600080fd5b919050565b60008060408385031215610d4f57600080fd5b82359150610d5f60208401610d20565b90509250929050565b60008060408385031215610d7b57600080fd5b50508035926020909101359150565b600080600060608486031215610d9f57600080fd5b83359250610daf60208501610d20565b9150610dbd60408501610d20565b90509250925092565b600080600060608486031215610ddb57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610df2565b6000816000190483118215151615610e3557610e35610df2565b500290565b8181038181111561039a5761039a610df2565b600082610e6a57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015610e8a578181015183820152602001610e72565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610ecb816017850160208801610e6f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610efc816028840160208801610e6f565b01602801949350505050565b6020815260008251806020840152610f27816040850160208701610e6f565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600081610f7657610f76610df2565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204aff6eb0cf319e2d5357495a87f2ce917d6d7b0a676eb4b2e2f1a74b72b6bb2a64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/FixedPriceFlow.json b/storage-contracts-abis/FixedPriceFlow.json new file mode 100644 index 0000000..295bc8f --- /dev/null +++ b/storage-contracts-abis/FixedPriceFlow.json @@ -0,0 +1,932 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FixedPriceFlow", + "sourceName": "contracts/dataFlow/FixedPriceFlow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "blocksPerEpoch_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deployDelay_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidSubmission", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paid", + "type": "uint256" + } + ], + "name": "NotEnoughFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "startMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "context", + "type": "bytes32" + } + ], + "name": "NewEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "identity", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startPos", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "indexed": false, + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "Submit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission[]", + "name": "submissions", + "type": "tuple[]" + } + ], + "name": "batchSubmit", + "outputs": [ + { + "internalType": "uint256[]", + "name": "indexes", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "digests", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "startIndexes", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lengths", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochStartPosition", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getContext", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "name": "getEpochRange", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + } + ], + "internalType": "struct EpochRange", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "market_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "makeContext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cnt", + "type": "uint256" + } + ], + "name": "makeContextFixedTimes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "makeContextWithResult", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "market", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint128", + "name": "targetPosition", + "type": "uint128" + } + ], + "name": "queryContextAtPosition", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct EpochRangeWithContextDigest", + "name": "range", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rootHistory", + "outputs": [ + { + "internalType": "contract IDigestHistory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submissionIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "submit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tree", + "outputs": [ + { + "internalType": "uint256", + "name": "currentLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unstagedHeight", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60e06040523480156200001157600080fd5b5060405162004006380380620040068339810160408190526200003491620000b1565b6000805460ff1916905560a0829052604051829082906103e8906200005990620000a3565b908152602001604051809103906000f0801580156200007c573d6000803e3d6000fd5b506001600160a01b0316608052620000958143620000d6565b60c05250620000fe92505050565b610670806200399683390190565b60008060408385031215620000c557600080fd5b505080516020909101519092909150565b80820180821115620000f857634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516138296200016d600039600081816102cc015281816107a901528181610a6901528181610b5001528181610dad01528181610ec20152818161105601526114ed0152600081816106bf015261102e0152600081816105f601526110c101526138296000f3fe6080604052600436106101e35760003560e01c8063900cf0cf11610102578063c4d66de811610095578063e63ab1e911610064578063e63ab1e914610658578063ef3e12dc1461067a578063f0682054146106ad578063fd54b228146106e157600080fd5b8063c4d66de8146105c4578063c7dd5221146105e4578063ca15c87314610618578063d547741f1461063857600080fd5b80639e62a38e116100d15780639e62a38e14610561578063a217fddf14610584578063b464b53e14610599578063b8a409ac146105ae57600080fd5b8063900cf0cf146104f55780639010d07c1461050b57806391d148541461052b57806393e405a01461054b57600080fd5b806336568abe1161017a57806377e198241161014957806377e19824146103ff5780637d5907081461041457806380f55605146104a35780638456cb59146104e057600080fd5b806336568abe1461039d57806338d45e10146103bd5780633f4ba83a146103d25780635c975abb146103e757600080fd5b8063231b0268116101b6578063231b0268146102ba578063248a9ca3146102fc5780632f2ff15d1461032d57806331bae1741461034d57600080fd5b806301ffc9a7146101e8578063127f0f071461021d578063158ef93e1461027e57806318a641ef14610298575b600080fd5b3480156101f457600080fd5b5061020861020336600461304a565b610711565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261073c565b6040516102149190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b34801561028a57600080fd5b506003546102089060ff1681565b3480156102a457600080fd5b506102b86102b3366004613074565b6107a7565b005b3480156102c657600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610214565b34801561030857600080fd5b506102ee610317366004613074565b6000908152600160208190526040909120015490565b34801561033957600080fd5b506102b86103483660046130a4565b61081f565b34801561035957600080fd5b5061036d6103683660046130d0565b61084a565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610214565b3480156103a957600080fd5b506102b86103b83660046130a4565b6109ed565b3480156103c957600080fd5b506102b8610a67565b3480156103de57600080fd5b506102b8610ab6565b3480156103f357600080fd5b5060005460ff16610208565b34801561040b57600080fd5b506039546102ee565b34801561042057600080fd5b5061047c61042f366004613074565b6040805180820190915260008082526020820152506000908152604260209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610214565b3480156104af57600080fd5b506003546104c89061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156104ec57600080fd5b506102b8610ad6565b34801561050157600080fd5b506102ee603a5481565b34801561051757600080fd5b506104c86105263660046130f9565b610af6565b34801561053757600080fd5b506102086105463660046130a4565b610b15565b34801561055757600080fd5b506102ee603b5481565b61057461056f36600461332e565b610b40565b604051610214949392919061341a565b34801561059057600080fd5b506102ee600081565b3480156105a557600080fd5b50610232610d79565b3480156105ba57600080fd5b506102ee60395481565b3480156105d057600080fd5b506102b86105df366004613499565b610e00565b3480156105f057600080fd5b506104c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561062457600080fd5b506102ee610633366004613074565b610e75565b34801561064457600080fd5b506102b86106533660046130a4565b610e8c565b34801561066457600080fd5b506102ee6000805160206137d483398151915281565b61068d6106883660046134b4565b610eb2565b604080519485526020850193909352918301526060820152608001610214565b3480156106b957600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ed57600080fd5b506004546005546106fc919082565b60408051928352602083019190915201610214565b60006001600160e01b03198216635a05180f60e01b1480610736575061073682610ff4565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252603c548152603d546020820152603e5481830152603f5460608201529054608082015260415460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156107f05760405162461bcd60e51b81526004016107e7906134f1565b60405180910390fd5b60005b81811161081a57610802611029565b61080a575050565b6108138161353e565b90506107f3565b505b50565b6000828152600160208190526040909120015461083b8161134d565b6108458383611357565b505050565b604080516060810182526000808252602082018190529181019190915261086f610a67565b6004546001600160801b038316106108d55760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016107e7565b6043546000905b818111156109a557600060026108f28484613557565b6108fc9190613580565b90506043818154811061091157610911613594565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b9091048116948401859052600190910154918301919091529095508616106109765761096f816001613557565b925061099f565b83600001516001600160801b0316856001600160801b03161061099b57505050919050565b8091505b506108dc565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016107e7565b6001600160a01b0381163314610a5d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e7565b61081a8282611379565b7f0000000000000000000000000000000000000000000000000000000000000000431015610aa75760405162461bcd60e51b81526004016107e7906134f1565b610aaf611029565b610aa7575b565b6000805160206137d4833981519152610ace8161134d565b61081c61139b565b6000805160206137d4833981519152610aee8161134d565b61081c6113ed565b6000828152600260205260408120610b0e908361142a565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606080606080610b4e611436565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b8e5760405162461bcd60e51b81526004016107e7906134f1565b84518067ffffffffffffffff811115610ba957610ba961311b565b604051908082528060200260200182016040528015610bd2578160200160208202803683370190505b5094508067ffffffffffffffff811115610bee57610bee61311b565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b5093508067ffffffffffffffff811115610c3357610c3361311b565b604051908082528060200260200182016040528015610c5c578160200160208202803683370190505b5092508067ffffffffffffffff811115610c7857610c7861311b565b604051908082528060200260200182016040528015610ca1578160200160208202803683370190505b50915060005b81811015610d7057600080600080610cd78b8681518110610cca57610cca613594565b6020026020010151610eb2565b9350935093509350838a8681518110610cf257610cf2613594565b60200260200101818152505082898681518110610d1157610d11613594565b60200260200101818152505081888681518110610d3057610d30613594565b60200260200101818152505080878681518110610d4f57610d4f613594565b6020026020010181815250505050505080610d699061353e565b9050610ca7565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610deb5760405162461bcd60e51b81526004016107e7906134f1565b610df3610a67565b610dfb61073c565b905090565b60035460ff1615610e5f5760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e7565b6003805460ff1916600117905561081c8161147c565b6000818152600260205260408120610736906115a7565b60008281526001602081905260409091200154610ea88161134d565b6108458383611379565b600080600080610ec0611436565b7f0000000000000000000000000000000000000000000000000000000000000000431015610f005760405162461bcd60e51b81526004016107e7906134f1565b610f09856115b1565b610f4a5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016107e7565b6000610f55866117c8565b9050610f6081611826565b610f68610a67565b6000610f7387611927565b90506000610f8088611a60565b603980549192506001906000610f968385613557565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051610fdd9493929190613635565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061073657506301ffc9a760e01b6001600160e01b0319831614610736565b6000807f0000000000000000000000000000000000000000000000000000000000000000603a54600101027f000000000000000000000000000000000000000000000000000000000000000001905043811061108757600091505090565b6110916004611a94565b600061109d6004611bc3565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af115801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190613696565b9050603a548114611141576111416136af565b6000804361115186610100613557565b101561118157507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470905080611290565b506004546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120603b80546004805487870187526001600160801b039283168089529083168689018181526000878152604289528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526043805460018101825599529051965196831696909216909402949094177f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c69510279360029096029586015592517f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c6951027949094019390935554905591505b6001603a60008282546112a39190613557565b90915550506040805160c081018252603a5480825260208083018990528284018890526004546060808501829052608080860188905260a0909501889052603c849055603d8b9055603e8a9055603f829055868655604188905560395486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61081c8133611bfb565b6113618282611c54565b60008281526002602052604090206108459082611cbf565b6113838282611cd4565b60008281526002602052604090206108459082611d3b565b6113a3611d50565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6113f5611436565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113d03390565b6000610b0e8383611d99565b60005460ff1615610ab45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e7565b6001600481905560068054808301825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015560055560038054610100600160a81b0319166101006001600160a01b038416021790556000603a8190556040805160c0810182529182527f00000000000000000000000000000000000000000000000000000000000000006020830152810161151d6004611bc3565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351603c5590830151603d5582810151603e5590820151603f556080820151905560a0015160415561158f600033611dc3565b61081c6000805160206137d483398151915233611dc3565b6000610736825490565b60008160400151516000036115c857506000919050565b60408201518051600491906115df906001906136c5565b815181106115ef576115ef613594565b602002602001015160200151836040015160008151811061161257611612613594565b60200260200101516020015161162891906136c5565b1061163557506000919050565b6040826040015160008151811061164e5761164e613594565b6020026020010151602001511061166757506000919050565b60005b600183604001515161167c91906136c5565b8110156116f3578260400151818151811061169957611699613594565b60200260200101516020015183604001518260016116b79190613557565b815181106116c7576116c7613594565b602002602001015160200151106116e15750600092915050565b806116eb8161353e565b91505061166a565b5060006116ff836117c8565b905061170d610100826136d8565b8351111561171e5750600092915050565b6000601082101561173b576117346001836136c5565b90506117a1565b83604001515160010361175657611734600483901c836136c5565b6004846040015160008151811061176f5761176f613594565b60200260200101516020015161178591906136c5565b611790906001613557565b61179e906001901b836136c5565b90505b6117ad610100826136d8565b8451116117be575060009392505050565b5060019392505050565b600080805b83604001515181101561181f57836040015181815181106117f0576117f0613594565b6020026020010151602001516001901b8261180b9190613557565b9150806118178161353e565b9150506117cd565b5092915050565b6000600360019054906101000a90046001600160a01b03166001600160a01b03166361ec50826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190613696565b905060006118ad82846136d8565b905047478211156118e257604051637c2e324160e11b81526004810184905260248101859052604481018290526064016107e7565b6003546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015611920573d6000803e3d6000fd5b5050505050565b600454600090815b8360400151518110156119c45760008460400151828151811061195457611954613594565b602002602001015160000151905060008560400151838151811061197a5761197a613594565b602002602001015160200151905060006119a083836004611dcd9092919063ffffffff16565b9050836000036119ae578095505b50505080806119bc9061353e565b91505061192f565b5060006119d182846136c5565b90506000836004600001546119e691906136c5565b600354604051636d3759b560e11b815260048101869052602481018390526044810185905291925061010090046001600160a01b03169063da6eb36a90606401600060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b50505050505050919050565b60008160400151604051602001611a7791906136f7565b604051602081830303815290604052805190602001209050919050565b6002810154600182015403611aa65750565b60028101805460018084015491926000929091611ac2916136c5565b81548110611ad257611ad2613594565b906000526020600020015490506000611afa60018560010154611af591906136c5565b611f56565b60018501549091505b83811015611bb857604080516020808201869052818301859052825180830384018152606090920190925280519101208554611b4390600290841c61370a565b600003611b7f57809350611b5682611f56565b925080866002018381548110611b6e57611b6e613594565b600091825260209091200155611ba5565b856002018281548110611b9457611b94613594565b906000526020600020015493508092505b5080611bb08161353e565b915050611b03565b505050600190910155565b60028101805460009190611bd9906001906136c5565b81548110611be957611be9613594565b90600052602060002001549050919050565b611c058282610b15565b61081a57611c1281612b5a565b611c1d836020612b6c565b604051602001611c2e92919061371e565b60408051601f198184030181529082905262461bcd60e51b82526107e791600401613793565b611c5e8282610b15565b61081a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b0e836001600160a01b038416612d08565b611cde8282610b15565b1561081a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b0e836001600160a01b038416612d57565b60005460ff16610ab45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107e7565b6000826000018281548110611db057611db0613594565b9060005260206000200154905092915050565b61081a8282611357565b600080611dde856000015484612e4a565b90506000611def6001851b83613557565b6002870154909150611e03906001906136c5565b6001901b811115611e5557611e1786611a94565b611e2086612e82565b6002860154611e31906001906136c5565b6001901b811115611e4a57611e4586612e82565b611e20565b600286015460018701555b6002860154611e648786612f15565b60008087875b84811015611f3857611e7f600288831c61370a565b600003611ecc57818b6002018281548110611e9c57611e9c613594565b600091825260209091200155611eb3816001613557565b6001808d0191909155611ec690866136c5565b50611f38565b8a6002018181548110611ee157611ee1613594565b906000526020600020015493508192508383604051602001611f0d929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080611f309061353e565b915050611e6a565b50611f466001891b87613557565b9099555092979650505050505050565b600081600003611f8757507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b81600103611fb657507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b81600203611fe557507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b8160030361201457507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b8160040361204357507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b8160050361207257507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b816006036120a157507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b816007036120d057507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b816008036120ff57507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361212e57507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361215d57507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361218c57507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c036121bb57507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036121ea57507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e0361221957507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361224857507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361227757507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b816011036122a657507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036122d557507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b8160130361230457507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361233357507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361236257507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361239157507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b816017036123c057507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036123ef57507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b8160190361241e57507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361244d57507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361247c57507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c036124ab57507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036124da57507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e0361250957507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361253857507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361256757507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361259657507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036125c557507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036125f457507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361262357507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361265257507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361268157507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b816027036126b057507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036126df57507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b8160290361270e57507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361273d57507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361276c57507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361279b57507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036127ca57507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036127f957507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f0361282857507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b8160300361285757507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b8160310361288657507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b816032036128b557507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b816033036128e457507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b8160340361291357507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b8160350361294257507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b8160360361297157507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b816037036129a057507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b816038036129cf57507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b816039036129fe57507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a03612a2d57507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b03612a5c57507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c03612a8b57507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d03612aba57507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e03612ae957507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03612b1857507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016107e7565b919050565b60606107366001600160a01b03831660145b60606000612b7b8360026136d8565b612b86906002613557565b67ffffffffffffffff811115612b9e57612b9e61311b565b6040519080825280601f01601f191660200182016040528015612bc8576020820181803683370190505b509050600360fc1b81600081518110612be357612be3613594565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c1257612c12613594565b60200101906001600160f81b031916908160001a9053506000612c368460026136d8565b612c41906001613557565b90505b6001811115612cb9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612c7557612c75613594565b1a60f81b828281518110612c8b57612c8b613594565b60200101906001600160f81b031916908160001a90535060049490941c93612cb2816137a6565b9050612c44565b508315610b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e7565b6000818152600183016020526040812054612d4f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610736565b506000610736565b60008181526001830160205260408120548015612e40576000612d7b6001836136c5565b8554909150600090612d8f906001906136c5565b9050818114612df4576000866000018281548110612daf57612daf613594565b9060005260206000200154905080876000018481548110612dd257612dd2613594565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0557612e056137bd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610736565b6000915050610736565b600082808203612e5e576000915050610736565b612e696001826136c5565b831c9050612e78600182613557565b90921b9392505050565b60028101805490600090612e976001846136c5565b81548110612ea757612ea7613594565b60009182526020822001549150612ec2611af56001856136c5565b9050836002018282604051602001612ee4929190918252602082015260400190565b60408051601f1981840301815291905280516020918201208254600181018455600093845291909220015550505050565b8082600101541115612f25575050565b60028201805460018085015491926000929091612f41916136c5565b81548110612f5157612f51613594565b906000526020600020015490506000612f7460018660010154611af591906136c5565b60018601549091505b8381101561304257604080516020808201869052818301859052825180830384018152606090920190925280519101208654612fbd90600290841c61370a565b60000361300957809350612fd082611f56565b92508582106130045780876002018381548110612fef57612fef613594565b60009182526020909120015550505050505050565b61302f565b86600201828154811061301e5761301e613594565b906000526020600020015493508092505b508061303a8161353e565b915050612f7d565b505050505050565b60006020828403121561305c57600080fd5b81356001600160e01b031981168114610b0e57600080fd5b60006020828403121561308657600080fd5b5035919050565b80356001600160a01b0381168114612b5557600080fd5b600080604083850312156130b757600080fd5b823591506130c76020840161308d565b90509250929050565b6000602082840312156130e257600080fd5b81356001600160801b0381168114610b0e57600080fd5b6000806040838503121561310c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131545761315461311b565b60405290565b6040516060810167ffffffffffffffff811182821017156131545761315461311b565b604051601f8201601f1916810167ffffffffffffffff811182821017156131a6576131a661311b565b604052919050565b600067ffffffffffffffff8211156131c8576131c861311b565b5060051b60200190565b600082601f8301126131e357600080fd5b813560206131f86131f3836131ae565b61317d565b82815260069290921b8401810191818101908684111561321757600080fd5b8286015b8481101561325657604081890312156132345760008081fd5b61323c613131565b81358152848201358582015283529183019160400161321b565b509695505050505050565b60006060828403121561327357600080fd5b61327b61315a565b90508135815260208083013567ffffffffffffffff8082111561329d57600080fd5b818501915085601f8301126132b157600080fd5b8135818111156132c3576132c361311b565b6132d5601f8201601f1916850161317d565b81815287858386010111156132e957600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561331457600080fd5b5050613322848285016131d2565b60408301525092915050565b6000602080838503121561334157600080fd5b823567ffffffffffffffff8082111561335957600080fd5b818501915085601f83011261336d57600080fd5b813561337b6131f3826131ae565b81815260059190911b8301840190848101908883111561339a57600080fd5b8585015b838110156133d2578035858111156133b65760008081fd5b6133c48b89838a0101613261565b84525091860191860161339e565b5098975050505050505050565b600081518084526020808501945080840160005b8381101561340f578151875295820195908201906001016133f3565b509495945050505050565b60808152600061342d60808301876133df565b82810360208481019190915286518083528782019282019060005b8181101561346457845183529383019391830191600101613448565b5050848103604086015261347881886133df565b92505050828103606084015261348e81856133df565b979650505050505050565b6000602082840312156134ab57600080fd5b610b0e8261308d565b6000602082840312156134c657600080fd5b813567ffffffffffffffff8111156134dd57600080fd5b6134e984828501613261565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001820161355057613550613528565b5060010190565b8082018082111561073657610736613528565b634e487b7160e01b600052601260045260246000fd5b60008261358f5761358f61356a565b500490565b634e487b7160e01b600052603260045260246000fd5b60005b838110156135c55781810151838201526020016135ad565b50506000910152565b600081518084526135e68160208601602086016135aa565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561340f57815180518852830151838801526040909601959082019060010161360e565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261366d60e08401826135ce565b90506040840151607f198483030160c085015261368a82826135fa565b98975050505050505050565b6000602082840312156136a857600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b8181038181111561073657610736613528565b60008160001904831182151516156136f2576136f2613528565b500290565b602081526000610b0e60208301846135fa565b6000826137195761371961356a565b500690565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516137568160178501602088016135aa565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516137878160288401602088016135aa565b01602801949350505050565b602081526000610b0e60208301846135ce565b6000816137b5576137b5613528565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122053b2a26de1a202d0b06d7ce4f7761b6648c2745f6921a16df887df710c33b85664736f6c63430008100033608060405234801561001057600080fd5b5060405161067038038061067083398101604081905261002f9161014a565b6100383361009a565b806001600160401b0381111561005057610050610163565b604051908082528060200260200182016040528015610079578160200160208202803683370190505b50805161008e916001916020909101906100ea565b50506000600255610179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610125579160200282015b8281111561012557825182559160200191906001019061010a565b50610131929150610135565b5090565b5b808211156101315760008155600101610136565b60006020828403121561015c57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6104e8806101886000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d557806396e494e8146100f0578063e0886f9014610103578063f2fde38b1461011657600080fd5b80631d1a696d146100825780632d287e43146100aa578063715018a6146100cb575b600080fd5b6100956100903660046103e3565b610129565b60405190151581526020015b60405180910390f35b6100bd6100b83660046103e3565b610194565b6040519081526020016100a1565b6100d36101ee565b005b6000546040516001600160a01b0390911681526020016100a1565b6100956100fe3660046103e3565b610202565b6100bd6101113660046103e3565b610237565b6100d36101243660046103fc565b610297565b60008061013d600254600180549050610310565b905060005b8181101561018a57836001828154811061015e5761015e610425565b906000526020600020015403610178575060019392505050565b8061018281610451565b915050610142565b5060009392505050565b6002546001546000919082906101aa908361046a565b905083600182815481106101c0576101c0610425565b90600052602060002001819055506001600260008282546101e1919061048c565b9091555091949350505050565b6101f661032a565b6102006000610384565b565b6001546002546000919083108015610230575080610222600254836103d4565b61022c919061049f565b8310155b9392505050565b600061024282610202565b6102675760405163b52d71f360e01b8152600481018390526024015b60405180910390fd5b60018054610275908461046a565b8154811061028557610285610425565b90600052602060002001549050919050565b61029f61032a565b6001600160a01b0381166103045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161025e565b61030d81610384565b50565b600081831061031f5781610321565b825b90505b92915050565b6000546001600160a01b031633146102005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161025e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081831161031f5781610321565b6000602082840312156103f557600080fd5b5035919050565b60006020828403121561040e57600080fd5b81356001600160a01b038116811461023057600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016104635761046361043b565b5060010190565b60008261048757634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156103245761032461043b565b818103818111156103245761032461043b56fea2646970667358221220c90d957d44891f095d986848fabf130f05541c1afde790c7f687700f7785710764736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106101e35760003560e01c8063900cf0cf11610102578063c4d66de811610095578063e63ab1e911610064578063e63ab1e914610658578063ef3e12dc1461067a578063f0682054146106ad578063fd54b228146106e157600080fd5b8063c4d66de8146105c4578063c7dd5221146105e4578063ca15c87314610618578063d547741f1461063857600080fd5b80639e62a38e116100d15780639e62a38e14610561578063a217fddf14610584578063b464b53e14610599578063b8a409ac146105ae57600080fd5b8063900cf0cf146104f55780639010d07c1461050b57806391d148541461052b57806393e405a01461054b57600080fd5b806336568abe1161017a57806377e198241161014957806377e19824146103ff5780637d5907081461041457806380f55605146104a35780638456cb59146104e057600080fd5b806336568abe1461039d57806338d45e10146103bd5780633f4ba83a146103d25780635c975abb146103e757600080fd5b8063231b0268116101b6578063231b0268146102ba578063248a9ca3146102fc5780632f2ff15d1461032d57806331bae1741461034d57600080fd5b806301ffc9a7146101e8578063127f0f071461021d578063158ef93e1461027e57806318a641ef14610298575b600080fd5b3480156101f457600080fd5b5061020861020336600461304a565b610711565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261073c565b6040516102149190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b34801561028a57600080fd5b506003546102089060ff1681565b3480156102a457600080fd5b506102b86102b3366004613074565b6107a7565b005b3480156102c657600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610214565b34801561030857600080fd5b506102ee610317366004613074565b6000908152600160208190526040909120015490565b34801561033957600080fd5b506102b86103483660046130a4565b61081f565b34801561035957600080fd5b5061036d6103683660046130d0565b61084a565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610214565b3480156103a957600080fd5b506102b86103b83660046130a4565b6109ed565b3480156103c957600080fd5b506102b8610a67565b3480156103de57600080fd5b506102b8610ab6565b3480156103f357600080fd5b5060005460ff16610208565b34801561040b57600080fd5b506039546102ee565b34801561042057600080fd5b5061047c61042f366004613074565b6040805180820190915260008082526020820152506000908152604260209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610214565b3480156104af57600080fd5b506003546104c89061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156104ec57600080fd5b506102b8610ad6565b34801561050157600080fd5b506102ee603a5481565b34801561051757600080fd5b506104c86105263660046130f9565b610af6565b34801561053757600080fd5b506102086105463660046130a4565b610b15565b34801561055757600080fd5b506102ee603b5481565b61057461056f36600461332e565b610b40565b604051610214949392919061341a565b34801561059057600080fd5b506102ee600081565b3480156105a557600080fd5b50610232610d79565b3480156105ba57600080fd5b506102ee60395481565b3480156105d057600080fd5b506102b86105df366004613499565b610e00565b3480156105f057600080fd5b506104c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561062457600080fd5b506102ee610633366004613074565b610e75565b34801561064457600080fd5b506102b86106533660046130a4565b610e8c565b34801561066457600080fd5b506102ee6000805160206137d483398151915281565b61068d6106883660046134b4565b610eb2565b604080519485526020850193909352918301526060820152608001610214565b3480156106b957600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ed57600080fd5b506004546005546106fc919082565b60408051928352602083019190915201610214565b60006001600160e01b03198216635a05180f60e01b1480610736575061073682610ff4565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252603c548152603d546020820152603e5481830152603f5460608201529054608082015260415460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156107f05760405162461bcd60e51b81526004016107e7906134f1565b60405180910390fd5b60005b81811161081a57610802611029565b61080a575050565b6108138161353e565b90506107f3565b505b50565b6000828152600160208190526040909120015461083b8161134d565b6108458383611357565b505050565b604080516060810182526000808252602082018190529181019190915261086f610a67565b6004546001600160801b038316106108d55760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016107e7565b6043546000905b818111156109a557600060026108f28484613557565b6108fc9190613580565b90506043818154811061091157610911613594565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b9091048116948401859052600190910154918301919091529095508616106109765761096f816001613557565b925061099f565b83600001516001600160801b0316856001600160801b03161061099b57505050919050565b8091505b506108dc565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016107e7565b6001600160a01b0381163314610a5d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e7565b61081a8282611379565b7f0000000000000000000000000000000000000000000000000000000000000000431015610aa75760405162461bcd60e51b81526004016107e7906134f1565b610aaf611029565b610aa7575b565b6000805160206137d4833981519152610ace8161134d565b61081c61139b565b6000805160206137d4833981519152610aee8161134d565b61081c6113ed565b6000828152600260205260408120610b0e908361142a565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606080606080610b4e611436565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b8e5760405162461bcd60e51b81526004016107e7906134f1565b84518067ffffffffffffffff811115610ba957610ba961311b565b604051908082528060200260200182016040528015610bd2578160200160208202803683370190505b5094508067ffffffffffffffff811115610bee57610bee61311b565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b5093508067ffffffffffffffff811115610c3357610c3361311b565b604051908082528060200260200182016040528015610c5c578160200160208202803683370190505b5092508067ffffffffffffffff811115610c7857610c7861311b565b604051908082528060200260200182016040528015610ca1578160200160208202803683370190505b50915060005b81811015610d7057600080600080610cd78b8681518110610cca57610cca613594565b6020026020010151610eb2565b9350935093509350838a8681518110610cf257610cf2613594565b60200260200101818152505082898681518110610d1157610d11613594565b60200260200101818152505081888681518110610d3057610d30613594565b60200260200101818152505080878681518110610d4f57610d4f613594565b6020026020010181815250505050505080610d699061353e565b9050610ca7565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610deb5760405162461bcd60e51b81526004016107e7906134f1565b610df3610a67565b610dfb61073c565b905090565b60035460ff1615610e5f5760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e7565b6003805460ff1916600117905561081c8161147c565b6000818152600260205260408120610736906115a7565b60008281526001602081905260409091200154610ea88161134d565b6108458383611379565b600080600080610ec0611436565b7f0000000000000000000000000000000000000000000000000000000000000000431015610f005760405162461bcd60e51b81526004016107e7906134f1565b610f09856115b1565b610f4a5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016107e7565b6000610f55866117c8565b9050610f6081611826565b610f68610a67565b6000610f7387611927565b90506000610f8088611a60565b603980549192506001906000610f968385613557565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051610fdd9493929190613635565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061073657506301ffc9a760e01b6001600160e01b0319831614610736565b6000807f0000000000000000000000000000000000000000000000000000000000000000603a54600101027f000000000000000000000000000000000000000000000000000000000000000001905043811061108757600091505090565b6110916004611a94565b600061109d6004611bc3565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af115801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190613696565b9050603a548114611141576111416136af565b6000804361115186610100613557565b101561118157507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470905080611290565b506004546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120603b80546004805487870187526001600160801b039283168089529083168689018181526000878152604289528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526043805460018101825599529051965196831696909216909402949094177f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c69510279360029096029586015592517f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c6951027949094019390935554905591505b6001603a60008282546112a39190613557565b90915550506040805160c081018252603a5480825260208083018990528284018890526004546060808501829052608080860188905260a0909501889052603c849055603d8b9055603e8a9055603f829055868655604188905560395486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61081c8133611bfb565b6113618282611c54565b60008281526002602052604090206108459082611cbf565b6113838282611cd4565b60008281526002602052604090206108459082611d3b565b6113a3611d50565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6113f5611436565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113d03390565b6000610b0e8383611d99565b60005460ff1615610ab45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e7565b6001600481905560068054808301825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015560055560038054610100600160a81b0319166101006001600160a01b038416021790556000603a8190556040805160c0810182529182527f00000000000000000000000000000000000000000000000000000000000000006020830152810161151d6004611bc3565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351603c5590830151603d5582810151603e5590820151603f556080820151905560a0015160415561158f600033611dc3565b61081c6000805160206137d483398151915233611dc3565b6000610736825490565b60008160400151516000036115c857506000919050565b60408201518051600491906115df906001906136c5565b815181106115ef576115ef613594565b602002602001015160200151836040015160008151811061161257611612613594565b60200260200101516020015161162891906136c5565b1061163557506000919050565b6040826040015160008151811061164e5761164e613594565b6020026020010151602001511061166757506000919050565b60005b600183604001515161167c91906136c5565b8110156116f3578260400151818151811061169957611699613594565b60200260200101516020015183604001518260016116b79190613557565b815181106116c7576116c7613594565b602002602001015160200151106116e15750600092915050565b806116eb8161353e565b91505061166a565b5060006116ff836117c8565b905061170d610100826136d8565b8351111561171e5750600092915050565b6000601082101561173b576117346001836136c5565b90506117a1565b83604001515160010361175657611734600483901c836136c5565b6004846040015160008151811061176f5761176f613594565b60200260200101516020015161178591906136c5565b611790906001613557565b61179e906001901b836136c5565b90505b6117ad610100826136d8565b8451116117be575060009392505050565b5060019392505050565b600080805b83604001515181101561181f57836040015181815181106117f0576117f0613594565b6020026020010151602001516001901b8261180b9190613557565b9150806118178161353e565b9150506117cd565b5092915050565b6000600360019054906101000a90046001600160a01b03166001600160a01b03166361ec50826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190613696565b905060006118ad82846136d8565b905047478211156118e257604051637c2e324160e11b81526004810184905260248101859052604481018290526064016107e7565b6003546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015611920573d6000803e3d6000fd5b5050505050565b600454600090815b8360400151518110156119c45760008460400151828151811061195457611954613594565b602002602001015160000151905060008560400151838151811061197a5761197a613594565b602002602001015160200151905060006119a083836004611dcd9092919063ffffffff16565b9050836000036119ae578095505b50505080806119bc9061353e565b91505061192f565b5060006119d182846136c5565b90506000836004600001546119e691906136c5565b600354604051636d3759b560e11b815260048101869052602481018390526044810185905291925061010090046001600160a01b03169063da6eb36a90606401600060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b50505050505050919050565b60008160400151604051602001611a7791906136f7565b604051602081830303815290604052805190602001209050919050565b6002810154600182015403611aa65750565b60028101805460018084015491926000929091611ac2916136c5565b81548110611ad257611ad2613594565b906000526020600020015490506000611afa60018560010154611af591906136c5565b611f56565b60018501549091505b83811015611bb857604080516020808201869052818301859052825180830384018152606090920190925280519101208554611b4390600290841c61370a565b600003611b7f57809350611b5682611f56565b925080866002018381548110611b6e57611b6e613594565b600091825260209091200155611ba5565b856002018281548110611b9457611b94613594565b906000526020600020015493508092505b5080611bb08161353e565b915050611b03565b505050600190910155565b60028101805460009190611bd9906001906136c5565b81548110611be957611be9613594565b90600052602060002001549050919050565b611c058282610b15565b61081a57611c1281612b5a565b611c1d836020612b6c565b604051602001611c2e92919061371e565b60408051601f198184030181529082905262461bcd60e51b82526107e791600401613793565b611c5e8282610b15565b61081a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b0e836001600160a01b038416612d08565b611cde8282610b15565b1561081a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b0e836001600160a01b038416612d57565b60005460ff16610ab45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107e7565b6000826000018281548110611db057611db0613594565b9060005260206000200154905092915050565b61081a8282611357565b600080611dde856000015484612e4a565b90506000611def6001851b83613557565b6002870154909150611e03906001906136c5565b6001901b811115611e5557611e1786611a94565b611e2086612e82565b6002860154611e31906001906136c5565b6001901b811115611e4a57611e4586612e82565b611e20565b600286015460018701555b6002860154611e648786612f15565b60008087875b84811015611f3857611e7f600288831c61370a565b600003611ecc57818b6002018281548110611e9c57611e9c613594565b600091825260209091200155611eb3816001613557565b6001808d0191909155611ec690866136c5565b50611f38565b8a6002018181548110611ee157611ee1613594565b906000526020600020015493508192508383604051602001611f0d929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080611f309061353e565b915050611e6a565b50611f466001891b87613557565b9099555092979650505050505050565b600081600003611f8757507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b81600103611fb657507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b81600203611fe557507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b8160030361201457507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b8160040361204357507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b8160050361207257507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b816006036120a157507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b816007036120d057507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b816008036120ff57507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361212e57507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361215d57507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361218c57507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c036121bb57507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036121ea57507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e0361221957507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361224857507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361227757507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b816011036122a657507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036122d557507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b8160130361230457507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361233357507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361236257507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361239157507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b816017036123c057507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036123ef57507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b8160190361241e57507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361244d57507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361247c57507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c036124ab57507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036124da57507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e0361250957507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361253857507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361256757507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361259657507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036125c557507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036125f457507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361262357507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361265257507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361268157507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b816027036126b057507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036126df57507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b8160290361270e57507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361273d57507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361276c57507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361279b57507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036127ca57507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036127f957507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f0361282857507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b8160300361285757507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b8160310361288657507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b816032036128b557507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b816033036128e457507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b8160340361291357507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b8160350361294257507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b8160360361297157507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b816037036129a057507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b816038036129cf57507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b816039036129fe57507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a03612a2d57507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b03612a5c57507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c03612a8b57507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d03612aba57507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e03612ae957507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03612b1857507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016107e7565b919050565b60606107366001600160a01b03831660145b60606000612b7b8360026136d8565b612b86906002613557565b67ffffffffffffffff811115612b9e57612b9e61311b565b6040519080825280601f01601f191660200182016040528015612bc8576020820181803683370190505b509050600360fc1b81600081518110612be357612be3613594565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c1257612c12613594565b60200101906001600160f81b031916908160001a9053506000612c368460026136d8565b612c41906001613557565b90505b6001811115612cb9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612c7557612c75613594565b1a60f81b828281518110612c8b57612c8b613594565b60200101906001600160f81b031916908160001a90535060049490941c93612cb2816137a6565b9050612c44565b508315610b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e7565b6000818152600183016020526040812054612d4f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610736565b506000610736565b60008181526001830160205260408120548015612e40576000612d7b6001836136c5565b8554909150600090612d8f906001906136c5565b9050818114612df4576000866000018281548110612daf57612daf613594565b9060005260206000200154905080876000018481548110612dd257612dd2613594565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0557612e056137bd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610736565b6000915050610736565b600082808203612e5e576000915050610736565b612e696001826136c5565b831c9050612e78600182613557565b90921b9392505050565b60028101805490600090612e976001846136c5565b81548110612ea757612ea7613594565b60009182526020822001549150612ec2611af56001856136c5565b9050836002018282604051602001612ee4929190918252602082015260400190565b60408051601f1981840301815291905280516020918201208254600181018455600093845291909220015550505050565b8082600101541115612f25575050565b60028201805460018085015491926000929091612f41916136c5565b81548110612f5157612f51613594565b906000526020600020015490506000612f7460018660010154611af591906136c5565b60018601549091505b8381101561304257604080516020808201869052818301859052825180830384018152606090920190925280519101208654612fbd90600290841c61370a565b60000361300957809350612fd082611f56565b92508582106130045780876002018381548110612fef57612fef613594565b60009182526020909120015550505050505050565b61302f565b86600201828154811061301e5761301e613594565b906000526020600020015493508092505b508061303a8161353e565b915050612f7d565b505050505050565b60006020828403121561305c57600080fd5b81356001600160e01b031981168114610b0e57600080fd5b60006020828403121561308657600080fd5b5035919050565b80356001600160a01b0381168114612b5557600080fd5b600080604083850312156130b757600080fd5b823591506130c76020840161308d565b90509250929050565b6000602082840312156130e257600080fd5b81356001600160801b0381168114610b0e57600080fd5b6000806040838503121561310c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131545761315461311b565b60405290565b6040516060810167ffffffffffffffff811182821017156131545761315461311b565b604051601f8201601f1916810167ffffffffffffffff811182821017156131a6576131a661311b565b604052919050565b600067ffffffffffffffff8211156131c8576131c861311b565b5060051b60200190565b600082601f8301126131e357600080fd5b813560206131f86131f3836131ae565b61317d565b82815260069290921b8401810191818101908684111561321757600080fd5b8286015b8481101561325657604081890312156132345760008081fd5b61323c613131565b81358152848201358582015283529183019160400161321b565b509695505050505050565b60006060828403121561327357600080fd5b61327b61315a565b90508135815260208083013567ffffffffffffffff8082111561329d57600080fd5b818501915085601f8301126132b157600080fd5b8135818111156132c3576132c361311b565b6132d5601f8201601f1916850161317d565b81815287858386010111156132e957600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561331457600080fd5b5050613322848285016131d2565b60408301525092915050565b6000602080838503121561334157600080fd5b823567ffffffffffffffff8082111561335957600080fd5b818501915085601f83011261336d57600080fd5b813561337b6131f3826131ae565b81815260059190911b8301840190848101908883111561339a57600080fd5b8585015b838110156133d2578035858111156133b65760008081fd5b6133c48b89838a0101613261565b84525091860191860161339e565b5098975050505050505050565b600081518084526020808501945080840160005b8381101561340f578151875295820195908201906001016133f3565b509495945050505050565b60808152600061342d60808301876133df565b82810360208481019190915286518083528782019282019060005b8181101561346457845183529383019391830191600101613448565b5050848103604086015261347881886133df565b92505050828103606084015261348e81856133df565b979650505050505050565b6000602082840312156134ab57600080fd5b610b0e8261308d565b6000602082840312156134c657600080fd5b813567ffffffffffffffff8111156134dd57600080fd5b6134e984828501613261565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001820161355057613550613528565b5060010190565b8082018082111561073657610736613528565b634e487b7160e01b600052601260045260246000fd5b60008261358f5761358f61356a565b500490565b634e487b7160e01b600052603260045260246000fd5b60005b838110156135c55781810151838201526020016135ad565b50506000910152565b600081518084526135e68160208601602086016135aa565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561340f57815180518852830151838801526040909601959082019060010161360e565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261366d60e08401826135ce565b90506040840151607f198483030160c085015261368a82826135fa565b98975050505050505050565b6000602082840312156136a857600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b8181038181111561073657610736613528565b60008160001904831182151516156136f2576136f2613528565b500290565b602081526000610b0e60208301846135fa565b6000826137195761371961356a565b500690565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516137568160178501602088016135aa565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516137878160288401602088016135aa565b01602801949350505050565b602081526000610b0e60208301846135ce565b6000816137b5576137b5613528565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122053b2a26de1a202d0b06d7ce4f7761b6648c2745f6921a16df887df710c33b85664736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/Flow.json b/storage-contracts-abis/Flow.json new file mode 100644 index 0000000..f8ab14b --- /dev/null +++ b/storage-contracts-abis/Flow.json @@ -0,0 +1,911 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Flow", + "sourceName": "contracts/dataFlow/Flow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "blocksPerEpoch_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deployDelay_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidSubmission", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "startMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "context", + "type": "bytes32" + } + ], + "name": "NewEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "identity", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startPos", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "indexed": false, + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "Submit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission[]", + "name": "submissions", + "type": "tuple[]" + } + ], + "name": "batchSubmit", + "outputs": [ + { + "internalType": "uint256[]", + "name": "indexes", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "digests", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "startIndexes", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lengths", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochStartPosition", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getContext", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "name": "getEpochRange", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + } + ], + "internalType": "struct EpochRange", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "market_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "makeContext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cnt", + "type": "uint256" + } + ], + "name": "makeContextFixedTimes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "makeContextWithResult", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "market", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint128", + "name": "targetPosition", + "type": "uint128" + } + ], + "name": "queryContextAtPosition", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct EpochRangeWithContextDigest", + "name": "range", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rootHistory", + "outputs": [ + { + "internalType": "contract IDigestHistory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submissionIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "submit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tree", + "outputs": [ + { + "internalType": "uint256", + "name": "currentLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unstagedHeight", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003ef638038062003ef68339810160408190526200003491620000ab565b6000805460ff1916905560a08290526040516103e89062000055906200009d565b908152602001604051809103906000f08015801562000078573d6000803e3d6000fd5b506001600160a01b0316608052620000918143620000d0565b60c05250620000f89050565b610670806200388683390190565b60008060408385031215620000bf57600080fd5b505080516020909101519092909150565b80820180821115620000f257634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05161371f62000167600039600081816102cc015281816107a901528181610a6901528181610b5001528181610dad01528181610ec20152818161104d01526114e40152600081816106bf01526110250152600081816105f601526110b8015261371f6000f3fe6080604052600436106101e35760003560e01c8063900cf0cf11610102578063c4d66de811610095578063e63ab1e911610064578063e63ab1e914610658578063ef3e12dc1461067a578063f0682054146106ad578063fd54b228146106e157600080fd5b8063c4d66de8146105c4578063c7dd5221146105e4578063ca15c87314610618578063d547741f1461063857600080fd5b80639e62a38e116100d15780639e62a38e14610561578063a217fddf14610584578063b464b53e14610599578063b8a409ac146105ae57600080fd5b8063900cf0cf146104f55780639010d07c1461050b57806391d148541461052b57806393e405a01461054b57600080fd5b806336568abe1161017a57806377e198241161014957806377e19824146103ff5780637d5907081461041457806380f55605146104a35780638456cb59146104e057600080fd5b806336568abe1461039d57806338d45e10146103bd5780633f4ba83a146103d25780635c975abb146103e757600080fd5b8063231b0268116101b6578063231b0268146102ba578063248a9ca3146102fc5780632f2ff15d1461032d57806331bae1741461034d57600080fd5b806301ffc9a7146101e8578063127f0f071461021d578063158ef93e1461027e57806318a641ef14610298575b600080fd5b3480156101f457600080fd5b50610208610203366004612f40565b610711565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261073c565b6040516102149190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b34801561028a57600080fd5b506003546102089060ff1681565b3480156102a457600080fd5b506102b86102b3366004612f6a565b6107a7565b005b3480156102c657600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610214565b34801561030857600080fd5b506102ee610317366004612f6a565b6000908152600160208190526040909120015490565b34801561033957600080fd5b506102b8610348366004612f9a565b61081f565b34801561035957600080fd5b5061036d610368366004612fc6565b61084a565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610214565b3480156103a957600080fd5b506102b86103b8366004612f9a565b6109ed565b3480156103c957600080fd5b506102b8610a67565b3480156103de57600080fd5b506102b8610ab6565b3480156103f357600080fd5b5060005460ff16610208565b34801561040b57600080fd5b506039546102ee565b34801561042057600080fd5b5061047c61042f366004612f6a565b6040805180820190915260008082526020820152506000908152604260209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610214565b3480156104af57600080fd5b506003546104c89061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156104ec57600080fd5b506102b8610ad6565b34801561050157600080fd5b506102ee603a5481565b34801561051757600080fd5b506104c8610526366004612fef565b610af6565b34801561053757600080fd5b50610208610546366004612f9a565b610b15565b34801561055757600080fd5b506102ee603b5481565b61057461056f366004613224565b610b40565b6040516102149493929190613310565b34801561059057600080fd5b506102ee600081565b3480156105a557600080fd5b50610232610d79565b3480156105ba57600080fd5b506102ee60395481565b3480156105d057600080fd5b506102b86105df36600461338f565b610e00565b3480156105f057600080fd5b506104c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561062457600080fd5b506102ee610633366004612f6a565b610e75565b34801561064457600080fd5b506102b8610653366004612f9a565b610e8c565b34801561066457600080fd5b506102ee6000805160206136ca83398151915281565b61068d6106883660046133aa565b610eb2565b604080519485526020850193909352918301526060820152608001610214565b3480156106b957600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ed57600080fd5b506004546005546106fc919082565b60408051928352602083019190915201610214565b60006001600160e01b03198216635a05180f60e01b1480610736575061073682610feb565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252603c548152603d546020820152603e5481830152603f5460608201529054608082015260415460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156107f05760405162461bcd60e51b81526004016107e7906133e7565b60405180910390fd5b60005b81811161081a57610802611020565b61080a575050565b61081381613434565b90506107f3565b505b50565b6000828152600160208190526040909120015461083b81611344565b610845838361134e565b505050565b604080516060810182526000808252602082018190529181019190915261086f610a67565b6004546001600160801b038316106108d55760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016107e7565b6043546000905b818111156109a557600060026108f2848461344d565b6108fc9190613476565b9050604381815481106109115761091161348a565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b9091048116948401859052600190910154918301919091529095508616106109765761096f81600161344d565b925061099f565b83600001516001600160801b0316856001600160801b03161061099b57505050919050565b8091505b506108dc565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016107e7565b6001600160a01b0381163314610a5d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e7565b61081a8282611370565b7f0000000000000000000000000000000000000000000000000000000000000000431015610aa75760405162461bcd60e51b81526004016107e7906133e7565b610aaf611020565b610aa7575b565b6000805160206136ca833981519152610ace81611344565b61081c611392565b6000805160206136ca833981519152610aee81611344565b61081c6113e4565b6000828152600260205260408120610b0e9083611421565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606080606080610b4e61142d565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b8e5760405162461bcd60e51b81526004016107e7906133e7565b84518067ffffffffffffffff811115610ba957610ba9613011565b604051908082528060200260200182016040528015610bd2578160200160208202803683370190505b5094508067ffffffffffffffff811115610bee57610bee613011565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b5093508067ffffffffffffffff811115610c3357610c33613011565b604051908082528060200260200182016040528015610c5c578160200160208202803683370190505b5092508067ffffffffffffffff811115610c7857610c78613011565b604051908082528060200260200182016040528015610ca1578160200160208202803683370190505b50915060005b81811015610d7057600080600080610cd78b8681518110610cca57610cca61348a565b6020026020010151610eb2565b9350935093509350838a8681518110610cf257610cf261348a565b60200260200101818152505082898681518110610d1157610d1161348a565b60200260200101818152505081888681518110610d3057610d3061348a565b60200260200101818152505080878681518110610d4f57610d4f61348a565b6020026020010181815250505050505080610d6990613434565b9050610ca7565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610deb5760405162461bcd60e51b81526004016107e7906133e7565b610df3610a67565b610dfb61073c565b905090565b60035460ff1615610e5f5760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e7565b6003805460ff1916600117905561081c81611473565b60008181526002602052604081206107369061159e565b60008281526001602081905260409091200154610ea881611344565b6108458383611370565b600080600080610ec061142d565b7f0000000000000000000000000000000000000000000000000000000000000000431015610f005760405162461bcd60e51b81526004016107e7906133e7565b610f09856115a8565b610f4a5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016107e7565b6000610f55866117bf565b9050610f5f610a67565b6000610f6a8761181d565b90506000610f7788611956565b603980549192506001906000610f8d838561344d565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051610fd4949392919061352b565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061073657506301ffc9a760e01b6001600160e01b0319831614610736565b6000807f0000000000000000000000000000000000000000000000000000000000000000603a54600101027f000000000000000000000000000000000000000000000000000000000000000001905043811061107e57600091505090565b611088600461198a565b60006110946004611ab9565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af1158015611101573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611125919061358c565b9050603a548114611138576111386135a5565b600080436111488661010061344d565b101561117857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470905080611287565b506004546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120603b80546004805487870187526001600160801b039283168089529083168689018181526000878152604289528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526043805460018101825599529051965196831696909216909402949094177f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c69510279360029096029586015592517f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c6951027949094019390935554905591505b6001603a600082825461129a919061344d565b90915550506040805160c081018252603a5480825260208083018990528284018890526004546060808501829052608080860188905260a0909501889052603c849055603d8b9055603e8a9055603f829055868655604188905560395486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61081c8133611af1565b6113588282611b4a565b60008281526002602052604090206108459082611bb5565b61137a8282611bca565b60008281526002602052604090206108459082611c31565b61139a611c46565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6113ec61142d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113c73390565b6000610b0e8383611c8f565b60005460ff1615610ab45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e7565b6001600481905560068054808301825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015560055560038054610100600160a81b0319166101006001600160a01b038416021790556000603a8190556040805160c0810182529182527f0000000000000000000000000000000000000000000000000000000000000000602083015281016115146004611ab9565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351603c5590830151603d5582810151603e5590820151603f556080820151905560a00151604155611586600033611cb9565b61081c6000805160206136ca83398151915233611cb9565b6000610736825490565b60008160400151516000036115bf57506000919050565b60408201518051600491906115d6906001906135bb565b815181106115e6576115e661348a565b60200260200101516020015183604001516000815181106116095761160961348a565b60200260200101516020015161161f91906135bb565b1061162c57506000919050565b604082604001516000815181106116455761164561348a565b6020026020010151602001511061165e57506000919050565b60005b600183604001515161167391906135bb565b8110156116ea57826040015181815181106116905761169061348a565b60200260200101516020015183604001518260016116ae919061344d565b815181106116be576116be61348a565b602002602001015160200151106116d85750600092915050565b806116e281613434565b915050611661565b5060006116f6836117bf565b9050611704610100826135ce565b835111156117155750600092915050565b600060108210156117325761172b6001836135bb565b9050611798565b83604001515160010361174d5761172b600483901c836135bb565b600484604001516000815181106117665761176661348a565b60200260200101516020015161177c91906135bb565b61178790600161344d565b611795906001901b836135bb565b90505b6117a4610100826135ce565b8451116117b5575060009392505050565b5060019392505050565b600080805b83604001515181101561181657836040015181815181106117e7576117e761348a565b6020026020010151602001516001901b82611802919061344d565b91508061180e81613434565b9150506117c4565b5092915050565b600454600090815b8360400151518110156118ba5760008460400151828151811061184a5761184a61348a565b60200260200101516000015190506000856040015183815181106118705761187061348a565b6020026020010151602001519050600061189683836004611cc39092919063ffffffff16565b9050836000036118a4578095505b50505080806118b290613434565b915050611825565b5060006118c782846135bb565b90506000836004600001546118dc91906135bb565b600354604051636d3759b560e11b815260048101869052602481018390526044810185905291925061010090046001600160a01b03169063da6eb36a90606401600060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b50505050505050919050565b6000816040015160405160200161196d91906135ed565b604051602081830303815290604052805190602001209050919050565b600281015460018201540361199c5750565b600281018054600180840154919260009290916119b8916135bb565b815481106119c8576119c861348a565b9060005260206000200154905060006119f0600185600101546119eb91906135bb565b611e4c565b60018501549091505b83811015611aae57604080516020808201869052818301859052825180830384018152606090920190925280519101208554611a3990600290841c613600565b600003611a7557809350611a4c82611e4c565b925080866002018381548110611a6457611a6461348a565b600091825260209091200155611a9b565b856002018281548110611a8a57611a8a61348a565b906000526020600020015493508092505b5080611aa681613434565b9150506119f9565b505050600190910155565b60028101805460009190611acf906001906135bb565b81548110611adf57611adf61348a565b90600052602060002001549050919050565b611afb8282610b15565b61081a57611b0881612a50565b611b13836020612a62565b604051602001611b24929190613614565b60408051601f198184030181529082905262461bcd60e51b82526107e791600401613689565b611b548282610b15565b61081a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b0e836001600160a01b038416612bfe565b611bd48282610b15565b1561081a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b0e836001600160a01b038416612c4d565b60005460ff16610ab45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107e7565b6000826000018281548110611ca657611ca661348a565b9060005260206000200154905092915050565b61081a828261134e565b600080611cd4856000015484612d40565b90506000611ce56001851b8361344d565b6002870154909150611cf9906001906135bb565b6001901b811115611d4b57611d0d8661198a565b611d1686612d78565b6002860154611d27906001906135bb565b6001901b811115611d4057611d3b86612d78565b611d16565b600286015460018701555b6002860154611d5a8786612e0b565b60008087875b84811015611e2e57611d75600288831c613600565b600003611dc257818b6002018281548110611d9257611d9261348a565b600091825260209091200155611da981600161344d565b6001808d0191909155611dbc90866135bb565b50611e2e565b8a6002018181548110611dd757611dd761348a565b906000526020600020015493508192508383604051602001611e03929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080611e2690613434565b915050611d60565b50611e3c6001891b8761344d565b9099555092979650505050505050565b600081600003611e7d57507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b81600103611eac57507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b81600203611edb57507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b81600303611f0a57507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b81600403611f3957507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b81600503611f6857507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b81600603611f9757507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b81600703611fc657507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b81600803611ff557507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361202457507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361205357507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361208257507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c036120b157507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036120e057507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e0361210f57507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361213e57507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361216d57507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b8160110361219c57507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036121cb57507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b816013036121fa57507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361222957507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361225857507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361228757507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b816017036122b657507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036122e557507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b8160190361231457507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361234357507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361237257507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c036123a157507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036123d057507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e036123ff57507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361242e57507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361245d57507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361248c57507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036124bb57507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036124ea57507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361251957507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361254857507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361257757507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b816027036125a657507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036125d557507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b8160290361260457507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361263357507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361266257507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361269157507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036126c057507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036126ef57507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f0361271e57507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b8160300361274d57507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b8160310361277c57507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b816032036127ab57507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b816033036127da57507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b8160340361280957507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b8160350361283857507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b8160360361286757507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b8160370361289657507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b816038036128c557507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b816039036128f457507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a0361292357507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b0361295257507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c0361298157507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d036129b057507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e036129df57507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03612a0e57507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016107e7565b919050565b60606107366001600160a01b03831660145b60606000612a718360026135ce565b612a7c90600261344d565b67ffffffffffffffff811115612a9457612a94613011565b6040519080825280601f01601f191660200182016040528015612abe576020820181803683370190505b509050600360fc1b81600081518110612ad957612ad961348a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612b0857612b0861348a565b60200101906001600160f81b031916908160001a9053506000612b2c8460026135ce565b612b3790600161344d565b90505b6001811115612baf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612b6b57612b6b61348a565b1a60f81b828281518110612b8157612b8161348a565b60200101906001600160f81b031916908160001a90535060049490941c93612ba88161369c565b9050612b3a565b508315610b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e7565b6000818152600183016020526040812054612c4557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610736565b506000610736565b60008181526001830160205260408120548015612d36576000612c716001836135bb565b8554909150600090612c85906001906135bb565b9050818114612cea576000866000018281548110612ca557612ca561348a565b9060005260206000200154905080876000018481548110612cc857612cc861348a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612cfb57612cfb6136b3565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610736565b6000915050610736565b600082808203612d54576000915050610736565b612d5f6001826135bb565b831c9050612d6e60018261344d565b90921b9392505050565b60028101805490600090612d8d6001846135bb565b81548110612d9d57612d9d61348a565b60009182526020822001549150612db86119eb6001856135bb565b9050836002018282604051602001612dda929190918252602082015260400190565b60408051601f1981840301815291905280516020918201208254600181018455600093845291909220015550505050565b8082600101541115612e1b575050565b60028201805460018085015491926000929091612e37916135bb565b81548110612e4757612e4761348a565b906000526020600020015490506000612e6a600186600101546119eb91906135bb565b60018601549091505b83811015612f3857604080516020808201869052818301859052825180830384018152606090920190925280519101208654612eb390600290841c613600565b600003612eff57809350612ec682611e4c565b9250858210612efa5780876002018381548110612ee557612ee561348a565b60009182526020909120015550505050505050565b612f25565b866002018281548110612f1457612f1461348a565b906000526020600020015493508092505b5080612f3081613434565b915050612e73565b505050505050565b600060208284031215612f5257600080fd5b81356001600160e01b031981168114610b0e57600080fd5b600060208284031215612f7c57600080fd5b5035919050565b80356001600160a01b0381168114612a4b57600080fd5b60008060408385031215612fad57600080fd5b82359150612fbd60208401612f83565b90509250929050565b600060208284031215612fd857600080fd5b81356001600160801b0381168114610b0e57600080fd5b6000806040838503121561300257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561304a5761304a613011565b60405290565b6040516060810167ffffffffffffffff8111828210171561304a5761304a613011565b604051601f8201601f1916810167ffffffffffffffff8111828210171561309c5761309c613011565b604052919050565b600067ffffffffffffffff8211156130be576130be613011565b5060051b60200190565b600082601f8301126130d957600080fd5b813560206130ee6130e9836130a4565b613073565b82815260069290921b8401810191818101908684111561310d57600080fd5b8286015b8481101561314c576040818903121561312a5760008081fd5b613132613027565b813581528482013585820152835291830191604001613111565b509695505050505050565b60006060828403121561316957600080fd5b613171613050565b90508135815260208083013567ffffffffffffffff8082111561319357600080fd5b818501915085601f8301126131a757600080fd5b8135818111156131b9576131b9613011565b6131cb601f8201601f19168501613073565b81815287858386010111156131df57600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561320a57600080fd5b5050613218848285016130c8565b60408301525092915050565b6000602080838503121561323757600080fd5b823567ffffffffffffffff8082111561324f57600080fd5b818501915085601f83011261326357600080fd5b81356132716130e9826130a4565b81815260059190911b8301840190848101908883111561329057600080fd5b8585015b838110156132c8578035858111156132ac5760008081fd5b6132ba8b89838a0101613157565b845250918601918601613294565b5098975050505050505050565b600081518084526020808501945080840160005b83811015613305578151875295820195908201906001016132e9565b509495945050505050565b60808152600061332360808301876132d5565b82810360208481019190915286518083528782019282019060005b8181101561335a5784518352938301939183019160010161333e565b5050848103604086015261336e81886132d5565b92505050828103606084015261338481856132d5565b979650505050505050565b6000602082840312156133a157600080fd5b610b0e82612f83565b6000602082840312156133bc57600080fd5b813567ffffffffffffffff8111156133d357600080fd5b6133df84828501613157565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016134465761344661341e565b5060010190565b808201808211156107365761073661341e565b634e487b7160e01b600052601260045260246000fd5b60008261348557613485613460565b500490565b634e487b7160e01b600052603260045260246000fd5b60005b838110156134bb5781810151838201526020016134a3565b50506000910152565b600081518084526134dc8160208601602086016134a0565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015613305578151805188528301518388015260409096019590820190600101613504565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261356360e08401826134c4565b90506040840151607f198483030160c085015261358082826134f0565b98975050505050505050565b60006020828403121561359e57600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b818103818111156107365761073661341e565b60008160001904831182151516156135e8576135e861341e565b500290565b602081526000610b0e60208301846134f0565b60008261360f5761360f613460565b500690565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161364c8160178501602088016134a0565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161367d8160288401602088016134a0565b01602801949350505050565b602081526000610b0e60208301846134c4565b6000816136ab576136ab61341e565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212208f89665f7656b5b05a524e21ed555a3460e37cc15fe146d200721a9aa28b425d64736f6c63430008100033608060405234801561001057600080fd5b5060405161067038038061067083398101604081905261002f9161014a565b6100383361009a565b806001600160401b0381111561005057610050610163565b604051908082528060200260200182016040528015610079578160200160208202803683370190505b50805161008e916001916020909101906100ea565b50506000600255610179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610125579160200282015b8281111561012557825182559160200191906001019061010a565b50610131929150610135565b5090565b5b808211156101315760008155600101610136565b60006020828403121561015c57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6104e8806101886000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d557806396e494e8146100f0578063e0886f9014610103578063f2fde38b1461011657600080fd5b80631d1a696d146100825780632d287e43146100aa578063715018a6146100cb575b600080fd5b6100956100903660046103e3565b610129565b60405190151581526020015b60405180910390f35b6100bd6100b83660046103e3565b610194565b6040519081526020016100a1565b6100d36101ee565b005b6000546040516001600160a01b0390911681526020016100a1565b6100956100fe3660046103e3565b610202565b6100bd6101113660046103e3565b610237565b6100d36101243660046103fc565b610297565b60008061013d600254600180549050610310565b905060005b8181101561018a57836001828154811061015e5761015e610425565b906000526020600020015403610178575060019392505050565b8061018281610451565b915050610142565b5060009392505050565b6002546001546000919082906101aa908361046a565b905083600182815481106101c0576101c0610425565b90600052602060002001819055506001600260008282546101e1919061048c565b9091555091949350505050565b6101f661032a565b6102006000610384565b565b6001546002546000919083108015610230575080610222600254836103d4565b61022c919061049f565b8310155b9392505050565b600061024282610202565b6102675760405163b52d71f360e01b8152600481018390526024015b60405180910390fd5b60018054610275908461046a565b8154811061028557610285610425565b90600052602060002001549050919050565b61029f61032a565b6001600160a01b0381166103045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161025e565b61030d81610384565b50565b600081831061031f5781610321565b825b90505b92915050565b6000546001600160a01b031633146102005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161025e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081831161031f5781610321565b6000602082840312156103f557600080fd5b5035919050565b60006020828403121561040e57600080fd5b81356001600160a01b038116811461023057600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016104635761046361043b565b5060010190565b60008261048757634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156103245761032461043b565b818103818111156103245761032461043b56fea2646970667358221220c90d957d44891f095d986848fabf130f05541c1afde790c7f687700f7785710764736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106101e35760003560e01c8063900cf0cf11610102578063c4d66de811610095578063e63ab1e911610064578063e63ab1e914610658578063ef3e12dc1461067a578063f0682054146106ad578063fd54b228146106e157600080fd5b8063c4d66de8146105c4578063c7dd5221146105e4578063ca15c87314610618578063d547741f1461063857600080fd5b80639e62a38e116100d15780639e62a38e14610561578063a217fddf14610584578063b464b53e14610599578063b8a409ac146105ae57600080fd5b8063900cf0cf146104f55780639010d07c1461050b57806391d148541461052b57806393e405a01461054b57600080fd5b806336568abe1161017a57806377e198241161014957806377e19824146103ff5780637d5907081461041457806380f55605146104a35780638456cb59146104e057600080fd5b806336568abe1461039d57806338d45e10146103bd5780633f4ba83a146103d25780635c975abb146103e757600080fd5b8063231b0268116101b6578063231b0268146102ba578063248a9ca3146102fc5780632f2ff15d1461032d57806331bae1741461034d57600080fd5b806301ffc9a7146101e8578063127f0f071461021d578063158ef93e1461027e57806318a641ef14610298575b600080fd5b3480156101f457600080fd5b50610208610203366004612f40565b610711565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261073c565b6040516102149190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b34801561028a57600080fd5b506003546102089060ff1681565b3480156102a457600080fd5b506102b86102b3366004612f6a565b6107a7565b005b3480156102c657600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610214565b34801561030857600080fd5b506102ee610317366004612f6a565b6000908152600160208190526040909120015490565b34801561033957600080fd5b506102b8610348366004612f9a565b61081f565b34801561035957600080fd5b5061036d610368366004612fc6565b61084a565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610214565b3480156103a957600080fd5b506102b86103b8366004612f9a565b6109ed565b3480156103c957600080fd5b506102b8610a67565b3480156103de57600080fd5b506102b8610ab6565b3480156103f357600080fd5b5060005460ff16610208565b34801561040b57600080fd5b506039546102ee565b34801561042057600080fd5b5061047c61042f366004612f6a565b6040805180820190915260008082526020820152506000908152604260209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610214565b3480156104af57600080fd5b506003546104c89061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156104ec57600080fd5b506102b8610ad6565b34801561050157600080fd5b506102ee603a5481565b34801561051757600080fd5b506104c8610526366004612fef565b610af6565b34801561053757600080fd5b50610208610546366004612f9a565b610b15565b34801561055757600080fd5b506102ee603b5481565b61057461056f366004613224565b610b40565b6040516102149493929190613310565b34801561059057600080fd5b506102ee600081565b3480156105a557600080fd5b50610232610d79565b3480156105ba57600080fd5b506102ee60395481565b3480156105d057600080fd5b506102b86105df36600461338f565b610e00565b3480156105f057600080fd5b506104c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561062457600080fd5b506102ee610633366004612f6a565b610e75565b34801561064457600080fd5b506102b8610653366004612f9a565b610e8c565b34801561066457600080fd5b506102ee6000805160206136ca83398151915281565b61068d6106883660046133aa565b610eb2565b604080519485526020850193909352918301526060820152608001610214565b3480156106b957600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ed57600080fd5b506004546005546106fc919082565b60408051928352602083019190915201610214565b60006001600160e01b03198216635a05180f60e01b1480610736575061073682610feb565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252603c548152603d546020820152603e5481830152603f5460608201529054608082015260415460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156107f05760405162461bcd60e51b81526004016107e7906133e7565b60405180910390fd5b60005b81811161081a57610802611020565b61080a575050565b61081381613434565b90506107f3565b505b50565b6000828152600160208190526040909120015461083b81611344565b610845838361134e565b505050565b604080516060810182526000808252602082018190529181019190915261086f610a67565b6004546001600160801b038316106108d55760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016107e7565b6043546000905b818111156109a557600060026108f2848461344d565b6108fc9190613476565b9050604381815481106109115761091161348a565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b9091048116948401859052600190910154918301919091529095508616106109765761096f81600161344d565b925061099f565b83600001516001600160801b0316856001600160801b03161061099b57505050919050565b8091505b506108dc565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016107e7565b6001600160a01b0381163314610a5d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e7565b61081a8282611370565b7f0000000000000000000000000000000000000000000000000000000000000000431015610aa75760405162461bcd60e51b81526004016107e7906133e7565b610aaf611020565b610aa7575b565b6000805160206136ca833981519152610ace81611344565b61081c611392565b6000805160206136ca833981519152610aee81611344565b61081c6113e4565b6000828152600260205260408120610b0e9083611421565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606080606080610b4e61142d565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b8e5760405162461bcd60e51b81526004016107e7906133e7565b84518067ffffffffffffffff811115610ba957610ba9613011565b604051908082528060200260200182016040528015610bd2578160200160208202803683370190505b5094508067ffffffffffffffff811115610bee57610bee613011565b604051908082528060200260200182016040528015610c17578160200160208202803683370190505b5093508067ffffffffffffffff811115610c3357610c33613011565b604051908082528060200260200182016040528015610c5c578160200160208202803683370190505b5092508067ffffffffffffffff811115610c7857610c78613011565b604051908082528060200260200182016040528015610ca1578160200160208202803683370190505b50915060005b81811015610d7057600080600080610cd78b8681518110610cca57610cca61348a565b6020026020010151610eb2565b9350935093509350838a8681518110610cf257610cf261348a565b60200260200101818152505082898681518110610d1157610d1161348a565b60200260200101818152505081888681518110610d3057610d3061348a565b60200260200101818152505080878681518110610d4f57610d4f61348a565b6020026020010181815250505050505080610d6990613434565b9050610ca7565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610deb5760405162461bcd60e51b81526004016107e7906133e7565b610df3610a67565b610dfb61073c565b905090565b60035460ff1615610e5f5760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e7565b6003805460ff1916600117905561081c81611473565b60008181526002602052604081206107369061159e565b60008281526001602081905260409091200154610ea881611344565b6108458383611370565b600080600080610ec061142d565b7f0000000000000000000000000000000000000000000000000000000000000000431015610f005760405162461bcd60e51b81526004016107e7906133e7565b610f09856115a8565b610f4a5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016107e7565b6000610f55866117bf565b9050610f5f610a67565b6000610f6a8761181d565b90506000610f7788611956565b603980549192506001906000610f8d838561344d565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051610fd4949392919061352b565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061073657506301ffc9a760e01b6001600160e01b0319831614610736565b6000807f0000000000000000000000000000000000000000000000000000000000000000603a54600101027f000000000000000000000000000000000000000000000000000000000000000001905043811061107e57600091505090565b611088600461198a565b60006110946004611ab9565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af1158015611101573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611125919061358c565b9050603a548114611138576111386135a5565b600080436111488661010061344d565b101561117857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470905080611287565b506004546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120603b80546004805487870187526001600160801b039283168089529083168689018181526000878152604289528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526043805460018101825599529051965196831696909216909402949094177f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c69510279360029096029586015592517f9690ad99d6ce244efa8a0f6c2d04036d3b33a9474db32a71b71135c6951027949094019390935554905591505b6001603a600082825461129a919061344d565b90915550506040805160c081018252603a5480825260208083018990528284018890526004546060808501829052608080860188905260a0909501889052603c849055603d8b9055603e8a9055603f829055868655604188905560395486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61081c8133611af1565b6113588282611b4a565b60008281526002602052604090206108459082611bb5565b61137a8282611bca565b60008281526002602052604090206108459082611c31565b61139a611c46565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6113ec61142d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113c73390565b6000610b0e8383611c8f565b60005460ff1615610ab45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107e7565b6001600481905560068054808301825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015560055560038054610100600160a81b0319166101006001600160a01b038416021790556000603a8190556040805160c0810182529182527f0000000000000000000000000000000000000000000000000000000000000000602083015281016115146004611ab9565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351603c5590830151603d5582810151603e5590820151603f556080820151905560a00151604155611586600033611cb9565b61081c6000805160206136ca83398151915233611cb9565b6000610736825490565b60008160400151516000036115bf57506000919050565b60408201518051600491906115d6906001906135bb565b815181106115e6576115e661348a565b60200260200101516020015183604001516000815181106116095761160961348a565b60200260200101516020015161161f91906135bb565b1061162c57506000919050565b604082604001516000815181106116455761164561348a565b6020026020010151602001511061165e57506000919050565b60005b600183604001515161167391906135bb565b8110156116ea57826040015181815181106116905761169061348a565b60200260200101516020015183604001518260016116ae919061344d565b815181106116be576116be61348a565b602002602001015160200151106116d85750600092915050565b806116e281613434565b915050611661565b5060006116f6836117bf565b9050611704610100826135ce565b835111156117155750600092915050565b600060108210156117325761172b6001836135bb565b9050611798565b83604001515160010361174d5761172b600483901c836135bb565b600484604001516000815181106117665761176661348a565b60200260200101516020015161177c91906135bb565b61178790600161344d565b611795906001901b836135bb565b90505b6117a4610100826135ce565b8451116117b5575060009392505050565b5060019392505050565b600080805b83604001515181101561181657836040015181815181106117e7576117e761348a565b6020026020010151602001516001901b82611802919061344d565b91508061180e81613434565b9150506117c4565b5092915050565b600454600090815b8360400151518110156118ba5760008460400151828151811061184a5761184a61348a565b60200260200101516000015190506000856040015183815181106118705761187061348a565b6020026020010151602001519050600061189683836004611cc39092919063ffffffff16565b9050836000036118a4578095505b50505080806118b290613434565b915050611825565b5060006118c782846135bb565b90506000836004600001546118dc91906135bb565b600354604051636d3759b560e11b815260048101869052602481018390526044810185905291925061010090046001600160a01b03169063da6eb36a90606401600060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b50505050505050919050565b6000816040015160405160200161196d91906135ed565b604051602081830303815290604052805190602001209050919050565b600281015460018201540361199c5750565b600281018054600180840154919260009290916119b8916135bb565b815481106119c8576119c861348a565b9060005260206000200154905060006119f0600185600101546119eb91906135bb565b611e4c565b60018501549091505b83811015611aae57604080516020808201869052818301859052825180830384018152606090920190925280519101208554611a3990600290841c613600565b600003611a7557809350611a4c82611e4c565b925080866002018381548110611a6457611a6461348a565b600091825260209091200155611a9b565b856002018281548110611a8a57611a8a61348a565b906000526020600020015493508092505b5080611aa681613434565b9150506119f9565b505050600190910155565b60028101805460009190611acf906001906135bb565b81548110611adf57611adf61348a565b90600052602060002001549050919050565b611afb8282610b15565b61081a57611b0881612a50565b611b13836020612a62565b604051602001611b24929190613614565b60408051601f198184030181529082905262461bcd60e51b82526107e791600401613689565b611b548282610b15565b61081a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b0e836001600160a01b038416612bfe565b611bd48282610b15565b1561081a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b0e836001600160a01b038416612c4d565b60005460ff16610ab45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107e7565b6000826000018281548110611ca657611ca661348a565b9060005260206000200154905092915050565b61081a828261134e565b600080611cd4856000015484612d40565b90506000611ce56001851b8361344d565b6002870154909150611cf9906001906135bb565b6001901b811115611d4b57611d0d8661198a565b611d1686612d78565b6002860154611d27906001906135bb565b6001901b811115611d4057611d3b86612d78565b611d16565b600286015460018701555b6002860154611d5a8786612e0b565b60008087875b84811015611e2e57611d75600288831c613600565b600003611dc257818b6002018281548110611d9257611d9261348a565b600091825260209091200155611da981600161344d565b6001808d0191909155611dbc90866135bb565b50611e2e565b8a6002018181548110611dd757611dd761348a565b906000526020600020015493508192508383604051602001611e03929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080611e2690613434565b915050611d60565b50611e3c6001891b8761344d565b9099555092979650505050505050565b600081600003611e7d57507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b81600103611eac57507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b81600203611edb57507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b81600303611f0a57507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b81600403611f3957507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b81600503611f6857507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b81600603611f9757507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b81600703611fc657507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b81600803611ff557507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361202457507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361205357507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361208257507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c036120b157507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036120e057507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e0361210f57507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361213e57507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361216d57507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b8160110361219c57507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036121cb57507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b816013036121fa57507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361222957507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361225857507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361228757507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b816017036122b657507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036122e557507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b8160190361231457507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361234357507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361237257507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c036123a157507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036123d057507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e036123ff57507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361242e57507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361245d57507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361248c57507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036124bb57507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036124ea57507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361251957507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361254857507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361257757507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b816027036125a657507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036125d557507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b8160290361260457507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361263357507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361266257507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361269157507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036126c057507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036126ef57507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f0361271e57507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b8160300361274d57507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b8160310361277c57507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b816032036127ab57507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b816033036127da57507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b8160340361280957507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b8160350361283857507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b8160360361286757507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b8160370361289657507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b816038036128c557507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b816039036128f457507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a0361292357507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b0361295257507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c0361298157507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d036129b057507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e036129df57507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03612a0e57507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016107e7565b919050565b60606107366001600160a01b03831660145b60606000612a718360026135ce565b612a7c90600261344d565b67ffffffffffffffff811115612a9457612a94613011565b6040519080825280601f01601f191660200182016040528015612abe576020820181803683370190505b509050600360fc1b81600081518110612ad957612ad961348a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612b0857612b0861348a565b60200101906001600160f81b031916908160001a9053506000612b2c8460026135ce565b612b3790600161344d565b90505b6001811115612baf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612b6b57612b6b61348a565b1a60f81b828281518110612b8157612b8161348a565b60200101906001600160f81b031916908160001a90535060049490941c93612ba88161369c565b9050612b3a565b508315610b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e7565b6000818152600183016020526040812054612c4557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610736565b506000610736565b60008181526001830160205260408120548015612d36576000612c716001836135bb565b8554909150600090612c85906001906135bb565b9050818114612cea576000866000018281548110612ca557612ca561348a565b9060005260206000200154905080876000018481548110612cc857612cc861348a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612cfb57612cfb6136b3565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610736565b6000915050610736565b600082808203612d54576000915050610736565b612d5f6001826135bb565b831c9050612d6e60018261344d565b90921b9392505050565b60028101805490600090612d8d6001846135bb565b81548110612d9d57612d9d61348a565b60009182526020822001549150612db86119eb6001856135bb565b9050836002018282604051602001612dda929190918252602082015260400190565b60408051601f1981840301815291905280516020918201208254600181018455600093845291909220015550505050565b8082600101541115612e1b575050565b60028201805460018085015491926000929091612e37916135bb565b81548110612e4757612e4761348a565b906000526020600020015490506000612e6a600186600101546119eb91906135bb565b60018601549091505b83811015612f3857604080516020808201869052818301859052825180830384018152606090920190925280519101208654612eb390600290841c613600565b600003612eff57809350612ec682611e4c565b9250858210612efa5780876002018381548110612ee557612ee561348a565b60009182526020909120015550505050505050565b612f25565b866002018281548110612f1457612f1461348a565b906000526020600020015493508092505b5080612f3081613434565b915050612e73565b505050505050565b600060208284031215612f5257600080fd5b81356001600160e01b031981168114610b0e57600080fd5b600060208284031215612f7c57600080fd5b5035919050565b80356001600160a01b0381168114612a4b57600080fd5b60008060408385031215612fad57600080fd5b82359150612fbd60208401612f83565b90509250929050565b600060208284031215612fd857600080fd5b81356001600160801b0381168114610b0e57600080fd5b6000806040838503121561300257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561304a5761304a613011565b60405290565b6040516060810167ffffffffffffffff8111828210171561304a5761304a613011565b604051601f8201601f1916810167ffffffffffffffff8111828210171561309c5761309c613011565b604052919050565b600067ffffffffffffffff8211156130be576130be613011565b5060051b60200190565b600082601f8301126130d957600080fd5b813560206130ee6130e9836130a4565b613073565b82815260069290921b8401810191818101908684111561310d57600080fd5b8286015b8481101561314c576040818903121561312a5760008081fd5b613132613027565b813581528482013585820152835291830191604001613111565b509695505050505050565b60006060828403121561316957600080fd5b613171613050565b90508135815260208083013567ffffffffffffffff8082111561319357600080fd5b818501915085601f8301126131a757600080fd5b8135818111156131b9576131b9613011565b6131cb601f8201601f19168501613073565b81815287858386010111156131df57600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561320a57600080fd5b5050613218848285016130c8565b60408301525092915050565b6000602080838503121561323757600080fd5b823567ffffffffffffffff8082111561324f57600080fd5b818501915085601f83011261326357600080fd5b81356132716130e9826130a4565b81815260059190911b8301840190848101908883111561329057600080fd5b8585015b838110156132c8578035858111156132ac5760008081fd5b6132ba8b89838a0101613157565b845250918601918601613294565b5098975050505050505050565b600081518084526020808501945080840160005b83811015613305578151875295820195908201906001016132e9565b509495945050505050565b60808152600061332360808301876132d5565b82810360208481019190915286518083528782019282019060005b8181101561335a5784518352938301939183019160010161333e565b5050848103604086015261336e81886132d5565b92505050828103606084015261338481856132d5565b979650505050505050565b6000602082840312156133a157600080fd5b610b0e82612f83565b6000602082840312156133bc57600080fd5b813567ffffffffffffffff8111156133d357600080fd5b6133df84828501613157565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016134465761344661341e565b5060010190565b808201808211156107365761073661341e565b634e487b7160e01b600052601260045260246000fd5b60008261348557613485613460565b500490565b634e487b7160e01b600052603260045260246000fd5b60005b838110156134bb5781810151838201526020016134a3565b50506000910152565b600081518084526134dc8160208601602086016134a0565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015613305578151805188528301518388015260409096019590820190600101613504565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261356360e08401826134c4565b90506040840151607f198483030160c085015261358082826134f0565b98975050505050505050565b60006020828403121561359e57600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b818103818111156107365761073661341e565b60008160001904831182151516156135e8576135e861341e565b500290565b602081526000610b0e60208301846134f0565b60008261360f5761360f613460565b500690565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161364c8160178501602088016134a0565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161367d8160288401602088016134a0565b01602801949350505050565b602081526000610b0e60208301846134c4565b6000816136ab576136ab61341e565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212208f89665f7656b5b05a524e21ed555a3460e37cc15fe146d200721a9aa28b425d64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/PoraMine.json b/storage-contracts-abis/PoraMine.json new file mode 100644 index 0000000..02bc4c2 --- /dev/null +++ b/storage-contracts-abis/PoraMine.json @@ -0,0 +1,971 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PoraMine", + "sourceName": "contracts/miner/Mine.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "settings", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "NewMinerId", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + } + ], + "name": "NewSubmission", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "UpdateMinerId", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PARAMS_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + } + ], + "name": "basicCheck", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "beneficiaries", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "canSubmit", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currentSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dataProofEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "difficultyAdjustRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fixedDifficulty", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficulty", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flow_", + "type": "address" + }, + { + "internalType": "address", + "name": "reward_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastMinedEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxShards", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "pora", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poraTarget", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint64", + "name": "seed", + "type": "uint64" + } + ], + "name": "requestMinerId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sealDataEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficultyAdjustRatio_", + "type": "uint256" + } + ], + "name": "setDifficultyAdjustRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxShards_", + "type": "uint64" + } + ], + "name": "setMaxShards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetMineBlocks_", + "type": "uint256" + } + ], + "name": "setTargetMineBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetSubmissions_", + "type": "uint256" + } + ], + "name": "setTargetSubmissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "submit", + "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": "targetMineBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissionsNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "transferBeneficial", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200364e3803806200364e833981016040819052620000349162000052565b6001811615608052600281161560a052600416151560c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c051613596620000b8600039600081816103d40152818161110e01526114aa0152600081816104040152610e400152600081816104620152610e0301526135966000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80637bba7d6111610125578063aed75224116100ad578063b776a5121161007c578063b776a512146104e5578063ca15c873146104ee578063d547741f14610501578063dddc61a814610514578063ffbc9bd01461051d57600080fd5b8063aed7522414610497578063b0628ee0146104aa578063b15d20da146104bd578063b4988fd0146104d257600080fd5b806391d14854116100f457806391d1485414610439578063a217fddf1461044c578063a827918214610454578063adaa7a0f1461045d578063ae722e821461048457600080fd5b80637bba7d61146103cf5780637eca5688146103f657806382975fe7146103ff5780639010d07c1461042657600080fd5b806331223ba7116101a857806339cd53ee1161017757806339cd53ee146103645780633baebb751461038d57806348f61441146103a05780635bdca855146103a9578063704d3c96146103bc57600080fd5b806331223ba71461032c578063331f3b9c14610335578063343aad821461033e57806336568abe1461035157600080fd5b806316a4be6f116101ef57806316a4be6f1461027e578063228cb733146102a9578063248a9ca3146102d45780632a02573b146103065780632f2ff15d1461031957600080fd5b806301ffc9a714610221578063047c13f514610249578063158ef93e1461025e5780631600c6241461026b575b600080fd5b61023461022f366004612d83565b610525565b60405190151581526020015b60405180910390f35b61025c610257366004612ddb565b610550565b005b6000546102349060ff1681565b61025c610279366004612e0e565b61066c565b600a54610291906001600160401b031681565b6040516001600160401b039091168152602001610240565b6004546102bc906001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6102f86102e2366004612e0e565b6000908152600160208190526040909120015490565b604051908152602001610240565b61025c610314366004612e27565b61068a565b61025c610327366004612e42565b610790565b6102f8600b5481565b6102f860065481565b6003546102bc906001600160a01b031681565b61025c61035f366004612e42565b6107bb565b6102bc610372366004612e0e565b600e602052600090815260409020546001600160a01b031681565b61025c61039b3660046130e2565b610839565b6102f8600d5481565b61025c6103b7366004612e0e565b610ad0565b61025c6103ca366004612e0e565b610afd565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102f860085481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102bc61043436600461317a565b610b6b565b610234610447366004612e42565b610b8a565b6102f8600081565b6102f8600c5481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b61025c61049236600461319c565b610bb5565b6102f86104a536600461319c565b611142565b61025c6104b83660046131d8565b611345565b6102f860008051602061354183398151915281565b61025c6104e0366004613202565b611405565b6102f860075481565b6102f86104fc366004612e0e565b61152c565b61025c61050f366004612e42565b611543565b6102f860095481565b610234611569565b60006001600160e01b03198216635a05180f60e01b148061054a575061054a82611604565b92915050565b600061055d600143613254565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106125760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061354183398151915261068481611639565b50600655565b6000805160206135418339815191526106a281611639565b6000826001600160401b0316116106fb5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f006044820152606401610609565b610706600183613267565b82166001600160401b031660001461076c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b6064820152608401610609565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546107ac81611639565b6107b68383611646565b505050565b6001600160a01b038116331461082b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610609565b6108358282611668565b5050565b815160a08201511461088d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610609565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109005760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610609565b600754600c54106109535760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610609565b600061010061096461040082613287565b61096e91906132bc565b61010061097d61040082613287565b61098791906132bc565b836060015161099691906132bc565b6109a09190613287565b60608401519091506109b2908261168a565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2591906132e7565b90506000610100610a396104006004613287565b610a4391906132bc565b8560800151610a529190613341565b90508082600001516001600160801b0316108015610a7d57508082602001516001600160801b031610155b610ac95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610609565b5050505050565b600080516020613541833981519152610ae881611639565b6008829055600b546000036108355750600755565b600080516020613541833981519152610b1581611639565b60008211610b655760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f0000006044820152606401610609565b50600955565b6000828152600260205260408120610b8390836118ce565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610bff5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610609565b6040808201516000908152600e60205220546001600160a01b031680610c675760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610609565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190613354565b9050600b5481600001511015610d3c5760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610609565b600b548151118015610d5057506000600b54115b15610d7557600754600c541015610d6957610d696118da565b6000600c556008546007555b610d7f8382610839565b600a5460608401516001600160401b0390911690610d9c906118ec565b1115610df95760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b6064820152608401610609565b610e01612d46565b7f000000000000000000000000000000000000000000000000000000000000000015610e3757610e3084611936565b9050610e3e565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610ec7576000610e708583611a4a565b905082604001518114610ec55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610609565b505b610ecf612d46565b90506000610edc85611142565b90506000610efb84606001518760600151611cbd90919063ffffffff16565b9050604081600d54610f0d91906132bc565b901b821115610f5e5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610609565b60008281526005602052604090205460ff1615610fbd5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d6974746564000000000000006044820152606401610609565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c610100610ff661040080613287565b61100290610400613287565b61100d906008613287565b61101791906132bc565b886080015161102691906132bc565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906110f3908490613341565b9091555050600754600c54101561110c57505050505050565b7f000000000000000000000000000000000000000000000000000000000000000061113a5761113a84611dfd565b505050505050565b60408101516000906111965760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610609565b600060405180608001604052808460400151815260200184602001518152602001846000015181526020016111ce8560600151611e36565b9052905060006111dd82611e9e565b905060006111ee6104006040613287565b6111fc610400610100613287565b61120691906132bc565b6112136104006004613287565b611221610400610100613287565b61122b91906132bc565b61123591906132bc565b8560a0015161124491906133cd565b905061124e612d46565b611256612d65565b6112658760e001518486611f16565b925090506101006112796104006004613287565b61128391906132bc565b8760a001516112929190613287565b6112cf826040516020016112a691906133e1565b60405160208183030381529060405280519060200120896060015161210c90919063ffffffff16565b6112d99190613341565b87608001511461132b5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610609565b61133a8760a001518584612212565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146113ab5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610609565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156114645760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610609565b6000805460ff191660011781556114819061147c3390565b611646565b61149960008051602061354183398151915233611646565b6114a5836000196132bc565b600d557f0000000000000000000000000000000000000000000000000000000000000000156114d557600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061054a90612494565b6000828152600160208190526040909120015461155f81611639565b6107b68383611668565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af11580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190613354565b9050600b54816000015111806115fe5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061054a57506301ffc9a760e01b6001600160e01b031983161461054a565b611643813361249e565b50565b61165082826124f7565b60008281526002602052604090206107b69082612562565b6116728282612577565b60008281526002602052604090206107b690826125de565b61010061169961040080613287565b6116a590610400613287565b6116b0906008613287565b6116ba91906132bc565b82516116c691906133cd565b156117135760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610609565b60208201518251829161172591613341565b111561176b5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610609565b6000611776836118ec565b61010061178561040080613287565b61179190610400613287565b61179d90610400613287565b6117a8906008613287565b6117b291906132bc565b6117bc9190613287565b9050808360200151111561180a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610609565b600061181683836125f3565b905080846020015110156118655760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610609565b83606001518460400151166001600160401b03166000146118c85760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610609565b50505050565b6000610b838383612609565b6118ea6001600160f01b03612633565b565b606081015160009019815b6001600160401b0382161561192757611911600183613267565b909116908061191f81613412565b9150506118f7565b600160ff9091161b9392505050565b61193e612d46565b60408083015160c08401516080850151925161196e93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119a16104006004613287565b6119ab91906132bc565b811015611a445760e08301516119c2600183613254565b608081106119d2576119d2613431565b60200201516040516020016119e991815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a1557611a15613431565b602002015118828260808110611a2d57611a2d613431565b6020020152611a3d600182613341565b9050611992565b50919050565b6000805b6020611a5d6104006004613287565b611a6791906132bc565b811015611ab5576101006020820284012080848360808110611a8b57611a8b613431565b602002018181525050506020610100611aa491906132bc565b611aae9082613341565b9050611a4e565b506000611ac560206101006132bc565b90505b6020611ad76104006004613287565b611ae191906132bc565b811015611bb45760005b6020611afa6104006004613287565b611b0491906132bc565b811015611bab576000848260808110611b1f57611b1f613431565b60200201519050600085611b338585613341565b60808110611b4357611b43613431565b602002015190508181604051602001611b66929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611b8e57611b8e613431565b602002015250611ba49050600183901b82613341565b9050611aeb565b5060011b611ac8565b508151611bbf612d46565b92506000610100611bd36104006004613287565b611bdd91906132bc565b8560800151611bec91906132bc565b905060005b85610100015151811015611cb357600080611c0d6002856133cd565b600003611c3d578491508761010001518381518110611c2e57611c2e613431565b60200260200101519050611c62565b8761010001518381518110611c5457611c54613431565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611c9b91906132bc565b93505050600181611cac9190613341565b9050611bf1565b5090949350505050565b600080610100611ccf61040080613287565b611cdb90610400613287565b611ce790610400613287565b611cf2906008613287565b611cfc91906132bc565b8311611d085782611d44565b610100611d1761040080613287565b611d2390610400613287565b611d2f90610400613287565b611d3a906008613287565b611d4491906132bc565b90506000611d51856118ec565b611d5b90856132bc565b90506000610100611d6e61040080613287565b611d7a90610400613287565b611d8690610400613287565b611d91906008613287565b611d9b91906132bc565b8211611da75781611de3565b610100611db661040080613287565b611dc290610400613287565b611dce90610400613287565b611dd9906008613287565b611de391906132bc565b9050611df381604085901b6132bc565b9695505050505050565b6000816020015143611e0f9190613254565b905060006010600d54901c90506000611e2b82846006546126d3565b90506118c881612633565b60008160000151826020015183604001518460600151604051602001611e81949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ea6612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161054a9385939092909160806001612782565b611f1e612d65565b611f26612d46565b60005b84811015611f845760005b6040611f436104006004613287565b611f4d91906132bc565b811015611f7157611f5d85612841565b9450611f6a600182613341565b9050611f34565b50611f7d600182613341565b9050611f29565b5060005b6020611f976104006004613287565b611fa191906132bc565b81101561204157611fb184612841565b9350858160808110611fc557611fc5613431565b6020020151845118828260808110611fdf57611fdf613431565b602002015285611ff0826001613341565b6080811061200057612000613431565b60200201518460016020020151188261201a836001613341565b6080811061202a5761202a613431565b602002015261203a600282613341565b9050611f88565b50600061204f856001613341565b90505b61205f6104006040613287565b61206d610400610100613287565b61207791906132bc565b6120846104006004613287565b612092610400610100613287565b61209c91906132bc565b6120a691906132bc565b8110156121005760005b60406120bf6104006004613287565b6120c991906132bc565b8110156120ed576120d985612841565b94506120e6600182613341565b90506120b0565b506120f9600182613341565b9050612052565b50829150935093915050565b60008061010061211e61040082613287565b61212891906132bc565b846020015161213791906132bc565b61214190846133cd565b6040850151606086015160208701519293508316179061010061216661040082613287565b61217091906132bc565b612183906001600160401b038416613287565b11156121d15760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610609565b6101006121e061040082613287565b6121ea91906132bc565b6121fd906001600160401b038316613287565b85516122099190613341565b95945050505050565b600061221c612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516122829183918891906000608081612782565b905060005b6004602061229761040083613287565b6122a191906132bc565b6122ab9190613254565b81101561235c576000816004016020026080019050612346838684608081106122d6576122d6613431565b6020020151876122e7866001613341565b608081106122f7576122f7613431565b602002015188612308876002613341565b6080811061231857612318613431565b602002015189612329886003613341565b6080811061233957612339613431565b6020020151866000612782565b92506123559050600482613341565b9050612287565b5061248a81846004602061237261040083613287565b61237c91906132bc565b6123869190613254565b6080811061239657612396613431565b6020020151856003602061040060046123af9190613287565b6123b991906132bc565b6123c39190613254565b608081106123d3576123d3613431565b6020020151866002602061040060046123ec9190613287565b6123f691906132bc565b6124009190613254565b6080811061241057612410613431565b6020020151876001602061040060046124299190613287565b61243391906132bc565b61243d9190613254565b6080811061244d5761244d613431565b6020020151602061040060046124639190613287565b61246d91906132bc565b612478906020613287565b612483906080613341565b6001612782565b5195945050505050565b600061054a825490565b6124a88282610b8a565b610835576124b5816128ae565b6124c08360206128c0565b6040516020016124d192919061346b565b60408051601f198184030181529082905262461bcd60e51b8252610609916004016134e0565b6125018282610b8a565b6108355760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b83836001600160a01b038416612a5b565b6125818282610b8a565b156108355760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b83836001600160a01b038416612aaa565b60008183106126025781610b83565b5090919050565b600082600001828154811061262057612620613431565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461264f600183613254565b6126599086613287565b6126639190613341565b61266d91906132bc565b905061267a836002613287565b81111561268f5761268c836002613287565b90505b61269a6002846132bc565b8110156126af576126ac6002846132bc565b90505b6001600160f01b038111156126c857506001600160f01b035b60101b600d55505050565b600080806000198587098587029250828110838203039150508060000361270d57838281612703576127036132a6565b0492505050610b83565b80841161271957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61278a612d65565b600c600061279785612ba4565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61283357600080fd5b505050979650505050505050565b612849612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915282519083015161054a91839160008060406001612782565b606061054a6001600160a01b03831660145b606060006128cf836002613287565b6128da906002613341565b6001600160401b038111156128f1576128f1612e65565b6040519080825280601f01601f19166020018201604052801561291b576020820181803683370190505b509050600360fc1b8160008151811061293657612936613431565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061296557612965613431565b60200101906001600160f81b031916908160001a9053506000612989846002613287565b612994906001613341565b90505b6001811115612a0c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129c8576129c8613431565b1a60f81b8282815181106129de576129de613431565b60200101906001600160f81b031916908160001a90535060049490941c93612a0581613513565b9050612997565b508315610b835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610609565b6000818152600183016020526040812054612aa25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561054a565b50600061054a565b60008181526001830160205260408120548015612b93576000612ace600183613254565b8554909150600090612ae290600190613254565b9050818114612b47576000866000018281548110612b0257612b02613431565b9060005260206000200154905080876000018481548110612b2557612b25613431565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b5857612b5861352a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061054a565b600091505061054a565b5092915050565b612bac612d65565b62010000821015612bf057600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612c3057600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612bd8565b68010000000000000000821015612c4a57612bd882612ce0565b600160801b821015612c9a576001600160401b038216604083901c612c6e82612ce0565b6001600160c01b0319168352612c8381612ce0565b6001600160c01b031916602084015250612cdb9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610609565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612d9557600080fd5b81356001600160e01b031981168114610b8357600080fd5b80356001600160a01b0381168114612cdb57600080fd5b80356001600160401b0381168114612cdb57600080fd5b60008060408385031215612dee57600080fd5b612df783612dad565b9150612e0560208401612dc4565b90509250929050565b600060208284031215612e2057600080fd5b5035919050565b600060208284031215612e3957600080fd5b610b8382612dc4565b60008060408385031215612e5557600080fd5b82359150612e0560208401612dad565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e9e57612e9e612e65565b60405290565b60405160c081016001600160401b0381118282101715612e9e57612e9e612e65565b600060808284031215612ed857600080fd5b604051608081018181106001600160401b0382111715612efa57612efa612e65565b80604052508091508235815260208301356020820152612f1c60408401612dc4565b6040820152612f2d60608401612dc4565b60608201525092915050565b600082601f830112612f4a57600080fd5b6040516110008082018281106001600160401b0382111715612f6e57612f6e612e65565b60405283018185821115612f8157600080fd5b845b82811015612f9b578035825260209182019101612f83565b509195945050505050565b600082601f830112612fb757600080fd5b813560206001600160401b0380831115612fd357612fd3612e65565b8260051b604051601f19603f83011681018181108482111715612ff857612ff8612e65565b60405293845285810183019383810192508785111561301657600080fd5b83870191505b8482101561133a5781358352918301919083019061301c565b6000611160828403121561304857600080fd5b613050612e7b565b90508135815260208201356020820152604082013560408201526130778360608401612ec6565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526130ab846101408501612f39565b60e08301526111408301356001600160401b038111156130ca57600080fd5b6130d685828601612fa6565b82840152505092915050565b60008082840360e08112156130f657600080fd5b83356001600160401b0381111561310c57600080fd5b61311886828701613035565b93505060c0601f198201121561312d57600080fd5b50613136612ea4565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b6000806040838503121561318d57600080fd5b50508035926020909101359150565b6000602082840312156131ae57600080fd5b81356001600160401b038111156131c457600080fd5b6131d084828501613035565b949350505050565b600080604083850312156131eb57600080fd5b6131f483612dad565b946020939093013593505050565b60008060006060848603121561321757600080fd5b8335925061322760208501612dad565b915061323560408501612dad565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054a5761054a61323e565b6001600160401b03828116828216039080821115612b9d57612b9d61323e565b60008160001904831182151516156132a1576132a161323e565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132cb576132cb6132a6565b500490565b80516001600160801b0381168114612cdb57600080fd5b6000604082840312156132f957600080fd5b604051604081018181106001600160401b038211171561331b5761331b612e65565b604052613327836132d0565b8152613335602084016132d0565b60208201529392505050565b8082018082111561054a5761054a61323e565b600060c0828403121561336657600080fd5b60405160c081018181106001600160401b038211171561338857613388612e65565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826133dc576133dc6132a6565b500690565b60408101818360005b60028110156134095781518352602092830192909101906001016133ea565b50505092915050565b600060ff821660ff81036134285761342861323e565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101561346257818101518382015260200161344a565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516134a3816017850160208801613447565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516134d4816028840160208801613447565b01602801949350505050565b60208152600082518060208401526134ff816040850160208701613447565b601f01601f19169190910160400192915050565b6000816135225761352261323e565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220c025751325d385921f672ba17355e6101e3ef3a98b5949438d6a5c49ed930ed964736f6c63430008100033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80637bba7d6111610125578063aed75224116100ad578063b776a5121161007c578063b776a512146104e5578063ca15c873146104ee578063d547741f14610501578063dddc61a814610514578063ffbc9bd01461051d57600080fd5b8063aed7522414610497578063b0628ee0146104aa578063b15d20da146104bd578063b4988fd0146104d257600080fd5b806391d14854116100f457806391d1485414610439578063a217fddf1461044c578063a827918214610454578063adaa7a0f1461045d578063ae722e821461048457600080fd5b80637bba7d61146103cf5780637eca5688146103f657806382975fe7146103ff5780639010d07c1461042657600080fd5b806331223ba7116101a857806339cd53ee1161017757806339cd53ee146103645780633baebb751461038d57806348f61441146103a05780635bdca855146103a9578063704d3c96146103bc57600080fd5b806331223ba71461032c578063331f3b9c14610335578063343aad821461033e57806336568abe1461035157600080fd5b806316a4be6f116101ef57806316a4be6f1461027e578063228cb733146102a9578063248a9ca3146102d45780632a02573b146103065780632f2ff15d1461031957600080fd5b806301ffc9a714610221578063047c13f514610249578063158ef93e1461025e5780631600c6241461026b575b600080fd5b61023461022f366004612d83565b610525565b60405190151581526020015b60405180910390f35b61025c610257366004612ddb565b610550565b005b6000546102349060ff1681565b61025c610279366004612e0e565b61066c565b600a54610291906001600160401b031681565b6040516001600160401b039091168152602001610240565b6004546102bc906001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6102f86102e2366004612e0e565b6000908152600160208190526040909120015490565b604051908152602001610240565b61025c610314366004612e27565b61068a565b61025c610327366004612e42565b610790565b6102f8600b5481565b6102f860065481565b6003546102bc906001600160a01b031681565b61025c61035f366004612e42565b6107bb565b6102bc610372366004612e0e565b600e602052600090815260409020546001600160a01b031681565b61025c61039b3660046130e2565b610839565b6102f8600d5481565b61025c6103b7366004612e0e565b610ad0565b61025c6103ca366004612e0e565b610afd565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102f860085481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102bc61043436600461317a565b610b6b565b610234610447366004612e42565b610b8a565b6102f8600081565b6102f8600c5481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b61025c61049236600461319c565b610bb5565b6102f86104a536600461319c565b611142565b61025c6104b83660046131d8565b611345565b6102f860008051602061354183398151915281565b61025c6104e0366004613202565b611405565b6102f860075481565b6102f86104fc366004612e0e565b61152c565b61025c61050f366004612e42565b611543565b6102f860095481565b610234611569565b60006001600160e01b03198216635a05180f60e01b148061054a575061054a82611604565b92915050565b600061055d600143613254565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106125760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061354183398151915261068481611639565b50600655565b6000805160206135418339815191526106a281611639565b6000826001600160401b0316116106fb5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f006044820152606401610609565b610706600183613267565b82166001600160401b031660001461076c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b6064820152608401610609565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546107ac81611639565b6107b68383611646565b505050565b6001600160a01b038116331461082b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610609565b6108358282611668565b5050565b815160a08201511461088d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610609565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109005760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610609565b600754600c54106109535760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610609565b600061010061096461040082613287565b61096e91906132bc565b61010061097d61040082613287565b61098791906132bc565b836060015161099691906132bc565b6109a09190613287565b60608401519091506109b2908261168a565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2591906132e7565b90506000610100610a396104006004613287565b610a4391906132bc565b8560800151610a529190613341565b90508082600001516001600160801b0316108015610a7d57508082602001516001600160801b031610155b610ac95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610609565b5050505050565b600080516020613541833981519152610ae881611639565b6008829055600b546000036108355750600755565b600080516020613541833981519152610b1581611639565b60008211610b655760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f0000006044820152606401610609565b50600955565b6000828152600260205260408120610b8390836118ce565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610bff5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610609565b6040808201516000908152600e60205220546001600160a01b031680610c675760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610609565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190613354565b9050600b5481600001511015610d3c5760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610609565b600b548151118015610d5057506000600b54115b15610d7557600754600c541015610d6957610d696118da565b6000600c556008546007555b610d7f8382610839565b600a5460608401516001600160401b0390911690610d9c906118ec565b1115610df95760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b6064820152608401610609565b610e01612d46565b7f000000000000000000000000000000000000000000000000000000000000000015610e3757610e3084611936565b9050610e3e565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610ec7576000610e708583611a4a565b905082604001518114610ec55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610609565b505b610ecf612d46565b90506000610edc85611142565b90506000610efb84606001518760600151611cbd90919063ffffffff16565b9050604081600d54610f0d91906132bc565b901b821115610f5e5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610609565b60008281526005602052604090205460ff1615610fbd5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d6974746564000000000000006044820152606401610609565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c610100610ff661040080613287565b61100290610400613287565b61100d906008613287565b61101791906132bc565b886080015161102691906132bc565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906110f3908490613341565b9091555050600754600c54101561110c57505050505050565b7f000000000000000000000000000000000000000000000000000000000000000061113a5761113a84611dfd565b505050505050565b60408101516000906111965760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610609565b600060405180608001604052808460400151815260200184602001518152602001846000015181526020016111ce8560600151611e36565b9052905060006111dd82611e9e565b905060006111ee6104006040613287565b6111fc610400610100613287565b61120691906132bc565b6112136104006004613287565b611221610400610100613287565b61122b91906132bc565b61123591906132bc565b8560a0015161124491906133cd565b905061124e612d46565b611256612d65565b6112658760e001518486611f16565b925090506101006112796104006004613287565b61128391906132bc565b8760a001516112929190613287565b6112cf826040516020016112a691906133e1565b60405160208183030381529060405280519060200120896060015161210c90919063ffffffff16565b6112d99190613341565b87608001511461132b5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610609565b61133a8760a001518584612212565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146113ab5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610609565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156114645760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610609565b6000805460ff191660011781556114819061147c3390565b611646565b61149960008051602061354183398151915233611646565b6114a5836000196132bc565b600d557f0000000000000000000000000000000000000000000000000000000000000000156114d557600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061054a90612494565b6000828152600160208190526040909120015461155f81611639565b6107b68383611668565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af11580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190613354565b9050600b54816000015111806115fe5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061054a57506301ffc9a760e01b6001600160e01b031983161461054a565b611643813361249e565b50565b61165082826124f7565b60008281526002602052604090206107b69082612562565b6116728282612577565b60008281526002602052604090206107b690826125de565b61010061169961040080613287565b6116a590610400613287565b6116b0906008613287565b6116ba91906132bc565b82516116c691906133cd565b156117135760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610609565b60208201518251829161172591613341565b111561176b5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610609565b6000611776836118ec565b61010061178561040080613287565b61179190610400613287565b61179d90610400613287565b6117a8906008613287565b6117b291906132bc565b6117bc9190613287565b9050808360200151111561180a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610609565b600061181683836125f3565b905080846020015110156118655760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610609565b83606001518460400151166001600160401b03166000146118c85760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610609565b50505050565b6000610b838383612609565b6118ea6001600160f01b03612633565b565b606081015160009019815b6001600160401b0382161561192757611911600183613267565b909116908061191f81613412565b9150506118f7565b600160ff9091161b9392505050565b61193e612d46565b60408083015160c08401516080850151925161196e93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119a16104006004613287565b6119ab91906132bc565b811015611a445760e08301516119c2600183613254565b608081106119d2576119d2613431565b60200201516040516020016119e991815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a1557611a15613431565b602002015118828260808110611a2d57611a2d613431565b6020020152611a3d600182613341565b9050611992565b50919050565b6000805b6020611a5d6104006004613287565b611a6791906132bc565b811015611ab5576101006020820284012080848360808110611a8b57611a8b613431565b602002018181525050506020610100611aa491906132bc565b611aae9082613341565b9050611a4e565b506000611ac560206101006132bc565b90505b6020611ad76104006004613287565b611ae191906132bc565b811015611bb45760005b6020611afa6104006004613287565b611b0491906132bc565b811015611bab576000848260808110611b1f57611b1f613431565b60200201519050600085611b338585613341565b60808110611b4357611b43613431565b602002015190508181604051602001611b66929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611b8e57611b8e613431565b602002015250611ba49050600183901b82613341565b9050611aeb565b5060011b611ac8565b508151611bbf612d46565b92506000610100611bd36104006004613287565b611bdd91906132bc565b8560800151611bec91906132bc565b905060005b85610100015151811015611cb357600080611c0d6002856133cd565b600003611c3d578491508761010001518381518110611c2e57611c2e613431565b60200260200101519050611c62565b8761010001518381518110611c5457611c54613431565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611c9b91906132bc565b93505050600181611cac9190613341565b9050611bf1565b5090949350505050565b600080610100611ccf61040080613287565b611cdb90610400613287565b611ce790610400613287565b611cf2906008613287565b611cfc91906132bc565b8311611d085782611d44565b610100611d1761040080613287565b611d2390610400613287565b611d2f90610400613287565b611d3a906008613287565b611d4491906132bc565b90506000611d51856118ec565b611d5b90856132bc565b90506000610100611d6e61040080613287565b611d7a90610400613287565b611d8690610400613287565b611d91906008613287565b611d9b91906132bc565b8211611da75781611de3565b610100611db661040080613287565b611dc290610400613287565b611dce90610400613287565b611dd9906008613287565b611de391906132bc565b9050611df381604085901b6132bc565b9695505050505050565b6000816020015143611e0f9190613254565b905060006010600d54901c90506000611e2b82846006546126d3565b90506118c881612633565b60008160000151826020015183604001518460600151604051602001611e81949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ea6612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161054a9385939092909160806001612782565b611f1e612d65565b611f26612d46565b60005b84811015611f845760005b6040611f436104006004613287565b611f4d91906132bc565b811015611f7157611f5d85612841565b9450611f6a600182613341565b9050611f34565b50611f7d600182613341565b9050611f29565b5060005b6020611f976104006004613287565b611fa191906132bc565b81101561204157611fb184612841565b9350858160808110611fc557611fc5613431565b6020020151845118828260808110611fdf57611fdf613431565b602002015285611ff0826001613341565b6080811061200057612000613431565b60200201518460016020020151188261201a836001613341565b6080811061202a5761202a613431565b602002015261203a600282613341565b9050611f88565b50600061204f856001613341565b90505b61205f6104006040613287565b61206d610400610100613287565b61207791906132bc565b6120846104006004613287565b612092610400610100613287565b61209c91906132bc565b6120a691906132bc565b8110156121005760005b60406120bf6104006004613287565b6120c991906132bc565b8110156120ed576120d985612841565b94506120e6600182613341565b90506120b0565b506120f9600182613341565b9050612052565b50829150935093915050565b60008061010061211e61040082613287565b61212891906132bc565b846020015161213791906132bc565b61214190846133cd565b6040850151606086015160208701519293508316179061010061216661040082613287565b61217091906132bc565b612183906001600160401b038416613287565b11156121d15760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610609565b6101006121e061040082613287565b6121ea91906132bc565b6121fd906001600160401b038316613287565b85516122099190613341565b95945050505050565b600061221c612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516122829183918891906000608081612782565b905060005b6004602061229761040083613287565b6122a191906132bc565b6122ab9190613254565b81101561235c576000816004016020026080019050612346838684608081106122d6576122d6613431565b6020020151876122e7866001613341565b608081106122f7576122f7613431565b602002015188612308876002613341565b6080811061231857612318613431565b602002015189612329886003613341565b6080811061233957612339613431565b6020020151866000612782565b92506123559050600482613341565b9050612287565b5061248a81846004602061237261040083613287565b61237c91906132bc565b6123869190613254565b6080811061239657612396613431565b6020020151856003602061040060046123af9190613287565b6123b991906132bc565b6123c39190613254565b608081106123d3576123d3613431565b6020020151866002602061040060046123ec9190613287565b6123f691906132bc565b6124009190613254565b6080811061241057612410613431565b6020020151876001602061040060046124299190613287565b61243391906132bc565b61243d9190613254565b6080811061244d5761244d613431565b6020020151602061040060046124639190613287565b61246d91906132bc565b612478906020613287565b612483906080613341565b6001612782565b5195945050505050565b600061054a825490565b6124a88282610b8a565b610835576124b5816128ae565b6124c08360206128c0565b6040516020016124d192919061346b565b60408051601f198184030181529082905262461bcd60e51b8252610609916004016134e0565b6125018282610b8a565b6108355760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b83836001600160a01b038416612a5b565b6125818282610b8a565b156108355760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b83836001600160a01b038416612aaa565b60008183106126025781610b83565b5090919050565b600082600001828154811061262057612620613431565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461264f600183613254565b6126599086613287565b6126639190613341565b61266d91906132bc565b905061267a836002613287565b81111561268f5761268c836002613287565b90505b61269a6002846132bc565b8110156126af576126ac6002846132bc565b90505b6001600160f01b038111156126c857506001600160f01b035b60101b600d55505050565b600080806000198587098587029250828110838203039150508060000361270d57838281612703576127036132a6565b0492505050610b83565b80841161271957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61278a612d65565b600c600061279785612ba4565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61283357600080fd5b505050979650505050505050565b612849612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915282519083015161054a91839160008060406001612782565b606061054a6001600160a01b03831660145b606060006128cf836002613287565b6128da906002613341565b6001600160401b038111156128f1576128f1612e65565b6040519080825280601f01601f19166020018201604052801561291b576020820181803683370190505b509050600360fc1b8160008151811061293657612936613431565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061296557612965613431565b60200101906001600160f81b031916908160001a9053506000612989846002613287565b612994906001613341565b90505b6001811115612a0c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129c8576129c8613431565b1a60f81b8282815181106129de576129de613431565b60200101906001600160f81b031916908160001a90535060049490941c93612a0581613513565b9050612997565b508315610b835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610609565b6000818152600183016020526040812054612aa25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561054a565b50600061054a565b60008181526001830160205260408120548015612b93576000612ace600183613254565b8554909150600090612ae290600190613254565b9050818114612b47576000866000018281548110612b0257612b02613431565b9060005260206000200154905080876000018481548110612b2557612b25613431565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b5857612b5861352a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061054a565b600091505061054a565b5092915050565b612bac612d65565b62010000821015612bf057600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612c3057600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612bd8565b68010000000000000000821015612c4a57612bd882612ce0565b600160801b821015612c9a576001600160401b038216604083901c612c6e82612ce0565b6001600160c01b0319168352612c8381612ce0565b6001600160c01b031916602084015250612cdb9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610609565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612d9557600080fd5b81356001600160e01b031981168114610b8357600080fd5b80356001600160a01b0381168114612cdb57600080fd5b80356001600160401b0381168114612cdb57600080fd5b60008060408385031215612dee57600080fd5b612df783612dad565b9150612e0560208401612dc4565b90509250929050565b600060208284031215612e2057600080fd5b5035919050565b600060208284031215612e3957600080fd5b610b8382612dc4565b60008060408385031215612e5557600080fd5b82359150612e0560208401612dad565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e9e57612e9e612e65565b60405290565b60405160c081016001600160401b0381118282101715612e9e57612e9e612e65565b600060808284031215612ed857600080fd5b604051608081018181106001600160401b0382111715612efa57612efa612e65565b80604052508091508235815260208301356020820152612f1c60408401612dc4565b6040820152612f2d60608401612dc4565b60608201525092915050565b600082601f830112612f4a57600080fd5b6040516110008082018281106001600160401b0382111715612f6e57612f6e612e65565b60405283018185821115612f8157600080fd5b845b82811015612f9b578035825260209182019101612f83565b509195945050505050565b600082601f830112612fb757600080fd5b813560206001600160401b0380831115612fd357612fd3612e65565b8260051b604051601f19603f83011681018181108482111715612ff857612ff8612e65565b60405293845285810183019383810192508785111561301657600080fd5b83870191505b8482101561133a5781358352918301919083019061301c565b6000611160828403121561304857600080fd5b613050612e7b565b90508135815260208201356020820152604082013560408201526130778360608401612ec6565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526130ab846101408501612f39565b60e08301526111408301356001600160401b038111156130ca57600080fd5b6130d685828601612fa6565b82840152505092915050565b60008082840360e08112156130f657600080fd5b83356001600160401b0381111561310c57600080fd5b61311886828701613035565b93505060c0601f198201121561312d57600080fd5b50613136612ea4565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b6000806040838503121561318d57600080fd5b50508035926020909101359150565b6000602082840312156131ae57600080fd5b81356001600160401b038111156131c457600080fd5b6131d084828501613035565b949350505050565b600080604083850312156131eb57600080fd5b6131f483612dad565b946020939093013593505050565b60008060006060848603121561321757600080fd5b8335925061322760208501612dad565b915061323560408501612dad565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054a5761054a61323e565b6001600160401b03828116828216039080821115612b9d57612b9d61323e565b60008160001904831182151516156132a1576132a161323e565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132cb576132cb6132a6565b500490565b80516001600160801b0381168114612cdb57600080fd5b6000604082840312156132f957600080fd5b604051604081018181106001600160401b038211171561331b5761331b612e65565b604052613327836132d0565b8152613335602084016132d0565b60208201529392505050565b8082018082111561054a5761054a61323e565b600060c0828403121561336657600080fd5b60405160c081018181106001600160401b038211171561338857613388612e65565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826133dc576133dc6132a6565b500690565b60408101818360005b60028110156134095781518352602092830192909101906001016133ea565b50505092915050565b600060ff821660ff81036134285761342861323e565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101561346257818101518382015260200161344a565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516134a3816017850160208801613447565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516134d4816028840160208801613447565b01602801949350505050565b60208152600082518060208401526134ff816040850160208701613447565b601f01601f19169190910160400192915050565b6000816135225761352261323e565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220c025751325d385921f672ba17355e6101e3ef3a98b5949438d6a5c49ed930ed964736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/PoraMineTest.json b/storage-contracts-abis/PoraMineTest.json new file mode 100644 index 0000000..be6e503 --- /dev/null +++ b/storage-contracts-abis/PoraMineTest.json @@ -0,0 +1,1178 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PoraMineTest", + "sourceName": "contracts/test/PoraMineTest.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "settings", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "NewMinerId", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + } + ], + "name": "NewSubmission", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "UpdateMinerId", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PARAMS_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + } + ], + "name": "basicCheck", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "beneficiaries", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "canSubmit", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currentSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dataProofEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "difficultyAdjustRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fixedDifficulty", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficulty", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flow_", + "type": "address" + }, + { + "internalType": "address", + "name": "reward_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastMinedEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxShards", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "pora", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poraTarget", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + }, + { + "internalType": "bytes32[128]", + "name": "unsealedData", + "type": "bytes32[128]" + } + ], + "name": "recoverMerkleRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint64", + "name": "seed", + "type": "uint64" + } + ], + "name": "requestMinerId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sealDataEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficultyAdjustRatio_", + "type": "uint256" + } + ], + "name": "setDifficultyAdjustRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxShards_", + "type": "uint64" + } + ], + "name": "setMaxShards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "setMiner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_targetQuality", + "type": "uint256" + } + ], + "name": "setQuality", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetMineBlocks_", + "type": "uint256" + } + ], + "name": "setTargetMineBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetSubmissions_", + "type": "uint256" + } + ], + "name": "setTargetSubmissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "submit", + "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": "targetMineBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissionsNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "transferBeneficial", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "unseal", + "outputs": [ + { + "internalType": "bytes32[128]", + "name": "unsealedData", + "type": "bytes32[128]" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200377a3803806200377a833981016040819052620000349162000052565b60016004909117818116156080526002161560a05260c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c0516136c2620000b860003960008181610433015281816111cb01526115670152600081816104630152610efd0152600081816104c10152610ec001526136c26000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80637bba7d611161013b578063b0628ee0116100b8578063ca15c8731161007c578063ca15c8731461057b578063d547741f1461058e578063dddc61a8146105a1578063e1498cf9146105aa578063ffbc9bd0146105bd57600080fd5b8063b0628ee014610509578063b15d20da1461051c578063b4988fd014610531578063b51e039714610544578063b776a5121461057257600080fd5b8063a217fddf116100ff578063a217fddf146104ab578063a8279182146104b3578063adaa7a0f146104bc578063ae722e82146104e3578063aed75224146104f657600080fd5b80637bba7d611461042e5780637eca56881461045557806382975fe71461045e5780639010d07c1461048557806391d148541461049857600080fd5b8063331f3b9c116101c957806348f614411161018d57806348f61441146103cc57806359e7b5be146103d55780635bdca855146103f55780636e9bb60b14610408578063704d3c961461041b57600080fd5b8063331f3b9c14610361578063343aad821461036a57806336568abe1461037d57806339cd53ee146103905780633baebb75146103b957600080fd5b8063228cb73311610210578063228cb733146102d5578063248a9ca3146103005780632a02573b146103325780632f2ff15d1461034557806331223ba71461035857600080fd5b806301ffc9a71461024d578063047c13f514610275578063158ef93e1461028a5780631600c6241461029757806316a4be6f146102aa575b600080fd5b61026061025b366004612e40565b6105c5565b60405190151581526020015b60405180910390f35b610288610283366004612e98565b6105f0565b005b6000546102609060ff1681565b6102886102a5366004612ecb565b61070c565b600a546102bd906001600160401b031681565b6040516001600160401b03909116815260200161026c565b6004546102e8906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b61032461030e366004612ecb565b6000908152600160208190526040909120015490565b60405190815260200161026c565b610288610340366004612ee4565b61072a565b610288610353366004612eff565b610830565b610324600b5481565b61032460065481565b6003546102e8906001600160a01b031681565b61028861038b366004612eff565b61085b565b6102e861039e366004612ecb565b600e602052600090815260409020546001600160a01b031681565b6102886103c736600461319f565b6108d9565b610324600d5481565b6103e86103e3366004613237565b610b70565b60405161026c9190613273565b610288610403366004612ecb565b610b81565b6103246104163660046132a5565b610bae565b610288610429366004612ecb565b610bc1565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b61032460085481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102e86104933660046132eb565b610c2f565b6102606104a6366004612eff565b610c47565b610324600081565b610324600c5481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102886104f1366004613237565b610c72565b610324610504366004613237565b6111ff565b61028861051736600461330d565b611402565b61032460008051602061366d83398151915281565b61028861053f366004613337565b6114c2565b610288610552366004612ecb565b6000908152600e6020526040902080546001600160a01b03191633179055565b61032460075481565b610324610589366004612ecb565b6115e9565b61028861059c366004612eff565b611600565b61032460095481565b6102886105b8366004612ecb565b600d55565b610260611626565b60006001600160e01b03198216635a05180f60e01b14806105ea57506105ea826116c1565b92915050565b60006105fd600143613389565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106b25760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061366d833981519152610724816116f6565b50600655565b60008051602061366d833981519152610742816116f6565b6000826001600160401b03161161079b5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016106a9565b6107a660018361339c565b82166001600160401b031660001461080c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016106a9565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b6000828152600160208190526040909120015461084c816116f6565b6108568383611703565b505050565b6001600160a01b03811633146108cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106a9565b6108d58282611725565b5050565b815160a08201511461092d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016106a9565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109a05760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016106a9565b600754600c54106109f35760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016106a9565b6000610100610a04610400826133bc565b610a0e91906133f1565b610100610a1d610400826133bc565b610a2791906133f1565b8360600151610a3691906133f1565b610a4091906133bc565b6060840151909150610a529082611747565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac5919061341c565b90506000610100610ad961040060046133bc565b610ae391906133f1565b8560800151610af29190613476565b90508082600001516001600160801b0316108015610b1d57508082602001516001600160801b031610155b610b695760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016106a9565b5050505050565b610b78612e03565b6105ea8261198b565b60008051602061366d833981519152610b99816116f6565b6008829055600b546000036108d55750600755565b6000610bba8383611a9f565b9392505050565b60008051602061366d833981519152610bd9816116f6565b60008211610c295760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016106a9565b50600955565b6000828152600260205260408120610bba9083611d12565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610cbc5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016106a9565b6040808201516000908152600e60205220546001600160a01b031680610d245760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016106a9565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190613489565b9050600b5481600001511015610df95760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016106a9565b600b548151118015610e0d57506000600b54115b15610e3257600754600c541015610e2657610e26611d1e565b6000600c556008546007555b610e3c83826108d9565b600a5460608401516001600160401b0390911690610e5990611d30565b1115610eb65760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016106a9565b610ebe612e03565b7f000000000000000000000000000000000000000000000000000000000000000015610ef457610eed8461198b565b9050610efb565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610f84576000610f2d8583611a9f565b905082604001518114610f825760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016106a9565b505b610f8c612e03565b90506000610f99856111ff565b90506000610fb884606001518760600151611d7a90919063ffffffff16565b9050604081600d54610fca91906133f1565b901b82111561101b5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016106a9565b60008281526005602052604090205460ff161561107a5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016106a9565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c6101006110b3610400806133bc565b6110bf906104006133bc565b6110ca9060086133bc565b6110d491906133f1565b88608001516110e391906133f1565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561113557600080fd5b505af1158015611149573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906111b0908490613476565b9091555050600754600c5410156111c957505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006111f7576111f784611eba565b505050505050565b60408101516000906112535760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016106a9565b6000604051806080016040528084604001518152602001846020015181526020018460000151815260200161128b8560600151611ef3565b90529050600061129a82611f5b565b905060006112ab61040060406133bc565b6112b96104006101006133bc565b6112c391906133f1565b6112d061040060046133bc565b6112de6104006101006133bc565b6112e891906133f1565b6112f291906133f1565b8560a001516113019190613502565b905061130b612e03565b611313612e22565b6113228760e001518486611fd3565b9250905061010061133661040060046133bc565b61134091906133f1565b8760a0015161134f91906133bc565b61138c826040516020016113639190613516565b6040516020818303038152906040528051906020012089606001516121c990919063ffffffff16565b6113969190613476565b8760800151146113e85760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016106a9565b6113f78760a0015185846122cf565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146114685760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016106a9565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156115215760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016106a9565b6000805460ff1916600117815561153e906115393390565b611703565b61155660008051602061366d83398151915233611703565b611562836000196133f1565b600d557f00000000000000000000000000000000000000000000000000000000000000001561159257600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b60008181526002602052604081206105ea90612551565b6000828152600160208190526040909120015461161c816116f6565b6108568383611725565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190613489565b9050600b54816000015111806116bb5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b14806105ea57506301ffc9a760e01b6001600160e01b03198316146105ea565b611700813361255b565b50565b61170d82826125b4565b6000828152600260205260409020610856908261261f565b61172f8282612634565b6000828152600260205260409020610856908261269b565b610100611756610400806133bc565b611762906104006133bc565b61176d9060086133bc565b61177791906133f1565b82516117839190613502565b156117d05760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016106a9565b6020820151825182916117e291613476565b11156118285760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016106a9565b600061183383611d30565b610100611842610400806133bc565b61184e906104006133bc565b61185a906104006133bc565b6118659060086133bc565b61186f91906133f1565b61187991906133bc565b905080836020015111156118c75760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016106a9565b60006118d383836126b0565b905080846020015110156119225760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016106a9565b83606001518460400151166001600160401b03166000146119855760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016106a9565b50505050565b611993612e03565b60408083015160c0840151608085015192516119c393906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119f661040060046133bc565b611a0091906133f1565b811015611a995760e0830151611a17600183613389565b60808110611a2757611a2761353e565b6020020151604051602001611a3e91815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a6a57611a6a61353e565b602002015118828260808110611a8257611a8261353e565b6020020152611a92600182613476565b90506119e7565b50919050565b6000805b6020611ab261040060046133bc565b611abc91906133f1565b811015611b0a576101006020820284012080848360808110611ae057611ae061353e565b602002018181525050506020610100611af991906133f1565b611b039082613476565b9050611aa3565b506000611b1a60206101006133f1565b90505b6020611b2c61040060046133bc565b611b3691906133f1565b811015611c095760005b6020611b4f61040060046133bc565b611b5991906133f1565b811015611c00576000848260808110611b7457611b7461353e565b60200201519050600085611b888585613476565b60808110611b9857611b9861353e565b602002015190508181604051602001611bbb929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611be357611be361353e565b602002015250611bf99050600183901b82613476565b9050611b40565b5060011b611b1d565b508151611c14612e03565b92506000610100611c2861040060046133bc565b611c3291906133f1565b8560800151611c4191906133f1565b905060005b85610100015151811015611d0857600080611c62600285613502565b600003611c92578491508761010001518381518110611c8357611c8361353e565b60200260200101519050611cb7565b8761010001518381518110611ca957611ca961353e565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611cf091906133f1565b93505050600181611d019190613476565b9050611c46565b5090949350505050565b6000610bba83836126c6565b611d2e6001600160f01b036126f0565b565b606081015160009019815b6001600160401b03821615611d6b57611d5560018361339c565b9091169080611d6381613554565b915050611d3b565b600160ff9091161b9392505050565b600080610100611d8c610400806133bc565b611d98906104006133bc565b611da4906104006133bc565b611daf9060086133bc565b611db991906133f1565b8311611dc55782611e01565b610100611dd4610400806133bc565b611de0906104006133bc565b611dec906104006133bc565b611df79060086133bc565b611e0191906133f1565b90506000611e0e85611d30565b611e1890856133f1565b90506000610100611e2b610400806133bc565b611e37906104006133bc565b611e43906104006133bc565b611e4e9060086133bc565b611e5891906133f1565b8211611e645781611ea0565b610100611e73610400806133bc565b611e7f906104006133bc565b611e8b906104006133bc565b611e969060086133bc565b611ea091906133f1565b9050611eb081604085901b6133f1565b9695505050505050565b6000816020015143611ecc9190613389565b905060006010600d54901c90506000611ee88284600654612790565b9050611985816126f0565b60008160000151826020015183604001518460600151604051602001611f3e949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611f63612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516105ea938593909290916080600161283f565b611fdb612e22565b611fe3612e03565b60005b848110156120415760005b604061200061040060046133bc565b61200a91906133f1565b81101561202e5761201a856128fe565b9450612027600182613476565b9050611ff1565b5061203a600182613476565b9050611fe6565b5060005b602061205461040060046133bc565b61205e91906133f1565b8110156120fe5761206e846128fe565b93508581608081106120825761208261353e565b602002015184511882826080811061209c5761209c61353e565b6020020152856120ad826001613476565b608081106120bd576120bd61353e565b6020020151846001602002015118826120d7836001613476565b608081106120e7576120e761353e565b60200201526120f7600282613476565b9050612045565b50600061210c856001613476565b90505b61211c61040060406133bc565b61212a6104006101006133bc565b61213491906133f1565b61214161040060046133bc565b61214f6104006101006133bc565b61215991906133f1565b61216391906133f1565b8110156121bd5760005b604061217c61040060046133bc565b61218691906133f1565b8110156121aa57612196856128fe565b94506121a3600182613476565b905061216d565b506121b6600182613476565b905061210f565b50829150935093915050565b6000806101006121db610400826133bc565b6121e591906133f1565b84602001516121f491906133f1565b6121fe9084613502565b60408501516060860151602087015192935083161790610100612223610400826133bc565b61222d91906133f1565b612240906001600160401b0384166133bc565b111561228e5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016106a9565b61010061229d610400826133bc565b6122a791906133f1565b6122ba906001600160401b0383166133bc565b85516122c69190613476565b95945050505050565b60006122d9612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161233f918391889190600060808161283f565b905060005b60046020612354610400836133bc565b61235e91906133f1565b6123689190613389565b811015612419576000816004016020026080019050612403838684608081106123935761239361353e565b6020020151876123a4866001613476565b608081106123b4576123b461353e565b6020020151886123c5876002613476565b608081106123d5576123d561353e565b6020020151896123e6886003613476565b608081106123f6576123f661353e565b602002015186600061283f565b92506124129050600482613476565b9050612344565b5061254781846004602061242f610400836133bc565b61243991906133f1565b6124439190613389565b608081106124535761245361353e565b60200201518560036020610400600461246c91906133bc565b61247691906133f1565b6124809190613389565b608081106124905761249061353e565b6020020151866002602061040060046124a991906133bc565b6124b391906133f1565b6124bd9190613389565b608081106124cd576124cd61353e565b6020020151876001602061040060046124e691906133bc565b6124f091906133f1565b6124fa9190613389565b6080811061250a5761250a61353e565b60200201516020610400600461252091906133bc565b61252a91906133f1565b6125359060206133bc565b612540906080613476565b600161283f565b5195945050505050565b60006105ea825490565b6125658282610c47565b6108d5576125728161296b565b61257d83602061297d565b60405160200161258e929190613597565b60408051601f198184030181529082905262461bcd60e51b82526106a99160040161360c565b6125be8282610c47565b6108d55760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bba836001600160a01b038416612b18565b61263e8282610c47565b156108d55760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bba836001600160a01b038416612b67565b60008183106126bf5781610bba565b5090919050565b60008260000182815481106126dd576126dd61353e565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461270c600183613389565b61271690866133bc565b6127209190613476565b61272a91906133f1565b90506127378360026133bc565b81111561274c576127498360026133bc565b90505b6127576002846133f1565b81101561276c576127696002846133f1565b90505b6001600160f01b0381111561278557506001600160f01b035b60101b600d55505050565b60008080600019858709858702925082811083820303915050806000036127ca578382816127c0576127c06133db565b0492505050610bba565b8084116127d657600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b612847612e22565b600c600061285485612c61565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa6128f057600080fd5b505050979650505050505050565b612906612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516105ea9183916000806040600161283f565b60606105ea6001600160a01b03831660145b6060600061298c8360026133bc565b612997906002613476565b6001600160401b038111156129ae576129ae612f22565b6040519080825280601f01601f1916602001820160405280156129d8576020820181803683370190505b509050600360fc1b816000815181106129f3576129f361353e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612a2257612a2261353e565b60200101906001600160f81b031916908160001a9053506000612a468460026133bc565b612a51906001613476565b90505b6001811115612ac9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612a8557612a8561353e565b1a60f81b828281518110612a9b57612a9b61353e565b60200101906001600160f81b031916908160001a90535060049490941c93612ac28161363f565b9050612a54565b508315610bba5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106a9565b6000818152600183016020526040812054612b5f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105ea565b5060006105ea565b60008181526001830160205260408120548015612c50576000612b8b600183613389565b8554909150600090612b9f90600190613389565b9050818114612c04576000866000018281548110612bbf57612bbf61353e565b9060005260206000200154905080876000018481548110612be257612be261353e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c1557612c15613656565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105ea565b60009150506105ea565b5092915050565b612c69612e22565b62010000821015612cad57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612ced57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612c95565b68010000000000000000821015612d0757612c9582612d9d565b600160801b821015612d57576001600160401b038216604083901c612d2b82612d9d565b6001600160c01b0319168352612d4081612d9d565b6001600160c01b031916602084015250612d989050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016106a9565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612e5257600080fd5b81356001600160e01b031981168114610bba57600080fd5b80356001600160a01b0381168114612d9857600080fd5b80356001600160401b0381168114612d9857600080fd5b60008060408385031215612eab57600080fd5b612eb483612e6a565b9150612ec260208401612e81565b90509250929050565b600060208284031215612edd57600080fd5b5035919050565b600060208284031215612ef657600080fd5b610bba82612e81565b60008060408385031215612f1257600080fd5b82359150612ec260208401612e6a565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612f5b57612f5b612f22565b60405290565b60405160c081016001600160401b0381118282101715612f5b57612f5b612f22565b600060808284031215612f9557600080fd5b604051608081018181106001600160401b0382111715612fb757612fb7612f22565b80604052508091508235815260208301356020820152612fd960408401612e81565b6040820152612fea60608401612e81565b60608201525092915050565b600082601f83011261300757600080fd5b6040516110008082018281106001600160401b038211171561302b5761302b612f22565b6040528301818582111561303e57600080fd5b845b82811015613058578035825260209182019101613040565b509195945050505050565b600082601f83011261307457600080fd5b813560206001600160401b038083111561309057613090612f22565b8260051b604051601f19603f830116810181811084821117156130b5576130b5612f22565b6040529384528581018301938381019250878511156130d357600080fd5b83870191505b848210156113f7578135835291830191908301906130d9565b6000611160828403121561310557600080fd5b61310d612f38565b90508135815260208201356020820152604082013560408201526131348360608401612f83565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613168846101408501612ff6565b60e08301526111408301356001600160401b0381111561318757600080fd5b61319385828601613063565b82840152505092915050565b60008082840360e08112156131b357600080fd5b83356001600160401b038111156131c957600080fd5b6131d5868287016130f2565b93505060c0601f19820112156131ea57600080fd5b506131f3612f61565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561324957600080fd5b81356001600160401b0381111561325f57600080fd5b61326b848285016130f2565b949350505050565b6110008101818360005b608081101561329c57815183526020928301929091019060010161327d565b50505092915050565b60008061102083850312156132b957600080fd5b82356001600160401b038111156132cf57600080fd5b6132db858286016130f2565b925050612ec28460208501612ff6565b600080604083850312156132fe57600080fd5b50508035926020909101359150565b6000806040838503121561332057600080fd5b61332983612e6a565b946020939093013593505050565b60008060006060848603121561334c57600080fd5b8335925061335c60208501612e6a565b915061336a60408501612e6a565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b818103818111156105ea576105ea613373565b6001600160401b03828116828216039080821115612c5a57612c5a613373565b60008160001904831182151516156133d6576133d6613373565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613400576134006133db565b500490565b80516001600160801b0381168114612d9857600080fd5b60006040828403121561342e57600080fd5b604051604081018181106001600160401b038211171561345057613450612f22565b60405261345c83613405565b815261346a60208401613405565b60208201529392505050565b808201808211156105ea576105ea613373565b600060c0828403121561349b57600080fd5b60405160c081018181106001600160401b03821117156134bd576134bd612f22565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600082613511576135116133db565b500690565b60408101818360005b600281101561329c57815183526020928301929091019060010161351f565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361356a5761356a613373565b60010192915050565b60005b8381101561358e578181015183820152602001613576565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516135cf816017850160208801613573565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613600816028840160208801613573565b01602801949350505050565b602081526000825180602084015261362b816040850160208701613573565b601f01601f19169190910160400192915050565b60008161364e5761364e613373565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a26469706673582212209dab7492675acbf9c807415e450f985cb300dc9ae83babc363c910896d1cfe3b64736f6c63430008100033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c80637bba7d611161013b578063b0628ee0116100b8578063ca15c8731161007c578063ca15c8731461057b578063d547741f1461058e578063dddc61a8146105a1578063e1498cf9146105aa578063ffbc9bd0146105bd57600080fd5b8063b0628ee014610509578063b15d20da1461051c578063b4988fd014610531578063b51e039714610544578063b776a5121461057257600080fd5b8063a217fddf116100ff578063a217fddf146104ab578063a8279182146104b3578063adaa7a0f146104bc578063ae722e82146104e3578063aed75224146104f657600080fd5b80637bba7d611461042e5780637eca56881461045557806382975fe71461045e5780639010d07c1461048557806391d148541461049857600080fd5b8063331f3b9c116101c957806348f614411161018d57806348f61441146103cc57806359e7b5be146103d55780635bdca855146103f55780636e9bb60b14610408578063704d3c961461041b57600080fd5b8063331f3b9c14610361578063343aad821461036a57806336568abe1461037d57806339cd53ee146103905780633baebb75146103b957600080fd5b8063228cb73311610210578063228cb733146102d5578063248a9ca3146103005780632a02573b146103325780632f2ff15d1461034557806331223ba71461035857600080fd5b806301ffc9a71461024d578063047c13f514610275578063158ef93e1461028a5780631600c6241461029757806316a4be6f146102aa575b600080fd5b61026061025b366004612e40565b6105c5565b60405190151581526020015b60405180910390f35b610288610283366004612e98565b6105f0565b005b6000546102609060ff1681565b6102886102a5366004612ecb565b61070c565b600a546102bd906001600160401b031681565b6040516001600160401b03909116815260200161026c565b6004546102e8906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b61032461030e366004612ecb565b6000908152600160208190526040909120015490565b60405190815260200161026c565b610288610340366004612ee4565b61072a565b610288610353366004612eff565b610830565b610324600b5481565b61032460065481565b6003546102e8906001600160a01b031681565b61028861038b366004612eff565b61085b565b6102e861039e366004612ecb565b600e602052600090815260409020546001600160a01b031681565b6102886103c736600461319f565b6108d9565b610324600d5481565b6103e86103e3366004613237565b610b70565b60405161026c9190613273565b610288610403366004612ecb565b610b81565b6103246104163660046132a5565b610bae565b610288610429366004612ecb565b610bc1565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b61032460085481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102e86104933660046132eb565b610c2f565b6102606104a6366004612eff565b610c47565b610324600081565b610324600c5481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102886104f1366004613237565b610c72565b610324610504366004613237565b6111ff565b61028861051736600461330d565b611402565b61032460008051602061366d83398151915281565b61028861053f366004613337565b6114c2565b610288610552366004612ecb565b6000908152600e6020526040902080546001600160a01b03191633179055565b61032460075481565b610324610589366004612ecb565b6115e9565b61028861059c366004612eff565b611600565b61032460095481565b6102886105b8366004612ecb565b600d55565b610260611626565b60006001600160e01b03198216635a05180f60e01b14806105ea57506105ea826116c1565b92915050565b60006105fd600143613389565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106b25760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061366d833981519152610724816116f6565b50600655565b60008051602061366d833981519152610742816116f6565b6000826001600160401b03161161079b5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016106a9565b6107a660018361339c565b82166001600160401b031660001461080c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016106a9565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b6000828152600160208190526040909120015461084c816116f6565b6108568383611703565b505050565b6001600160a01b03811633146108cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106a9565b6108d58282611725565b5050565b815160a08201511461092d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016106a9565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109a05760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016106a9565b600754600c54106109f35760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016106a9565b6000610100610a04610400826133bc565b610a0e91906133f1565b610100610a1d610400826133bc565b610a2791906133f1565b8360600151610a3691906133f1565b610a4091906133bc565b6060840151909150610a529082611747565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac5919061341c565b90506000610100610ad961040060046133bc565b610ae391906133f1565b8560800151610af29190613476565b90508082600001516001600160801b0316108015610b1d57508082602001516001600160801b031610155b610b695760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016106a9565b5050505050565b610b78612e03565b6105ea8261198b565b60008051602061366d833981519152610b99816116f6565b6008829055600b546000036108d55750600755565b6000610bba8383611a9f565b9392505050565b60008051602061366d833981519152610bd9816116f6565b60008211610c295760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016106a9565b50600955565b6000828152600260205260408120610bba9083611d12565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610cbc5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016106a9565b6040808201516000908152600e60205220546001600160a01b031680610d245760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016106a9565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190613489565b9050600b5481600001511015610df95760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016106a9565b600b548151118015610e0d57506000600b54115b15610e3257600754600c541015610e2657610e26611d1e565b6000600c556008546007555b610e3c83826108d9565b600a5460608401516001600160401b0390911690610e5990611d30565b1115610eb65760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016106a9565b610ebe612e03565b7f000000000000000000000000000000000000000000000000000000000000000015610ef457610eed8461198b565b9050610efb565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610f84576000610f2d8583611a9f565b905082604001518114610f825760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016106a9565b505b610f8c612e03565b90506000610f99856111ff565b90506000610fb884606001518760600151611d7a90919063ffffffff16565b9050604081600d54610fca91906133f1565b901b82111561101b5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016106a9565b60008281526005602052604090205460ff161561107a5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016106a9565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c6101006110b3610400806133bc565b6110bf906104006133bc565b6110ca9060086133bc565b6110d491906133f1565b88608001516110e391906133f1565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561113557600080fd5b505af1158015611149573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906111b0908490613476565b9091555050600754600c5410156111c957505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006111f7576111f784611eba565b505050505050565b60408101516000906112535760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016106a9565b6000604051806080016040528084604001518152602001846020015181526020018460000151815260200161128b8560600151611ef3565b90529050600061129a82611f5b565b905060006112ab61040060406133bc565b6112b96104006101006133bc565b6112c391906133f1565b6112d061040060046133bc565b6112de6104006101006133bc565b6112e891906133f1565b6112f291906133f1565b8560a001516113019190613502565b905061130b612e03565b611313612e22565b6113228760e001518486611fd3565b9250905061010061133661040060046133bc565b61134091906133f1565b8760a0015161134f91906133bc565b61138c826040516020016113639190613516565b6040516020818303038152906040528051906020012089606001516121c990919063ffffffff16565b6113969190613476565b8760800151146113e85760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016106a9565b6113f78760a0015185846122cf565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146114685760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016106a9565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156115215760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016106a9565b6000805460ff1916600117815561153e906115393390565b611703565b61155660008051602061366d83398151915233611703565b611562836000196133f1565b600d557f00000000000000000000000000000000000000000000000000000000000000001561159257600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b60008181526002602052604081206105ea90612551565b6000828152600160208190526040909120015461161c816116f6565b6108568383611725565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190613489565b9050600b54816000015111806116bb5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b14806105ea57506301ffc9a760e01b6001600160e01b03198316146105ea565b611700813361255b565b50565b61170d82826125b4565b6000828152600260205260409020610856908261261f565b61172f8282612634565b6000828152600260205260409020610856908261269b565b610100611756610400806133bc565b611762906104006133bc565b61176d9060086133bc565b61177791906133f1565b82516117839190613502565b156117d05760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016106a9565b6020820151825182916117e291613476565b11156118285760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016106a9565b600061183383611d30565b610100611842610400806133bc565b61184e906104006133bc565b61185a906104006133bc565b6118659060086133bc565b61186f91906133f1565b61187991906133bc565b905080836020015111156118c75760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016106a9565b60006118d383836126b0565b905080846020015110156119225760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016106a9565b83606001518460400151166001600160401b03166000146119855760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016106a9565b50505050565b611993612e03565b60408083015160c0840151608085015192516119c393906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119f661040060046133bc565b611a0091906133f1565b811015611a995760e0830151611a17600183613389565b60808110611a2757611a2761353e565b6020020151604051602001611a3e91815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a6a57611a6a61353e565b602002015118828260808110611a8257611a8261353e565b6020020152611a92600182613476565b90506119e7565b50919050565b6000805b6020611ab261040060046133bc565b611abc91906133f1565b811015611b0a576101006020820284012080848360808110611ae057611ae061353e565b602002018181525050506020610100611af991906133f1565b611b039082613476565b9050611aa3565b506000611b1a60206101006133f1565b90505b6020611b2c61040060046133bc565b611b3691906133f1565b811015611c095760005b6020611b4f61040060046133bc565b611b5991906133f1565b811015611c00576000848260808110611b7457611b7461353e565b60200201519050600085611b888585613476565b60808110611b9857611b9861353e565b602002015190508181604051602001611bbb929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611be357611be361353e565b602002015250611bf99050600183901b82613476565b9050611b40565b5060011b611b1d565b508151611c14612e03565b92506000610100611c2861040060046133bc565b611c3291906133f1565b8560800151611c4191906133f1565b905060005b85610100015151811015611d0857600080611c62600285613502565b600003611c92578491508761010001518381518110611c8357611c8361353e565b60200260200101519050611cb7565b8761010001518381518110611ca957611ca961353e565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611cf091906133f1565b93505050600181611d019190613476565b9050611c46565b5090949350505050565b6000610bba83836126c6565b611d2e6001600160f01b036126f0565b565b606081015160009019815b6001600160401b03821615611d6b57611d5560018361339c565b9091169080611d6381613554565b915050611d3b565b600160ff9091161b9392505050565b600080610100611d8c610400806133bc565b611d98906104006133bc565b611da4906104006133bc565b611daf9060086133bc565b611db991906133f1565b8311611dc55782611e01565b610100611dd4610400806133bc565b611de0906104006133bc565b611dec906104006133bc565b611df79060086133bc565b611e0191906133f1565b90506000611e0e85611d30565b611e1890856133f1565b90506000610100611e2b610400806133bc565b611e37906104006133bc565b611e43906104006133bc565b611e4e9060086133bc565b611e5891906133f1565b8211611e645781611ea0565b610100611e73610400806133bc565b611e7f906104006133bc565b611e8b906104006133bc565b611e969060086133bc565b611ea091906133f1565b9050611eb081604085901b6133f1565b9695505050505050565b6000816020015143611ecc9190613389565b905060006010600d54901c90506000611ee88284600654612790565b9050611985816126f0565b60008160000151826020015183604001518460600151604051602001611f3e949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611f63612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516105ea938593909290916080600161283f565b611fdb612e22565b611fe3612e03565b60005b848110156120415760005b604061200061040060046133bc565b61200a91906133f1565b81101561202e5761201a856128fe565b9450612027600182613476565b9050611ff1565b5061203a600182613476565b9050611fe6565b5060005b602061205461040060046133bc565b61205e91906133f1565b8110156120fe5761206e846128fe565b93508581608081106120825761208261353e565b602002015184511882826080811061209c5761209c61353e565b6020020152856120ad826001613476565b608081106120bd576120bd61353e565b6020020151846001602002015118826120d7836001613476565b608081106120e7576120e761353e565b60200201526120f7600282613476565b9050612045565b50600061210c856001613476565b90505b61211c61040060406133bc565b61212a6104006101006133bc565b61213491906133f1565b61214161040060046133bc565b61214f6104006101006133bc565b61215991906133f1565b61216391906133f1565b8110156121bd5760005b604061217c61040060046133bc565b61218691906133f1565b8110156121aa57612196856128fe565b94506121a3600182613476565b905061216d565b506121b6600182613476565b905061210f565b50829150935093915050565b6000806101006121db610400826133bc565b6121e591906133f1565b84602001516121f491906133f1565b6121fe9084613502565b60408501516060860151602087015192935083161790610100612223610400826133bc565b61222d91906133f1565b612240906001600160401b0384166133bc565b111561228e5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016106a9565b61010061229d610400826133bc565b6122a791906133f1565b6122ba906001600160401b0383166133bc565b85516122c69190613476565b95945050505050565b60006122d9612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161233f918391889190600060808161283f565b905060005b60046020612354610400836133bc565b61235e91906133f1565b6123689190613389565b811015612419576000816004016020026080019050612403838684608081106123935761239361353e565b6020020151876123a4866001613476565b608081106123b4576123b461353e565b6020020151886123c5876002613476565b608081106123d5576123d561353e565b6020020151896123e6886003613476565b608081106123f6576123f661353e565b602002015186600061283f565b92506124129050600482613476565b9050612344565b5061254781846004602061242f610400836133bc565b61243991906133f1565b6124439190613389565b608081106124535761245361353e565b60200201518560036020610400600461246c91906133bc565b61247691906133f1565b6124809190613389565b608081106124905761249061353e565b6020020151866002602061040060046124a991906133bc565b6124b391906133f1565b6124bd9190613389565b608081106124cd576124cd61353e565b6020020151876001602061040060046124e691906133bc565b6124f091906133f1565b6124fa9190613389565b6080811061250a5761250a61353e565b60200201516020610400600461252091906133bc565b61252a91906133f1565b6125359060206133bc565b612540906080613476565b600161283f565b5195945050505050565b60006105ea825490565b6125658282610c47565b6108d5576125728161296b565b61257d83602061297d565b60405160200161258e929190613597565b60408051601f198184030181529082905262461bcd60e51b82526106a99160040161360c565b6125be8282610c47565b6108d55760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bba836001600160a01b038416612b18565b61263e8282610c47565b156108d55760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bba836001600160a01b038416612b67565b60008183106126bf5781610bba565b5090919050565b60008260000182815481106126dd576126dd61353e565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461270c600183613389565b61271690866133bc565b6127209190613476565b61272a91906133f1565b90506127378360026133bc565b81111561274c576127498360026133bc565b90505b6127576002846133f1565b81101561276c576127696002846133f1565b90505b6001600160f01b0381111561278557506001600160f01b035b60101b600d55505050565b60008080600019858709858702925082811083820303915050806000036127ca578382816127c0576127c06133db565b0492505050610bba565b8084116127d657600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b612847612e22565b600c600061285485612c61565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa6128f057600080fd5b505050979650505050505050565b612906612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516105ea9183916000806040600161283f565b60606105ea6001600160a01b03831660145b6060600061298c8360026133bc565b612997906002613476565b6001600160401b038111156129ae576129ae612f22565b6040519080825280601f01601f1916602001820160405280156129d8576020820181803683370190505b509050600360fc1b816000815181106129f3576129f361353e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612a2257612a2261353e565b60200101906001600160f81b031916908160001a9053506000612a468460026133bc565b612a51906001613476565b90505b6001811115612ac9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612a8557612a8561353e565b1a60f81b828281518110612a9b57612a9b61353e565b60200101906001600160f81b031916908160001a90535060049490941c93612ac28161363f565b9050612a54565b508315610bba5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106a9565b6000818152600183016020526040812054612b5f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105ea565b5060006105ea565b60008181526001830160205260408120548015612c50576000612b8b600183613389565b8554909150600090612b9f90600190613389565b9050818114612c04576000866000018281548110612bbf57612bbf61353e565b9060005260206000200154905080876000018481548110612be257612be261353e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c1557612c15613656565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105ea565b60009150506105ea565b5092915050565b612c69612e22565b62010000821015612cad57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612ced57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612c95565b68010000000000000000821015612d0757612c9582612d9d565b600160801b821015612d57576001600160401b038216604083901c612d2b82612d9d565b6001600160c01b0319168352612d4081612d9d565b6001600160c01b031916602084015250612d989050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016106a9565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612e5257600080fd5b81356001600160e01b031981168114610bba57600080fd5b80356001600160a01b0381168114612d9857600080fd5b80356001600160401b0381168114612d9857600080fd5b60008060408385031215612eab57600080fd5b612eb483612e6a565b9150612ec260208401612e81565b90509250929050565b600060208284031215612edd57600080fd5b5035919050565b600060208284031215612ef657600080fd5b610bba82612e81565b60008060408385031215612f1257600080fd5b82359150612ec260208401612e6a565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612f5b57612f5b612f22565b60405290565b60405160c081016001600160401b0381118282101715612f5b57612f5b612f22565b600060808284031215612f9557600080fd5b604051608081018181106001600160401b0382111715612fb757612fb7612f22565b80604052508091508235815260208301356020820152612fd960408401612e81565b6040820152612fea60608401612e81565b60608201525092915050565b600082601f83011261300757600080fd5b6040516110008082018281106001600160401b038211171561302b5761302b612f22565b6040528301818582111561303e57600080fd5b845b82811015613058578035825260209182019101613040565b509195945050505050565b600082601f83011261307457600080fd5b813560206001600160401b038083111561309057613090612f22565b8260051b604051601f19603f830116810181811084821117156130b5576130b5612f22565b6040529384528581018301938381019250878511156130d357600080fd5b83870191505b848210156113f7578135835291830191908301906130d9565b6000611160828403121561310557600080fd5b61310d612f38565b90508135815260208201356020820152604082013560408201526131348360608401612f83565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613168846101408501612ff6565b60e08301526111408301356001600160401b0381111561318757600080fd5b61319385828601613063565b82840152505092915050565b60008082840360e08112156131b357600080fd5b83356001600160401b038111156131c957600080fd5b6131d5868287016130f2565b93505060c0601f19820112156131ea57600080fd5b506131f3612f61565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561324957600080fd5b81356001600160401b0381111561325f57600080fd5b61326b848285016130f2565b949350505050565b6110008101818360005b608081101561329c57815183526020928301929091019060010161327d565b50505092915050565b60008061102083850312156132b957600080fd5b82356001600160401b038111156132cf57600080fd5b6132db858286016130f2565b925050612ec28460208501612ff6565b600080604083850312156132fe57600080fd5b50508035926020909101359150565b6000806040838503121561332057600080fd5b61332983612e6a565b946020939093013593505050565b60008060006060848603121561334c57600080fd5b8335925061335c60208501612e6a565b915061336a60408501612e6a565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b818103818111156105ea576105ea613373565b6001600160401b03828116828216039080821115612c5a57612c5a613373565b60008160001904831182151516156133d6576133d6613373565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613400576134006133db565b500490565b80516001600160801b0381168114612d9857600080fd5b60006040828403121561342e57600080fd5b604051604081018181106001600160401b038211171561345057613450612f22565b60405261345c83613405565b815261346a60208401613405565b60208201529392505050565b808201808211156105ea576105ea613373565b600060c0828403121561349b57600080fd5b60405160c081018181106001600160401b03821117156134bd576134bd612f22565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600082613511576135116133db565b500690565b60408101818360005b600281101561329c57815183526020928301929091019060010161351f565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361356a5761356a613373565b60010192915050565b60005b8381101561358e578181015183820152602001613576565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516135cf816017850160208801613573565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613600816028840160208801613573565b01602801949350505050565b602081526000825180602084015261362b816040850160208701613573565b601f01601f19169190910160400192915050565b60008161364e5761364e613373565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a26469706673582212209dab7492675acbf9c807415e450f985cb300dc9ae83babc363c910896d1cfe3b64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/README.md b/storage-contracts-abis/README.md new file mode 100644 index 0000000..0177d21 --- /dev/null +++ b/storage-contracts-abis/README.md @@ -0,0 +1,3 @@ +This folder is maintained by the script `./scripts/update_abis.sh <0g-storage-contracts-path>`. Please do not modify it manually. The default value for `0g-storage-contracts-path` is `../0g-storage-contracts`. + +When running the script, ensure that there are no uncommitted changes in the storage path and that `yarn` is already installed. \ No newline at end of file diff --git a/tests/mine_test.py b/tests/mine_test.py index f93a8d3..5a41d87 100755 --- a/tests/mine_test.py +++ b/tests/mine_test.py @@ -45,14 +45,14 @@ class MineTest(TestFramework): self.log.info("Submission done, current epoch is %d", start_epoch) self.log.info("Wait for the first mine context release") - wait_until(lambda: int(blockchain.eth_blockNumber(), 16) >= start_epoch + 1, timeout=180) + wait_until(lambda: self.contract.epoch() >= start_epoch + 1, timeout=180) self.contract.update_context() self.log.info("Wait for the first mine answer") wait_until(lambda: self.mine_contract.last_mined_epoch() == start_epoch + 1 and not self.mine_contract.can_submit(), timeout=180) self.log.info("Wait for the second mine context release") - wait_until(lambda: int(blockchain.eth_blockNumber(), 16) >= start_epoch + 2, timeout=180) + wait_until(lambda: self.contract.epoch() >= start_epoch + 2, timeout=180) self.contract.update_context() self.log.info("Wait for the second mine answer") @@ -60,7 +60,7 @@ class MineTest(TestFramework): self.nodes[0].miner_stop() self.log.info("Wait for the third mine context release") - wait_until(lambda: int(blockchain.eth_blockNumber(), 16) >= start_epoch + 3, timeout=180) + wait_until(lambda: self.contract.epoch() >= start_epoch + 3, timeout=180) self.contract.update_context() self.log.info("Submit the second data chunk") diff --git a/tests/mine_with_market_test.py b/tests/mine_with_market_test.py index e5fa156..db2702a 100755 --- a/tests/mine_with_market_test.py +++ b/tests/mine_with_market_test.py @@ -50,6 +50,7 @@ class MineTest(TestFramework): SECTORS_PER_PRICING = int(8 * ( 2 ** 30 ) / 256) + self.log.info("Submit the actual data chunk (256 MB)") self.submit_data(b"\x11", int(SECTORS_PER_PRICING / 32)) @@ -74,7 +75,7 @@ class MineTest(TestFramework): firstReward = rewards[0].args.amount self.log.info("Received reward %d Gwei", firstReward / (10**9)) - self.reward_contract.transfer(10000 * 10 ** 18) + self.reward_contract.donate(10000 * 10 ** 18) self.log.info("Donation Done") self.log.info("Submit the data hash only (8 GB)") self.submit_data(b"\x11", int(SECTORS_PER_PRICING), no_submit=True) diff --git a/tests/sync_test.py b/tests/sync_test.py index cb16fdf..074b01f 100755 --- a/tests/sync_test.py +++ b/tests/sync_test.py @@ -29,6 +29,9 @@ class SyncTest(TestFramework): client1 = self.nodes[0] client2 = self.nodes[1] + # stop client2, preventing it from receiving AnnounceFile + client2.shutdown() + # Create submission chunk_data = random.randbytes(256 * 1024) data_root = self.__create_submission(chunk_data) @@ -41,16 +44,22 @@ class SyncTest(TestFramework): segments = submit_data(client1, chunk_data) self.log.info("segments: %s", [(s["root"], s["index"], s["proof"]) for s in segments]) wait_until(lambda: client1.zgs_get_file_info(data_root)["finalized"]) - - # File should not be auto sync on node 2 + + # restart client2 + client2.start() + client2.wait_for_rpc_connection() + + # File should not be auto sync on node 2 and there is no cached file locations wait_until(lambda: client2.zgs_get_file_info(data_root) is not None) time.sleep(3) assert_equal(client2.zgs_get_file_info(data_root)["finalized"], False) + assert(client2.admin_get_file_location(0) is None) # Trigger file sync by rpc assert(client2.admin_start_sync_file(0) is None) wait_until(lambda: client2.sync_status_is_completed_or_unknown(0)) wait_until(lambda: client2.zgs_get_file_info(data_root)["finalized"]) + assert(client2.admin_get_file_location(0) is not None) # Validate data assert_equal( diff --git a/tests/test_framework/blockchain_node.py b/tests/test_framework/blockchain_node.py index 799e156..0fbe1a5 100644 --- a/tests/test_framework/blockchain_node.py +++ b/tests/test_framework/blockchain_node.py @@ -267,7 +267,7 @@ class BlockchainNode(TestNode): def deploy_contract(name, args=None): if args is None: args = [] - contract_interface = load_contract_metadata(base_path=self.contract_path, name=name) + contract_interface = load_contract_metadata(path=self.contract_path, name=name) contract = w3.eth.contract( abi=contract_interface["abi"], bytecode=contract_interface["bytecode"], @@ -303,7 +303,7 @@ class BlockchainNode(TestNode): mine_contract.functions.setTargetSubmissions(2).transact(TX_PARAMS) self.log.debug("Mine Initialized") - flow_initialize_hash = (flow_contract.get_function_by_signature('initialize(address)'))(dummy_market_contract.address).transact(TX_PARAMS) + flow_initialize_hash = flow_contract.functions.initialize(dummy_market_contract.address).transact(TX_PARAMS) self.log.debug("Flow Initialized") self.wait_for_transaction_receipt(w3, flow_initialize_hash) @@ -340,9 +340,10 @@ class BlockchainNode(TestNode): self.log.debug("Market Initialized") reward_contract.functions.initialize(market_contract.address, mine_contract.address).transact(TX_PARAMS) + reward_contract.functions.setBaseReward(10 ** 18).transact(TX_PARAMS) self.log.debug("Reward Initialized") - flow_initialize_hash = (flow_contract.get_function_by_signature('initialize(address)'))(market_contract.address).transact(TX_PARAMS) + flow_initialize_hash = flow_contract.functions.initialize(market_contract.address).transact(TX_PARAMS) self.log.debug("Flow Initialized") self.wait_for_transaction_receipt(w3, flow_initialize_hash) diff --git a/tests/test_framework/contract_proxy.py b/tests/test_framework/contract_proxy.py index aaeea94..8269b24 100644 --- a/tests/test_framework/contract_proxy.py +++ b/tests/test_framework/contract_proxy.py @@ -28,6 +28,14 @@ class ContractProxy: contract = self._get_contract(node_idx) return getattr(contract.functions, fn_name)(**args).transact(copy(TX_PARAMS)) + + def _send_payable(self, fn_name, node_idx, value, **args): + assert node_idx < len(self.blockchain_nodes) + + contract = self._get_contract(node_idx) + tx_params = copy(TX_PARAMS) + tx_params["value"] = value + return getattr(contract.functions, fn_name)(**args).transact(tx_params) def _logs(self, event_name, node_idx, **args): assert node_idx < len(self.blockchain_nodes) @@ -66,7 +74,6 @@ class FlowContractProxy(ContractProxy): contract.w3, tx_hash, parent_hash=parent_hash ) if receipt["status"] != 1: - print(receipt) assert_equal(receipt["status"], 1) return tx_hash @@ -98,6 +105,12 @@ class MineContractProxy(ContractProxy): -class IRewardContractProxy(ContractProxy): +class RewardContractProxy(ContractProxy): def reward_distributes(self, node_idx=0): - return self._logs("DistributeReward", node_idx) \ No newline at end of file + return self._logs("DistributeReward", node_idx) + + def donate(self, value, node_idx = 0): + return self._send_payable("donate", node_idx, value) + + def base_reward(self, node_idx = 0): + return self._call("baseReward", node_idx) \ No newline at end of file diff --git a/tests/test_framework/contracts.py b/tests/test_framework/contracts.py index 457478e..8df3811 100644 --- a/tests/test_framework/contracts.py +++ b/tests/test_framework/contracts.py @@ -1,11 +1,10 @@ -from os.path import join from pathlib import Path import json from web3 import Web3 -def load_contract_metadata(base_path: str, name: str): - path = Path(join(base_path, "artifacts")) +def load_contract_metadata(path: str, name: str): + path = Path(path) try: found_file = next(path.rglob(f"{name}.json")) return json.loads(open(found_file, "r").read()) diff --git a/tests/test_framework/test_framework.py b/tests/test_framework/test_framework.py index f369ad1..c7c4619 100644 --- a/tests/test_framework/test_framework.py +++ b/tests/test_framework/test_framework.py @@ -15,7 +15,7 @@ from pathlib import Path from eth_utils import encode_hex from test_framework.bsc_node import BSCNode -from test_framework.contract_proxy import FlowContractProxy, MineContractProxy, IRewardContractProxy +from test_framework.contract_proxy import FlowContractProxy, MineContractProxy, RewardContractProxy from test_framework.zgs_node import ZgsNode from test_framework.blockchain_node import BlockChainNodeType from test_framework.conflux_node import ConfluxNode, connect_sample_nodes @@ -175,7 +175,7 @@ class TestFramework: contract, tx_hash, mine_contract, reward_contract = self.blockchain_nodes[0].setup_contract(self.enable_market, self.mine_period, self.lifetime_seconds) self.contract = FlowContractProxy(contract, self.blockchain_nodes) self.mine_contract = MineContractProxy(mine_contract, self.blockchain_nodes) - self.reward_contract = IRewardContractProxy(reward_contract, self.blockchain_nodes) + self.reward_contract = RewardContractProxy(reward_contract, self.blockchain_nodes) for node in self.blockchain_nodes[1:]: @@ -258,7 +258,7 @@ class TestFramework: dest="contract", default=os.path.join( __file_path__, - "../../0g-storage-contracts/", + "../../storage-contracts-abis/", ), type=str, ) diff --git a/tests/test_framework/zgs_node.py b/tests/test_framework/zgs_node.py index f3b5f7c..06e3c0c 100644 --- a/tests/test_framework/zgs_node.py +++ b/tests/test_framework/zgs_node.py @@ -115,6 +115,9 @@ class ZgsNode(TestNode): def sync_status_is_completed_or_unknown(self, tx_seq): status = self.rpc.admin_getSyncStatus([tx_seq]) return status == "Completed" or status == "unknown" + + def admin_get_file_location(self, tx_seq, all_shards = True): + return self.rpc.admin_getFileLocation([tx_seq, all_shards]) def clean_data(self): shutil.rmtree(os.path.join(self.data_dir, "db")) diff --git a/version-meld/discv5/Cargo.lock b/version-meld/discv5/Cargo.lock index 9d63d70..4366dbd 100644 --- a/version-meld/discv5/Cargo.lock +++ b/version-meld/discv5/Cargo.lock @@ -108,37 +108,36 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + [[package]] name = "base64" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitvec" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding", "generic-array", ] @@ -151,12 +150,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "bs58" version = "0.4.0" @@ -215,9 +208,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.5.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279bc8fc53f788a75c7804af68237d1fce02cde1e275a886a4b320604dc2aeda" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "cpufeatures" @@ -235,12 +228,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "crypto-common" -version = "0.1.1" +name = "crypto-bigint" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", + "rand_core 0.6.3", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", ] [[package]] @@ -253,16 +259,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "ctr" version = "0.8.0" @@ -293,12 +289,12 @@ checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" [[package]] name = "der" -version = "0.3.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eeb9d92785d1facb50567852ce75d0858630630e7eabea59cf7eb7474051087" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", - "typenum", + "zeroize", ] [[package]] @@ -312,13 +308,13 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.1" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.0", "crypto-common", - "generic-array", + "subtle", ] [[package]] @@ -328,7 +324,7 @@ dependencies = [ "aes", "aes-gcm", "arrayvec", - "digest 0.10.1", + "digest 0.10.7", "enr", "env_logger 0.9.0", "fnv", @@ -347,7 +343,7 @@ dependencies = [ "rand_core 0.6.3", "rand_xorshift", "rlp", - "sha2", + "sha2 0.10.8", "simple_logger", "smallvec", "tokio", @@ -361,13 +357,13 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.11.1" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d33b390ab82f2e1481e331dbd0530895640179d2128ef9a79cc690b78d1eba" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", "elliptic-curve", - "hmac 0.11.0", + "rfc6979", "signature", ] @@ -390,7 +386,7 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2", + "sha2 0.9.8", "zeroize", ] @@ -402,25 +398,29 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "elliptic-curve" -version = "0.9.12" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13e9b0c3c4170dcc2a12783746c4205d98e18957f57854251eea3f9750fe005" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "bitvec", + "base16ct", + "crypto-bigint", + "der", + "digest 0.10.7", "ff", "generic-array", "group", "pkcs8", "rand_core 0.6.3", + "sec1", "subtle", "zeroize", ] [[package]] name = "enr" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809869a1328bfb586b48c9c0f87761c47c41793a85bcb06f66074a87cafc1bcd" +checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" dependencies = [ "base64", "bs58", @@ -461,11 +461,10 @@ dependencies = [ [[package]] name = "ff" -version = "0.9.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a4d941a5b7c2a75222e2d44fcdf634a67133d9db31e177ae5ff6ecda852bfe" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "bitvec", "rand_core 0.6.3", "subtle", ] @@ -492,12 +491,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "futures" version = "0.3.19" @@ -555,7 +548,7 @@ checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -638,9 +631,9 @@ dependencies = [ [[package]] name = "group" -version = "0.9.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3c1e8b4f1ca07e6605ea1be903a5f6956aec5c8a67fd44d56076631675ed8" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core 0.6.3", @@ -697,12 +690,11 @@ checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] name = "hkdf" -version = "0.11.0" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "digest 0.9.0", - "hmac 0.11.0", + "hmac 0.12.1", ] [[package]] @@ -711,18 +703,17 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "crypto-mac 0.8.0", + "crypto-mac", "digest 0.9.0", ] [[package]] name = "hmac" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", + "digest 0.10.7", ] [[package]] @@ -798,21 +789,24 @@ dependencies = [ [[package]] name = "k256" -version = "0.8.1" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3e8e491ed22bc161583a1c77e42313672c483eba6bd9d7afec0f1131d0b9ce" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sha2", + "sha2 0.10.8", ] [[package]] name = "keccak" -version = "0.1.0" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] [[package]] name = "lazy_static" @@ -852,7 +846,7 @@ dependencies = [ "rand 0.8.4", "ring", "rw-stream-sink", - "sha2", + "sha2 0.9.8", "smallvec", "thiserror", "unsigned-varint", @@ -875,7 +869,7 @@ dependencies = [ "libsecp256k1-gen-genmult", "rand 0.8.4", "serde", - "sha2", + "sha2 0.9.8", "typenum", ] @@ -1005,7 +999,7 @@ dependencies = [ "digest 0.9.0", "generic-array", "multihash-derive", - "sha2", + "sha2 0.9.8", "unsigned-varint", ] @@ -1019,7 +1013,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.80", "synstructure", ] @@ -1141,7 +1135,7 @@ checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -1152,7 +1146,7 @@ checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -1169,9 +1163,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" -version = "0.6.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c2f795bc591cb3384cb64082a578b89207ac92bb89c9d98c1ea2ace7cd8110" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ "der", "spki", @@ -1214,7 +1208,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.80", "version_check", ] @@ -1231,11 +1225,11 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.30" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1278,7 +1272,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -1305,19 +1299,13 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.10" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" - [[package]] name = "rand" version = "0.7.3" @@ -1452,6 +1440,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint", + "hmac 0.12.1", + "zeroize", +] + [[package]] name = "ring" version = "0.16.20" @@ -1500,6 +1499,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "serde" version = "1.0.130" @@ -1517,7 +1530,7 @@ checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -1534,15 +1547,24 @@ dependencies = [ ] [[package]] -name = "sha3" -version = "0.9.1" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", "keccak", - "opaque-debug", ] [[package]] @@ -1565,11 +1587,11 @@ dependencies = [ [[package]] name = "signature" -version = "1.3.1" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.9.0", + "digest 0.10.7", "rand_core 0.6.3", ] @@ -1606,10 +1628,11 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spki" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dae7e047abc519c96350e9484a96c6bf1492348af912fd3446dd2dc323f6268" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ + "base64ct", "der", ] @@ -1636,6 +1659,17 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -1644,16 +1678,10 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", "unicode-xid", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tempfile" version = "3.2.0" @@ -1694,15 +1722,16 @@ checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] name = "thread_local" -version = "1.1.3" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ + "cfg-if", "once_cell", ] @@ -1765,7 +1794,7 @@ checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -1824,7 +1853,7 @@ checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", ] [[package]] @@ -1889,6 +1918,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -1989,7 +2024,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 1.0.80", "wasm-bindgen-shared", ] @@ -2011,7 +2046,7 @@ checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.80", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2074,29 +2109,22 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "zeroize" -version = "1.4.3" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.2.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", - "synstructure", + "syn 2.0.72", ]