From 3ffffb92954da6ffe5391bd13385c571c1db53db Mon Sep 17 00:00:00 2001 From: dvilela Date: Thu, 13 Jun 2024 22:54:35 +0200 Subject: [PATCH 1/7] feat: track tokenomics --- .../dvilela/agents/tsunami/aea-config.yaml | 2 + .../contracts/olas_tokenomics/__init__.py | 20 + .../build/ServiceRegistry.json | 1988 +++++++++++++++++ .../build/ServiceRegistryL2.json | 1899 ++++++++++++++++ .../contracts/olas_tokenomics/contract.py | 98 + .../contracts/olas_tokenomics/contract.yaml | 26 + .../contracts/olas_treasury/__init__.py | 20 + .../olas_treasury/build/ServiceRegistry.json | 1988 +++++++++++++++++ .../build/ServiceRegistryL2.json | 1899 ++++++++++++++++ .../contracts/olas_treasury/contract.py | 98 + .../contracts/olas_treasury/contract.yaml | 26 + .../dvilela/services/tsunami/service.yaml | 2 + .../dvilela/skills/tsunami_abci/behaviours.py | 25 +- .../dvilela/skills/tsunami_abci/models.py | 6 + .../dvilela/skills/tsunami_abci/prompts.py | 6 + .../dvilela/skills/tsunami_abci/skill.yaml | 2 + .../skills/tsunami_chained_abci/skill.yaml | 2 + 17 files changed, 8105 insertions(+), 2 deletions(-) create mode 100644 packages/dvilela/contracts/olas_tokenomics/__init__.py create mode 100644 packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json create mode 100644 packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json create mode 100644 packages/dvilela/contracts/olas_tokenomics/contract.py create mode 100644 packages/dvilela/contracts/olas_tokenomics/contract.yaml create mode 100644 packages/dvilela/contracts/olas_treasury/__init__.py create mode 100644 packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json create mode 100644 packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json create mode 100644 packages/dvilela/contracts/olas_treasury/contract.py create mode 100644 packages/dvilela/contracts/olas_treasury/contract.yaml diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index 3128fb4..95e1ed1 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -218,6 +218,8 @@ models: agent_registry_address_ethereum: ${str:0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112} component_registry_address_ethereum: ${str:0x15bd56669F57192a97dF41A2aa8f4403e9491776} service_registry_address_gnosis: ${str:0x9338b5153AE39BB89f50468E608eD9d764B755fD} + treasury_address_ethereum: ${str:0xa0DA53447C0f6C4987964d8463da7e6628B30f82} + tokenomics_address_ethereum: ${str:0xc096362fa6f4A4B1a9ea68b1043416f3381ce300} initial_block_ethereum: ${int:19423661} initial_block_gnosis: ${int:33047920} twitter_credentials: ${str:{}} diff --git a/packages/dvilela/contracts/olas_tokenomics/__init__.py b/packages/dvilela/contracts/olas_tokenomics/__init__.py new file mode 100644 index 0000000..340fbe3 --- /dev/null +++ b/packages/dvilela/contracts/olas_tokenomics/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2022 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""This module contains the support resources for the tokenomics contract.""" diff --git a/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json b/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json new file mode 100644 index 0000000..cfb4e93 --- /dev/null +++ b/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json @@ -0,0 +1,1988 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ServiceRegistry", + "sourceName": "contracts/ServiceRegistry.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "_baseURI", + "type": "string" + }, + { + "internalType": "address", + "name": "_agentRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ActivateRegistration", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "BaseURIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "CreateMultisigWithAgents", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "CreateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "DeployService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Drain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + } + ], + "name": "DrainerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorUnbond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Refund", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "agentInstance", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "RegisterInstance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "TerminateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "name": "UpdateService", + "type": "event" + }, + { + "inputs": [], + "name": "CID_PREFIX", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "activateRegistration", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "agentRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDrainer", + "type": "address" + } + ], + "name": "changeDrainer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "changeManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bool", + "name": "permission", + "type": "bool" + } + ], + "name": "changeMultisigPermission", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "multisigImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drain", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drainer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentInstances", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentParams", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentIds", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "getInstancesForAgentId", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getOperatorBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getPreviousHashes", + "outputs": [ + { + "internalType": "uint256", + "name": "numHashes", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "configHashes", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getService", + "outputs": [ + { + "components": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistry.ServiceState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "internalType": "struct ServiceRegistry.Service", + "name": "service", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IRegistry.UnitType", + "name": "unitType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getUnitIdsOfService", + "outputs": [ + { + "internalType": "uint256", + "name": "numUnitIds", + "type": "uint256" + }, + { + "internalType": "uint32[]", + "name": "unitIds", + "type": "uint32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAgentInstanceOperators", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapConfigHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapMultisigs", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "instance", + "type": "address" + }, + { + "internalType": "uint32", + "name": "agentId", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdOperatorBalances", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentParams", + "outputs": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceIdSetAgentIds", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceIdSetComponentIds", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServices", + "outputs": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistry.ServiceState", + "name": "state", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "name": "registerAgents", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "bURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint96[]", + "name": "amounts", + "type": "uint96[]" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "slash", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slashedFunds", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "terminate", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "unbond", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "update", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040526001600a553480156200001657600080fd5b506040516200636638038062006366833981016040819052620000399162000160565b83836000620000498382620002a2565b506001620000588282620002a2565b50600891506200006b90508382620002a2565b506001600160a01b03166080525050600680546001600160a01b03191633179055506200036e565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000bb57600080fd5b81516001600160401b0380821115620000d857620000d862000093565b604051601f8301601f19908116603f0116810190828211818310171562000103576200010362000093565b816040528381526020925086838588010111156200012057600080fd5b600091505b8382101562000144578582018301518183018401529082019062000125565b83821115620001565760008385830101525b9695505050505050565b600080600080608085870312156200017757600080fd5b84516001600160401b03808211156200018f57600080fd5b6200019d88838901620000a9565b95506020870151915080821115620001b457600080fd5b620001c288838901620000a9565b94506040870151915080821115620001d957600080fd5b50620001e887828801620000a9565b606087015190935090506001600160a01b03811681146200020857600080fd5b939692955090935050565b600181811c908216806200022857607f821691505b6020821081036200024957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029d57600081815260208120601f850160051c81016020861015620002785750805b601f850160051c820191505b81811015620002995782815560010162000284565b5050505b505050565b81516001600160401b03811115620002be57620002be62000093565b620002d681620002cf845462000213565b846200024f565b602080601f8311600181146200030e5760008415620002f55750858301515b600019600386901b1c1916600185901b17855562000299565b600085815260208120601f198616915b828110156200033f578886015182559484019460019091019084016200031e565b50858210156200035e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051615fce620003986000396000818161043e01528181613e9e01526146600152615fce6000f3fe6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json b/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json new file mode 100644 index 0000000..0054fd2 --- /dev/null +++ b/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json @@ -0,0 +1,1899 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ServiceRegistryL2", + "sourceName": "contracts/ServiceRegistryL2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "_baseURI", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ActivateRegistration", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "BaseURIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "CreateMultisigWithAgents", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "name": "CreateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "DeployService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Drain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + } + ], + "name": "DrainerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorUnbond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Refund", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "agentInstance", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "RegisterInstance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "TerminateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "name": "UpdateService", + "type": "event" + }, + { + "inputs": [], + "name": "CID_PREFIX", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "activateRegistration", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDrainer", + "type": "address" + } + ], + "name": "changeDrainer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "changeManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bool", + "name": "permission", + "type": "bool" + } + ], + "name": "changeMultisigPermission", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "multisigImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drain", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drainer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentInstances", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentParams", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentIds", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "getInstancesForAgentId", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getOperatorBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getPreviousHashes", + "outputs": [ + { + "internalType": "uint256", + "name": "numHashes", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "configHashes", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getService", + "outputs": [ + { + "components": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistryL2.ServiceState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "internalType": "struct ServiceRegistryL2.Service", + "name": "service", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAgentInstanceOperators", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapConfigHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapMultisigs", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "instance", + "type": "address" + }, + { + "internalType": "uint32", + "name": "agentId", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdOperatorBalances", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentParams", + "outputs": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServices", + "outputs": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistryL2.ServiceState", + "name": "state", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "name": "registerAgents", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "bURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint96[]", + "name": "amounts", + "type": "uint96[]" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "slash", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slashedFunds", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "terminate", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "unbond", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "update", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040526001600a553480156200001657600080fd5b5060405162005bcb38038062005bcb83398101604081905262000039916200014d565b828260006200004983826200026d565b5060016200005882826200026d565b50600891506200006b905082826200026d565b5050600680546001600160a01b0319163317905550620003399050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000b057600080fd5b81516001600160401b0380821115620000cd57620000cd62000088565b604051601f8301601f19908116603f01168101908282118183101715620000f857620000f862000088565b816040528381526020925086838588010111156200011557600080fd5b600091505b838210156200013957858201830151818301840152908201906200011a565b600093810190920192909252949350505050565b6000806000606084860312156200016357600080fd5b83516001600160401b03808211156200017b57600080fd5b62000189878388016200009e565b94506020860151915080821115620001a057600080fd5b620001ae878388016200009e565b93506040860151915080821115620001c557600080fd5b50620001d4868287016200009e565b9150509250925092565b600181811c90821680620001f357607f821691505b6020821081036200021457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026857600081815260208120601f850160051c81016020861015620002435750805b601f850160051c820191505b8181101562000264578281556001016200024f565b5050505b505050565b81516001600160401b0381111562000289576200028962000088565b620002a1816200029a8454620001de565b846200021a565b602080601f831160018114620002d95760008415620002c05750858301515b600019600386901b1c1916600185901b17855562000264565b600085815260208120601f198616915b828110156200030a57888601518255948401946001909101908401620002e9565b5085821015620003295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61588280620003496000396000f3fe6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", + "deployedBytecode": "0x6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.py b/packages/dvilela/contracts/olas_tokenomics/contract.py new file mode 100644 index 0000000..2a34d04 --- /dev/null +++ b/packages/dvilela/contracts/olas_tokenomics/contract.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2021-2024 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""This module contains the class to connect to the tokenomics contract.""" +import logging +from typing import List, Optional, Union, cast + +from aea.common import JSONLike +from aea.configurations.base import PublicId +from aea.contracts.base import Contract +from aea_ledger_ethereum import EthereumApi +from web3.exceptions import MismatchedABI + + +PUBLIC_ID = PublicId.from_str("dvilela/olas_tokenomics:0.1.0") + +_logger = logging.getLogger( + f"aea.packages.{PUBLIC_ID.author}.contracts.{PUBLIC_ID.name}.contract" +) + + +# pylint: disable=too-many-arguments,invalid-name +class OlasTokenomicsContract(Contract): + """The olas tokenomics contract.""" + + contract_id = PUBLIC_ID + + @classmethod + def get_events( + cls, + ledger_api: EthereumApi, + contract_address: str, + event_name: str, + from_block: int, + to_block: Union[int, str] = "latest", + ) -> Optional[JSONLike]: + """Get events.""" + contract_instance = cls.get_instance(ledger_api, contract_address) + + # Avoid parsing too many blocks at a time. This might take too long and + # the connection could time out. + MAX_BLOCKS = 5000 + + to_block = ( + ledger_api.api.eth.get_block_number() - 1 + if to_block == "latest" + else to_block + ) + + ranges: List[int] = list(range(from_block, cast(int, to_block), MAX_BLOCKS)) + [ + cast(int, to_block) + ] + + event = getattr(contract_instance.events, event_name) + events = [] + for i in range(len(ranges) - 1): + from_block = ranges[i] + to_block = ranges[i + 1] + new_events = [] + + while True: + try: + new_events = event.create_filter( + fromBlock=from_block, # exclusive + toBlock=to_block, # inclusive + ).get_all_entries() # limited to 10k entries for now + break + # Gnosis RPCs sometimes returns: + # ValueError: Filter with id: x does not exist + # MismatchedABI: The event signature did not match the provided ABI + # Retrying several times makes it work + except ValueError as e: + _logger.error(e) + except MismatchedABI as e: + _logger.error(e) + + events += new_events + + return dict( + events=events, + latest_block=int(to_block), + ) diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.yaml b/packages/dvilela/contracts/olas_tokenomics/contract.yaml new file mode 100644 index 0000000..a12d6a7 --- /dev/null +++ b/packages/dvilela/contracts/olas_tokenomics/contract.yaml @@ -0,0 +1,26 @@ +name: olas_tokenomics +author: dvilela +version: 0.1.0 +type: contract +description: Service Registry contract +license: Apache-2.0 +aea_version: '>=1.0.0, <2.0.0' +fingerprint: + __init__.py: bafybeidey4syohls5hxmso6qsp5p4uhtzle5txv2mlbym6ktjzknich6oa + build/OlasTokenomics.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy + build/OlasTokenomicsL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e + contract.py: bafybeihaixq3vettolpxspv6nog6vltqwshug7ltbpvb2i3rw2mps5o2li + tests/__init__.py: bafybeicl2oklx774jomlt6wwwegfdzrxh6iazjxwcyc7h4gepjljkpl4ji + tests/test_contract.py: bafybeicj535veqf35zb3ycu5iqjvqgj4a2kdmogmx5ba7fiolt5chah42a +fingerprint_ignore_patterns: [] +contracts: [] +class_name: OlasTokenomicsContract +contract_interface_paths: + ethereum: build/OlasTokenomics.json +dependencies: + open-aea-ledger-ethereum: + version: ==1.52.0 + open-aea-test-autonomy: + version: ==0.14.12 + web3: + version: <7,>=6.0.0 diff --git a/packages/dvilela/contracts/olas_treasury/__init__.py b/packages/dvilela/contracts/olas_treasury/__init__.py new file mode 100644 index 0000000..b122ec0 --- /dev/null +++ b/packages/dvilela/contracts/olas_treasury/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2022 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""This module contains the support resources for the treasury contract.""" diff --git a/packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json b/packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json new file mode 100644 index 0000000..cfb4e93 --- /dev/null +++ b/packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json @@ -0,0 +1,1988 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ServiceRegistry", + "sourceName": "contracts/ServiceRegistry.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "_baseURI", + "type": "string" + }, + { + "internalType": "address", + "name": "_agentRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ActivateRegistration", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "BaseURIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "CreateMultisigWithAgents", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "CreateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "DeployService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Drain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + } + ], + "name": "DrainerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorUnbond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Refund", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "agentInstance", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "RegisterInstance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "TerminateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "name": "UpdateService", + "type": "event" + }, + { + "inputs": [], + "name": "CID_PREFIX", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "activateRegistration", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "agentRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDrainer", + "type": "address" + } + ], + "name": "changeDrainer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "changeManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bool", + "name": "permission", + "type": "bool" + } + ], + "name": "changeMultisigPermission", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "multisigImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drain", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drainer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentInstances", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentParams", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentIds", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "getInstancesForAgentId", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getOperatorBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getPreviousHashes", + "outputs": [ + { + "internalType": "uint256", + "name": "numHashes", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "configHashes", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getService", + "outputs": [ + { + "components": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistry.ServiceState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "internalType": "struct ServiceRegistry.Service", + "name": "service", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IRegistry.UnitType", + "name": "unitType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getUnitIdsOfService", + "outputs": [ + { + "internalType": "uint256", + "name": "numUnitIds", + "type": "uint256" + }, + { + "internalType": "uint32[]", + "name": "unitIds", + "type": "uint32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAgentInstanceOperators", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapConfigHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapMultisigs", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "instance", + "type": "address" + }, + { + "internalType": "uint32", + "name": "agentId", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdOperatorBalances", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentParams", + "outputs": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceIdSetAgentIds", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceIdSetComponentIds", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServices", + "outputs": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistry.ServiceState", + "name": "state", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "name": "registerAgents", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "bURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint96[]", + "name": "amounts", + "type": "uint96[]" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "slash", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slashedFunds", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "terminate", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "unbond", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "update", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040526001600a553480156200001657600080fd5b506040516200636638038062006366833981016040819052620000399162000160565b83836000620000498382620002a2565b506001620000588282620002a2565b50600891506200006b90508382620002a2565b506001600160a01b03166080525050600680546001600160a01b03191633179055506200036e565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000bb57600080fd5b81516001600160401b0380821115620000d857620000d862000093565b604051601f8301601f19908116603f0116810190828211818310171562000103576200010362000093565b816040528381526020925086838588010111156200012057600080fd5b600091505b8382101562000144578582018301518183018401529082019062000125565b83821115620001565760008385830101525b9695505050505050565b600080600080608085870312156200017757600080fd5b84516001600160401b03808211156200018f57600080fd5b6200019d88838901620000a9565b95506020870151915080821115620001b457600080fd5b620001c288838901620000a9565b94506040870151915080821115620001d957600080fd5b50620001e887828801620000a9565b606087015190935090506001600160a01b03811681146200020857600080fd5b939692955090935050565b600181811c908216806200022857607f821691505b6020821081036200024957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029d57600081815260208120601f850160051c81016020861015620002785750805b601f850160051c820191505b81811015620002995782815560010162000284565b5050505b505050565b81516001600160401b03811115620002be57620002be62000093565b620002d681620002cf845462000213565b846200024f565b602080601f8311600181146200030e5760008415620002f55750858301515b600019600386901b1c1916600185901b17855562000299565b600085815260208120601f198616915b828110156200033f578886015182559484019460019091019084016200031e565b50858210156200035e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051615fce620003986000396000818161043e01528181613e9e01526146600152615fce6000f3fe6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json b/packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json new file mode 100644 index 0000000..0054fd2 --- /dev/null +++ b/packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json @@ -0,0 +1,1899 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ServiceRegistryL2", + "sourceName": "contracts/ServiceRegistryL2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "_baseURI", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ActivateRegistration", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "BaseURIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "CreateMultisigWithAgents", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "name": "CreateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "DeployService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Drain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "drainer", + "type": "address" + } + ], + "name": "DrainerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorUnbond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Refund", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "agentInstance", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "RegisterInstance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "TerminateService", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "name": "UpdateService", + "type": "event" + }, + { + "inputs": [], + "name": "CID_PREFIX", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "activateRegistration", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDrainer", + "type": "address" + } + ], + "name": "changeDrainer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "changeManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bool", + "name": "permission", + "type": "bool" + } + ], + "name": "changeMultisigPermission", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "multisigImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drain", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "drainer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentInstances", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getAgentParams", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentIds", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "getInstancesForAgentId", + "outputs": [ + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getOperatorBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getPreviousHashes", + "outputs": [ + { + "internalType": "uint256", + "name": "numHashes", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "configHashes", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getService", + "outputs": [ + { + "components": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistryL2.ServiceState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "internalType": "struct ServiceRegistryL2.Service", + "name": "service", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapAgentInstanceOperators", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapConfigHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapMultisigs", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "instance", + "type": "address" + }, + { + "internalType": "uint32", + "name": "agentId", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapOperatorAndServiceIdOperatorBalances", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentInstances", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceAndAgentIdAgentParams", + "outputs": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServices", + "outputs": [ + { + "internalType": "uint96", + "name": "securityDeposit", + "type": "uint96" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxNumAgentInstances", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "numAgentInstances", + "type": "uint32" + }, + { + "internalType": "enum ServiceRegistryL2.ServiceState", + "name": "state", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + } + ], + "name": "registerAgents", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "bURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "agentInstances", + "type": "address[]" + }, + { + "internalType": "uint96[]", + "name": "amounts", + "type": "uint96[]" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "slash", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slashedFunds", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "terminate", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unitId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "unbond", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + }, + { + "internalType": "uint32[]", + "name": "agentIds", + "type": "uint32[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "slots", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "bond", + "type": "uint96" + } + ], + "internalType": "struct AgentParams[]", + "name": "agentParams", + "type": "tuple[]" + }, + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "update", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040526001600a553480156200001657600080fd5b5060405162005bcb38038062005bcb83398101604081905262000039916200014d565b828260006200004983826200026d565b5060016200005882826200026d565b50600891506200006b905082826200026d565b5050600680546001600160a01b0319163317905550620003399050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000b057600080fd5b81516001600160401b0380821115620000cd57620000cd62000088565b604051601f8301601f19908116603f01168101908282118183101715620000f857620000f862000088565b816040528381526020925086838588010111156200011557600080fd5b600091505b838210156200013957858201830151818301840152908201906200011a565b600093810190920192909252949350505050565b6000806000606084860312156200016357600080fd5b83516001600160401b03808211156200017b57600080fd5b62000189878388016200009e565b94506020860151915080821115620001a057600080fd5b620001ae878388016200009e565b93506040860151915080821115620001c557600080fd5b50620001d4868287016200009e565b9150509250925092565b600181811c90821680620001f357607f821691505b6020821081036200021457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026857600081815260208120601f850160051c81016020861015620002435750805b601f850160051c820191505b8181101562000264578281556001016200024f565b5050505b505050565b81516001600160401b0381111562000289576200028962000088565b620002a1816200029a8454620001de565b846200021a565b602080601f831160018114620002d95760008415620002c05750858301515b600019600386901b1c1916600185901b17855562000264565b600085815260208120601f198616915b828110156200030a57888601518255948401946001909101908401620002e9565b5085821015620003295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61588280620003496000396000f3fe6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", + "deployedBytecode": "0x6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_treasury/contract.py b/packages/dvilela/contracts/olas_treasury/contract.py new file mode 100644 index 0000000..af043a6 --- /dev/null +++ b/packages/dvilela/contracts/olas_treasury/contract.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2021-2024 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""This module contains the class to connect to the treasury contract.""" +import logging +from typing import List, Optional, Union, cast + +from aea.common import JSONLike +from aea.configurations.base import PublicId +from aea.contracts.base import Contract +from aea_ledger_ethereum import EthereumApi +from web3.exceptions import MismatchedABI + + +PUBLIC_ID = PublicId.from_str("dvilela/olas_treasury:0.1.0") + +_logger = logging.getLogger( + f"aea.packages.{PUBLIC_ID.author}.contracts.{PUBLIC_ID.name}.contract" +) + + +# pylint: disable=too-many-arguments,invalid-name +class OlasTreasuryContract(Contract): + """The olas treasury contract.""" + + contract_id = PUBLIC_ID + + @classmethod + def get_events( + cls, + ledger_api: EthereumApi, + contract_address: str, + event_name: str, + from_block: int, + to_block: Union[int, str] = "latest", + ) -> Optional[JSONLike]: + """Get events.""" + contract_instance = cls.get_instance(ledger_api, contract_address) + + # Avoid parsing too many blocks at a time. This might take too long and + # the connection could time out. + MAX_BLOCKS = 5000 + + to_block = ( + ledger_api.api.eth.get_block_number() - 1 + if to_block == "latest" + else to_block + ) + + ranges: List[int] = list(range(from_block, cast(int, to_block), MAX_BLOCKS)) + [ + cast(int, to_block) + ] + + event = getattr(contract_instance.events, event_name) + events = [] + for i in range(len(ranges) - 1): + from_block = ranges[i] + to_block = ranges[i + 1] + new_events = [] + + while True: + try: + new_events = event.create_filter( + fromBlock=from_block, # exclusive + toBlock=to_block, # inclusive + ).get_all_entries() # limited to 10k entries for now + break + # Gnosis RPCs sometimes returns: + # ValueError: Filter with id: x does not exist + # MismatchedABI: The event signature did not match the provided ABI + # Retrying several times makes it work + except ValueError as e: + _logger.error(e) + except MismatchedABI as e: + _logger.error(e) + + events += new_events + + return dict( + events=events, + latest_block=int(to_block), + ) diff --git a/packages/dvilela/contracts/olas_treasury/contract.yaml b/packages/dvilela/contracts/olas_treasury/contract.yaml new file mode 100644 index 0000000..3be024c --- /dev/null +++ b/packages/dvilela/contracts/olas_treasury/contract.yaml @@ -0,0 +1,26 @@ +name: olas_treasury +author: dvilela +version: 0.1.0 +type: contract +description: Service Registry contract +license: Apache-2.0 +aea_version: '>=1.0.0, <2.0.0' +fingerprint: + __init__.py: bafybeidey4syohls5hxmso6qsp5p4uhtzle5txv2mlbym6ktjzknich6oa + build/OlasTreasury.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy + build/OlasTreasuryL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e + contract.py: bafybeihaixq3vettolpxspv6nog6vltqwshug7ltbpvb2i3rw2mps5o2li + tests/__init__.py: bafybeicl2oklx774jomlt6wwwegfdzrxh6iazjxwcyc7h4gepjljkpl4ji + tests/test_contract.py: bafybeicj535veqf35zb3ycu5iqjvqgj4a2kdmogmx5ba7fiolt5chah42a +fingerprint_ignore_patterns: [] +contracts: [] +class_name: OlasTreasuryContract +contract_interface_paths: + ethereum: build/OlasTreasury.json +dependencies: + open-aea-ledger-ethereum: + version: ==1.52.0 + open-aea-test-autonomy: + version: ==0.14.12 + web3: + version: <7,>=6.0.0 diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index e25803b..466d9cf 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -96,6 +96,8 @@ extra: agent_registry_address_ethereum: ${AGENT_REGISTRY_ADDRESS_ETHEREUM:str:0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112} component_registry_address_ethereum: ${COMPONENT_REGISTRY_ADDRESS_ETHEREUM:str:0x15bd56669F57192a97dF41A2aa8f4403e9491776} service_registry_address_gnosis: ${SERVICE_REGISTRY_ADDRESS_GNOSIS:str:0x9338b5153AE39BB89f50468E608eD9d764B755fD} + treasury_address_ethereum: ${TREASURY_ADDRESS_ETHEREUM:str:0xa0DA53447C0f6C4987964d8463da7e6628B30f82} + tokenomics_address_ethereum: ${TOKENOMICS_ADDRESS_ETHEREUM:str:0xc096362fa6f4A4B1a9ea68b1043416f3381ce300} initial_block_ethereum: ${INITIAL_BLOCK_ETHEREUM:int:18500000} initial_block_gnosis: ${INITIAL_BLOCK_GNOSIS:int:18500000} twitter_credentials: ${TWITTER_CREDENTIALS:str:{}} diff --git a/packages/dvilela/skills/tsunami_abci/behaviours.py b/packages/dvilela/skills/tsunami_abci/behaviours.py index 4b4a90c..c499dfe 100644 --- a/packages/dvilela/skills/tsunami_abci/behaviours.py +++ b/packages/dvilela/skills/tsunami_abci/behaviours.py @@ -40,6 +40,8 @@ PUBLIC_ID as SUNO_CONNECTION_PUBLIC_ID, ) from packages.dvilela.contracts.olas_registries.contract import OlasRegistriesContract +from packages.dvilela.contracts.olas_tokenomics.contract import OlasTokenomicsContract +from packages.dvilela.contracts.olas_treasury.contract import OlasTreasuryContract from packages.dvilela.protocols.kv_store.dialogues import ( KvStoreDialogue, KvStoreDialogues, @@ -228,26 +230,46 @@ def __init__(self, **kwargs: Any): self.tracked_events = { "ethereum": { "service_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), "contract_address": self.params.service_registry_address_ethereum, "event_to_template": { "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], }, }, "agent_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), "contract_address": self.params.agent_registry_address_ethereum, "event_to_template": { "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["agent_minted"] }, }, "component_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), "contract_address": self.params.component_registry_address_ethereum, "event_to_template": { "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["component_minted"] }, }, + "tokenomics": { + "contract_id": str(OlasTokenomicsContract.contract_id), + "contract_address": self.params.tokenomics_address_ethereum, + "event_to_template": { + "EpochSettled": EVENT_USER_PROMPT_TEMPLATES["epoch_settled"] + }, + }, + "treasury": { + "contract_id": str(OlasTreasuryContract.contract_id), + "contract_address": self.params.treasury_address_ethereum, + "event_to_template": { + "DonateToServicesETH": EVENT_USER_PROMPT_TEMPLATES[ + "donation_sent" + ] + }, + }, }, "gnosis": { "service_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), "contract_address": self.params.service_registry_address_gnosis, "event_to_template": { "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], @@ -601,8 +623,6 @@ def build_tweets( # pylint: disable=too-many-locals,too-many-statements tweets = json.loads(response["tweets"]) self.context.logger.info(f"Loaded tweets from db: {tweets}") - contract_id = str(OlasRegistriesContract.contract_id) - # Chain loop for chain_id, contracts_data in self.tracked_events.items(): # Default from_block @@ -641,6 +661,7 @@ def build_tweets( # pylint: disable=too-many-locals,too-many-statements # Contract loop for contract_name, contract_data in contracts_data.items(): + contract_id = contract_data["contract_id"] contract_address = contract_data["contract_address"] unit_type = "service" if contract_name == "service_registry" else "unit" component_type = contract_name.split("_", maxsplit=1)[ diff --git a/packages/dvilela/skills/tsunami_abci/models.py b/packages/dvilela/skills/tsunami_abci/models.py index c8f04e9..f79f03c 100644 --- a/packages/dvilela/skills/tsunami_abci/models.py +++ b/packages/dvilela/skills/tsunami_abci/models.py @@ -69,6 +69,12 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: self.service_registry_address_gnosis = self._ensure( "service_registry_address_gnosis", kwargs, str ) + self.treasury_address_ethereum = self._ensure( + "treasury_address_ethereum", kwargs, str + ) + self.tokenomics_address_ethereum = self._ensure( + "tokenomics_address_ethereum", kwargs, str + ) self.initial_block_ethereum = self._ensure( "initial_block_ethereum", kwargs, int ) diff --git a/packages/dvilela/skills/tsunami_abci/prompts.py b/packages/dvilela/skills/tsunami_abci/prompts.py index afcff19..77d3b57 100644 --- a/packages/dvilela/skills/tsunami_abci/prompts.py +++ b/packages/dvilela/skills/tsunami_abci/prompts.py @@ -77,11 +77,17 @@ EVENT_USER_PROMPT_SERVICE_CREATED = "A new service with id {unit_id} has been minted on the Olas protocol on {chain_name}." EVENT_USER_PROMPT_AGENT_CREATED = "A new agent with id {unit_id} has been minted on the Olas protocol on {chain_name}." EVENT_USER_PROMPT_COMPONENT_CREATED = "A new component with id {unit_id} has been minted on the Olas protocol on {chain_name}." +EVENT_USER_PROMPT_EPOCH_SETTLED = "Tokenomics epoch {n_epoch} has finished. A total of {eth_rewards} ETH and {olas_topups} OLAS have been distributed to Olas developers." +EVENT_USER_PROMPT_DONATION_SENT = ( + "Address {donator} has donated {donation_eth} ETH to {service_name}." +) EVENT_USER_PROMPT_TEMPLATES = { "service_minted": EVENT_USER_PROMPT_SERVICE_CREATED, "agent_minted": EVENT_USER_PROMPT_AGENT_CREATED, "component_minted": EVENT_USER_PROMPT_COMPONENT_CREATED, + "epoch_settled": EVENT_USER_PROMPT_EPOCH_SETTLED, + "donation_sent": EVENT_USER_PROMPT_DONATION_SENT, } REPO_USER_PROMPT_RELEASE = ( diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index 7bd9539..98628d3 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -153,6 +153,8 @@ models: agent_registry_address_ethereum: '0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112' component_registry_address_ethereum: '0x15bd56669F57192a97dF41A2aa8f4403e9491776' service_registry_address_gnosis: '0x9338b5153AE39BB89f50468E608eD9d764B755fD' + treasury_address_ethereum: '0xa0DA53447C0f6C4987964d8463da7e6628B30f82' + tokenomics_address_ethereum: '0xc096362fa6f4A4B1a9ea68b1043416f3381ce300' initial_block_ethereum: 18500000 initial_block_gnosis: 18500000 twitter_credentials: '{}' diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index c603796..1940f70 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -150,6 +150,8 @@ models: agent_registry_address_ethereum: '0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112' component_registry_address_ethereum: '0x15bd56669F57192a97dF41A2aa8f4403e9491776' service_registry_address_gnosis: '0x9338b5153AE39BB89f50468E608eD9d764B755fD' + treasury_address_ethereum: '0xa0DA53447C0f6C4987964d8463da7e6628B30f82' + tokenomics_address_ethereum: '0xc096362fa6f4A4B1a9ea68b1043416f3381ce300' initial_block_ethereum: 18500000 initial_block_gnosis: 18500000 twitter_credentials: '{}' From c4299e43e7968d14b5ae86168d32bf80e6849fed Mon Sep 17 00:00:00 2001 From: dvilela Date: Thu, 13 Jun 2024 22:54:56 +0200 Subject: [PATCH 2/7] fix: generators --- packages/dvilela/agents/tsunami/aea-config.yaml | 4 ++-- .../dvilela/contracts/olas_tokenomics/contract.yaml | 10 ++++------ packages/dvilela/contracts/olas_treasury/contract.yaml | 10 ++++------ packages/dvilela/services/tsunami/service.yaml | 2 +- packages/dvilela/skills/tsunami_abci/skill.yaml | 6 +++--- .../dvilela/skills/tsunami_chained_abci/skill.yaml | 2 +- packages/packages.json | 10 ++++++---- 7 files changed, 21 insertions(+), 23 deletions(-) diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index 95e1ed1..10ff828 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -45,8 +45,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/registration_abci:0.1.0:bafybeieu7vq3pyns4t5ty6u3sbmpkd7yznpg3rmqifoz3jhy7pmqyg3w6q - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie -- dvilela/tsunami_abci:0.1.0:bafybeidzlzl4yqkw36uw6c3tbq5mz2twmkto6fkerv2skkcvmbtdnjmfjq -- dvilela/tsunami_chained_abci:0.1.0:bafybeicqrebte42fxb4eokfemydjwmfqcfsr7gogl3jeiqrxrlklgmsibi +- dvilela/tsunami_abci:0.1.0:bafybeib6sbveqpns35ahs75ai6wrdlevftffeqrx5i4lx2rbcmoqqdktvm +- dvilela/tsunami_chained_abci:0.1.0:bafybeigiiisvp727vahqsfj2gvstnywjc6qaozfeehamcf35i2jnwrmxl4 default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.yaml b/packages/dvilela/contracts/olas_tokenomics/contract.yaml index a12d6a7..e6b99d6 100644 --- a/packages/dvilela/contracts/olas_tokenomics/contract.yaml +++ b/packages/dvilela/contracts/olas_tokenomics/contract.yaml @@ -6,12 +6,10 @@ description: Service Registry contract license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: - __init__.py: bafybeidey4syohls5hxmso6qsp5p4uhtzle5txv2mlbym6ktjzknich6oa - build/OlasTokenomics.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy - build/OlasTokenomicsL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e - contract.py: bafybeihaixq3vettolpxspv6nog6vltqwshug7ltbpvb2i3rw2mps5o2li - tests/__init__.py: bafybeicl2oklx774jomlt6wwwegfdzrxh6iazjxwcyc7h4gepjljkpl4ji - tests/test_contract.py: bafybeicj535veqf35zb3ycu5iqjvqgj4a2kdmogmx5ba7fiolt5chah42a + __init__.py: bafybeigluox22eqqusqzynkbowsq4bnrw4gwodaawets5i2hrp42v43jfm + build/ServiceRegistry.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy + build/ServiceRegistryL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e + contract.py: bafybeiayb5l7axtoughtiuaztbmd64nqvhsbv2tif5gpxojw3yh7e7dj4u fingerprint_ignore_patterns: [] contracts: [] class_name: OlasTokenomicsContract diff --git a/packages/dvilela/contracts/olas_treasury/contract.yaml b/packages/dvilela/contracts/olas_treasury/contract.yaml index 3be024c..6e03d40 100644 --- a/packages/dvilela/contracts/olas_treasury/contract.yaml +++ b/packages/dvilela/contracts/olas_treasury/contract.yaml @@ -6,12 +6,10 @@ description: Service Registry contract license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: - __init__.py: bafybeidey4syohls5hxmso6qsp5p4uhtzle5txv2mlbym6ktjzknich6oa - build/OlasTreasury.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy - build/OlasTreasuryL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e - contract.py: bafybeihaixq3vettolpxspv6nog6vltqwshug7ltbpvb2i3rw2mps5o2li - tests/__init__.py: bafybeicl2oklx774jomlt6wwwegfdzrxh6iazjxwcyc7h4gepjljkpl4ji - tests/test_contract.py: bafybeicj535veqf35zb3ycu5iqjvqgj4a2kdmogmx5ba7fiolt5chah42a + __init__.py: bafybeigv5vccsux5xbgxdowpxet2qwzyym6jzxxycvuuf3bqpaxe6zpaem + build/ServiceRegistry.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy + build/ServiceRegistryL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e + contract.py: bafybeihnyvspubuhfxveaxfzb2pqvgpzkoz7hrvq6oq32ixkyyozjhplga fingerprint_ignore_patterns: [] contracts: [] class_name: OlasTreasuryContract diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index 466d9cf..822b874 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibh5bgshii5oqjfuhwmiivfvfqy7fw5pzvarxkpe4qrgivxtc3xym fingerprint_ignore_patterns: [] -agent: dvilela/tsunami:0.1.0:bafybeidplwab7irdxxasjk3ir3wgnmxwg7dc5us5oijmnijnu7pjlgtmxa +agent: dvilela/tsunami:0.1.0:bafybeihrx3thfxgyoeez4yb3rvta3k3qdghex53nbyyo6ihisewahcw3be number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index 98628d3..ab85802 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeiaicsttkv5xapta2eqove7si2pyv3zmshkqolluxpnrh3hkulqsqu - behaviours.py: bafybeidcxd5rmllbvzdsb7qqjw74n5jfyhpi7zrjg7nkxjwqssnezzsbam + behaviours.py: bafybeidcdesx4vij5sjuog6sozjt3ls5fmh3ul3lbdr54giw3fjmpqtfse dialogues.py: bafybeidmgjji6zw6wcvhijrxb74batj2kc2lskfuqxv76duv2j7azcqwra fsm_specification.yaml: bafybeidlfuabsldhezjaovupkvzrtydpcimzz6r56phsi2psrtdzougu4u handlers.py: bafybeigjy73h3uaroovfuuo3ugffrm3oq6pntz5me7nrbsbiwwjceztj5m - models.py: bafybeibfh42jl5t3klvrwn5m27h25ae6iehnejk4bqirkeqel3eagx3r7y + models.py: bafybeicx5tpwcxy2hufcaydozc6ho4fjalgk4imfh3jgelt2rxea3h4ipu payloads.py: bafybeicejv72ralhxgwzkcprgj5akehu65jfik2cpwsnrxs7zlglpdrl6u - prompts.py: bafybeidsgafonns54625e334xrqgfundtzkgc3ct3pxpdbhc7eyue22ima + prompts.py: bafybeicsrdy4lapzk3d233ab5d5d6mu65t53esp3rbfty3btempw2ii5uq rounds.py: bafybeidmfi6v335lgvjidptqrvuruhtk5hhq3fkcubwbln7xbn2iiok7di subgraph.py: bafybeib7f63y2hozc73lgp3f4ehpssjd23oaotamemeg3xmwxy3esbdlii fingerprint_ignore_patterns: [] diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index 1940f70..445ef3b 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- dvilela/tsunami_abci:0.1.0:bafybeidzlzl4yqkw36uw6c3tbq5mz2twmkto6fkerv2skkcvmbtdnjmfjq +- dvilela/tsunami_abci:0.1.0:bafybeib6sbveqpns35ahs75ai6wrdlevftffeqrx5i4lx2rbcmoqqdktvm behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index 3b8f829..7ec69f9 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -2,14 +2,16 @@ "dev": { "protocol/dvilela/kv_store/0.1.0": "bafybeihimf5f37uupxmugvagmaxworgmz7cxuqpikkyzlgldtbq46jbvci", "contract/dvilela/olas_registries/0.1.0": "bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa", + "contract/dvilela/olas_tokenomics/0.1.0": "bafybeiaeyxsrdzqqpujrj3lljvioejeebinu6wjgtjwpmje7epajbq3xse", + "contract/dvilela/olas_treasury/0.1.0": "bafybeiewi7wvsjxwly6iem2id6plzmhnuesnuvabt25tppmeixiw5t6nxe", "connection/dvilela/kv_store/0.1.0": "bafybeiekugvb2kan4342hliluxl3h5och3fjwqoafdyttpcn57evvyztq4", "connection/dvilela/llama/0.1.0": "bafybeiauzzq2pxmn4brdqgdyxrrikbc5ywjpmetlajyohute5qtnn37aqq", "connection/valory/twitter/0.1.0": "bafybeihotqawulig3g4a7fosi4pljsjii2neiqxtepd42e2neemhqecfcq", "connection/dvilela/suno/0.1.0": "bafybeihy2phtjwbz27ntv55wxfk754kp5tjceujzsdbppjafljoydjflhi", - "skill/dvilela/tsunami_abci/0.1.0": "bafybeidzlzl4yqkw36uw6c3tbq5mz2twmkto6fkerv2skkcvmbtdnjmfjq", - "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeicqrebte42fxb4eokfemydjwmfqcfsr7gogl3jeiqrxrlklgmsibi", - "agent/dvilela/tsunami/0.1.0": "bafybeidplwab7irdxxasjk3ir3wgnmxwg7dc5us5oijmnijnu7pjlgtmxa", - "service/dvilela/tsunami/0.1.0": "bafybeigdblrlizsanfjxdoxuz4ctcbfnz2kmd27d7qo4qikm2umn3ylah4" + "skill/dvilela/tsunami_abci/0.1.0": "bafybeib6sbveqpns35ahs75ai6wrdlevftffeqrx5i4lx2rbcmoqqdktvm", + "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeigiiisvp727vahqsfj2gvstnywjc6qaozfeehamcf35i2jnwrmxl4", + "agent/dvilela/tsunami/0.1.0": "bafybeihrx3thfxgyoeez4yb3rvta3k3qdghex53nbyyo6ihisewahcw3be", + "service/dvilela/tsunami/0.1.0": "bafybeic2x3seor7yrym2kjx75q4w74mlvkuiexwhjfm44cy6yzpzol4v5u" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", From f465f892ab8e6520d1fa57a2daeafb1fc1e5e66c Mon Sep 17 00:00:00 2001 From: dvilela Date: Thu, 13 Jun 2024 23:13:35 +0200 Subject: [PATCH 3/7] fix: abis --- .../dvilela/agents/tsunami/aea-config.yaml | 6 +- .../olas_tokenomics/build/OlasTokenomics.json | 1905 ++++++++++++++++ .../build/ServiceRegistry.json | 1988 ----------------- .../build/ServiceRegistryL2.json | 1899 ---------------- .../contracts/olas_tokenomics/contract.py | 1 + .../contracts/olas_tokenomics/contract.yaml | 5 +- .../olas_treasury/build/OlasTreasury.json | 1099 +++++++++ .../olas_treasury/build/ServiceRegistry.json | 1988 ----------------- .../build/ServiceRegistryL2.json | 1899 ---------------- .../contracts/olas_treasury/contract.py | 1 + .../contracts/olas_treasury/contract.yaml | 5 +- .../dvilela/services/tsunami/service.yaml | 2 +- .../dvilela/skills/tsunami_abci/skill.yaml | 2 + .../skills/tsunami_chained_abci/skill.yaml | 2 +- packages/packages.json | 12 +- 15 files changed, 3024 insertions(+), 7790 deletions(-) create mode 100644 packages/dvilela/contracts/olas_tokenomics/build/OlasTokenomics.json delete mode 100644 packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json delete mode 100644 packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json create mode 100644 packages/dvilela/contracts/olas_treasury/build/OlasTreasury.json delete mode 100644 packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json delete mode 100644 packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index 10ff828..9700ece 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -26,6 +26,8 @@ contracts: - valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y - valory/service_registry:0.1.0:bafybeiekytropd5ysnap2wkekub3byi5jbda3qll7awchvhu5plbpafhmi - dvilela/olas_registries:0.1.0:bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa +- dvilela/olas_tokenomics:0.1.0:bafybeibmpcw6it2zbmu5ttpnqpnn4aafvrij3abzifkqmvswjnysnclkeu +- dvilela/olas_treasury:0.1.0:bafybeihbne26js7q73m3lgddun4nlps36dmf4u7pwdryyr7h5povsvklni protocols: - open_aea/signing:1.0.0:bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi - valory/abci:0.1.0:bafybeiaqmp7kocbfdboksayeqhkbrynvlfzsx4uy4x6nohywnmaig4an7u @@ -45,8 +47,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/registration_abci:0.1.0:bafybeieu7vq3pyns4t5ty6u3sbmpkd7yznpg3rmqifoz3jhy7pmqyg3w6q - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie -- dvilela/tsunami_abci:0.1.0:bafybeib6sbveqpns35ahs75ai6wrdlevftffeqrx5i4lx2rbcmoqqdktvm -- dvilela/tsunami_chained_abci:0.1.0:bafybeigiiisvp727vahqsfj2gvstnywjc6qaozfeehamcf35i2jnwrmxl4 +- dvilela/tsunami_abci:0.1.0:bafybeid33vcxz7nt5y2vpjantbm6xpx7psbnge7mlx4flcv36kwm2rn4ee +- dvilela/tsunami_chained_abci:0.1.0:bafybeie2ymexe5xedc6vgvsav44hkoh72weoot4f5illc4lwtelmx2itgq default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/contracts/olas_tokenomics/build/OlasTokenomics.json b/packages/dvilela/contracts/olas_tokenomics/build/OlasTokenomics.json new file mode 100644 index 0000000..d2ff7b7 --- /dev/null +++ b/packages/dvilela/contracts/olas_tokenomics/build/OlasTokenomics.json @@ -0,0 +1,1905 @@ +{ + "abi": [ + { + "inputs":[ + + ], + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "inputs":[ + + ], + "name":"AlreadyInitialized", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"bondId", + "type":"uint256" + } + ], + "name":"BondNotRedeemable", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"reward", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"topUp", + "type":"uint256" + } + ], + "name":"ClaimIncentivesFailed", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"DelegatecallOnly", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"DonatorBlacklisted", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expected", + "type":"uint256" + } + ], + "name":"InsufficientAllowance", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expected", + "type":"uint256" + } + ], + "name":"LowerThan", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "internalType":"address", + "name":"manager", + "type":"address" + } + ], + "name":"ManagerOnly", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"NonZeroValue", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"max", + "type":"uint256" + } + ], + "name":"Overflow", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "internalType":"address", + "name":"owner", + "type":"address" + } + ], + "name":"OwnerOnly", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"x", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"y", + "type":"uint256" + } + ], + "name":"PRBMath_MulDiv18_Overflow", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"x", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"y", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"denominator", + "type":"uint256" + } + ], + "name":"PRBMath_MulDiv_Overflow", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"x", + "type":"uint256" + } + ], + "name":"PRBMath_UD60x18_Convert_Overflow", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"Paused", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"productId", + "type":"uint256" + } + ], + "name":"ProductClosed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"tokenAddress", + "type":"address" + }, + { + "internalType":"uint256", + "name":"productId", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"deadline", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"curTime", + "type":"uint256" + } + ], + "name":"ProductExpired", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"tokenAddress", + "type":"address" + }, + { + "internalType":"uint256", + "name":"productId", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"requested", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"actual", + "type":"uint256" + } + ], + "name":"ProductSupplyLow", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"ReentrancyGuard", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"SameBlockNumberViolation", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"serviceId", + "type":"uint256" + } + ], + "name":"ServiceDoesNotExist", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"serviceId", + "type":"uint256" + } + ], + "name":"ServiceNeverDeployed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"token", + "type":"address" + }, + { + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"TransferFailed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"epochNumber", + "type":"uint256" + } + ], + "name":"TreasuryRebalanceFailed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"tokenAddress", + "type":"address" + } + ], + "name":"UnauthorizedToken", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expected", + "type":"uint256" + } + ], + "name":"WrongAmount", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"numValues1", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"numValues2", + "type":"uint256" + } + ], + "name":"WrongArrayLength", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"provided", + "type":"address" + }, + { + "internalType":"address", + "name":"expected", + "type":"address" + } + ], + "name":"WrongTokenAddress", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"unitId", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"unitType", + "type":"uint256" + } + ], + "name":"WrongUnitId", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"ZeroAddress", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"ZeroValue", + "type":"error" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"agentRegistry", + "type":"address" + } + ], + "name":"AgentRegistryUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"componentRegistry", + "type":"address" + } + ], + "name":"ComponentRegistryUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"depository", + "type":"address" + } + ], + "name":"DepositoryUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"dispenser", + "type":"address" + } + ], + "name":"DispenserUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"blacklist", + "type":"address" + } + ], + "name":"DonatorBlacklistUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"effectiveBond", + "type":"uint256" + } + ], + "name":"EffectiveBondUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"epochLen", + "type":"uint256" + } + ], + "name":"EpochLengthUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"epochCounter", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"treasuryRewards", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"accountRewards", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"accountTopUps", + "type":"uint256" + } + ], + "name":"EpochSettled", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"idf", + "type":"uint256" + } + ], + "name":"IDFUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"epochNumber", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"rewardComponentFraction", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"rewardAgentFraction", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"maxBondFraction", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"topUpComponentFraction", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"topUpAgentFraction", + "type":"uint256" + } + ], + "name":"IncentiveFractionsUpdateRequested", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"epochNumber", + "type":"uint256" + } + ], + "name":"IncentiveFractionsUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + } + ], + "name":"OwnerUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"serviceRegistry", + "type":"address" + } + ], + "name":"ServiceRegistryUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"implementation", + "type":"address" + } + ], + "name":"TokenomicsImplementationUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"epochNumber", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"devsPerCapital", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"codePerDev", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"epsilonRate", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"epochLen", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"veOLASThreshold", + "type":"uint256" + } + ], + "name":"TokenomicsParametersUpdateRequested", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"epochNumber", + "type":"uint256" + } + ], + "name":"TokenomicsParametersUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"treasury", + "type":"address" + } + ], + "name":"TreasuryUpdated", + "type":"event" + }, + { + "inputs":[ + + ], + "name":"MIN_EPOCH_LENGTH", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"MIN_PARAM_VALUE", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"ONE_YEAR", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"PROXY_TOKENOMICS", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"VERSION", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256[]", + "name":"unitTypes", + "type":"uint256[]" + }, + { + "internalType":"uint256[]", + "name":"unitIds", + "type":"uint256[]" + } + ], + "name":"accountOwnerIncentives", + "outputs":[ + { + "internalType":"uint256", + "name":"reward", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"topUp", + "type":"uint256" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"agentRegistry", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"_donatorBlacklist", + "type":"address" + } + ], + "name":"changeDonatorBlacklist", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"_rewardComponentFraction", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_rewardAgentFraction", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_maxBondFraction", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_topUpComponentFraction", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_topUpAgentFraction", + "type":"uint256" + } + ], + "name":"changeIncentiveFractions", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"_treasury", + "type":"address" + }, + { + "internalType":"address", + "name":"_depository", + "type":"address" + }, + { + "internalType":"address", + "name":"_dispenser", + "type":"address" + } + ], + "name":"changeManagers", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"newOwner", + "type":"address" + } + ], + "name":"changeOwner", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"_componentRegistry", + "type":"address" + }, + { + "internalType":"address", + "name":"_agentRegistry", + "type":"address" + }, + { + "internalType":"address", + "name":"_serviceRegistry", + "type":"address" + } + ], + "name":"changeRegistries", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"implementation", + "type":"address" + } + ], + "name":"changeTokenomicsImplementation", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"_devsPerCapital", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_codePerDev", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_epsilonRate", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_epochLen", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"_veOLASThreshold", + "type":"uint256" + } + ], + "name":"changeTokenomicsParameters", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"checkpoint", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"codePerDev", + "outputs":[ + { + "internalType":"uint72", + "name":"", + "type":"uint72" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"componentRegistry", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"currentYear", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"depository", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"devsPerCapital", + "outputs":[ + { + "internalType":"uint72", + "name":"", + "type":"uint72" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"dispenser", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"donatorBlacklist", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"effectiveBond", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"epochCounter", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"epochLen", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"epsilonRate", + "outputs":[ + { + "internalType":"uint64", + "name":"", + "type":"uint64" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"epoch", + "type":"uint256" + } + ], + "name":"getIDF", + "outputs":[ + { + "internalType":"uint256", + "name":"idf", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"numYears", + "type":"uint256" + } + ], + "name":"getInflationForYear", + "outputs":[ + { + "internalType":"uint256", + "name":"inflationAmount", + "type":"uint256" + } + ], + "stateMutability":"pure", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"getInflationPerEpoch", + "outputs":[ + { + "internalType":"uint256", + "name":"inflationPerEpoch", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"getLastIDF", + "outputs":[ + { + "internalType":"uint256", + "name":"idf", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256[]", + "name":"unitTypes", + "type":"uint256[]" + }, + { + "internalType":"uint256[]", + "name":"unitIds", + "type":"uint256[]" + } + ], + "name":"getOwnerIncentives", + "outputs":[ + { + "internalType":"uint256", + "name":"reward", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"topUp", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"numYears", + "type":"uint256" + } + ], + "name":"getSupplyCapForYear", + "outputs":[ + { + "internalType":"uint256", + "name":"supplyCap", + "type":"uint256" + } + ], + "stateMutability":"pure", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"epoch", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"unitType", + "type":"uint256" + } + ], + "name":"getUnitPoint", + "outputs":[ + { + "components":[ + { + "internalType":"uint96", + "name":"sumUnitTopUpsOLAS", + "type":"uint96" + }, + { + "internalType":"uint32", + "name":"numNewUnits", + "type":"uint32" + }, + { + "internalType":"uint8", + "name":"rewardUnitFraction", + "type":"uint8" + }, + { + "internalType":"uint8", + "name":"topUpUnitFraction", + "type":"uint8" + } + ], + "internalType":"struct UnitPoint", + "name":"up", + "type":"tuple" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"inflationPerSecond", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"_olas", + "type":"address" + }, + { + "internalType":"address", + "name":"_treasury", + "type":"address" + }, + { + "internalType":"address", + "name":"_depository", + "type":"address" + }, + { + "internalType":"address", + "name":"_dispenser", + "type":"address" + }, + { + "internalType":"address", + "name":"_ve", + "type":"address" + }, + { + "internalType":"uint256", + "name":"_epochLen", + "type":"uint256" + }, + { + "internalType":"address", + "name":"_componentRegistry", + "type":"address" + }, + { + "internalType":"address", + "name":"_agentRegistry", + "type":"address" + }, + { + "internalType":"address", + "name":"_serviceRegistry", + "type":"address" + }, + { + "internalType":"address", + "name":"_donatorBlacklist", + "type":"address" + } + ], + "name":"initializeTokenomics", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"lastDonationBlockNumber", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"mapEpochTokenomics", + "outputs":[ + { + "components":[ + { + "internalType":"uint96", + "name":"totalDonationsETH", + "type":"uint96" + }, + { + "internalType":"uint96", + "name":"totalTopUpsOLAS", + "type":"uint96" + }, + { + "internalType":"uint64", + "name":"idf", + "type":"uint64" + }, + { + "internalType":"uint32", + "name":"numNewOwners", + "type":"uint32" + }, + { + "internalType":"uint32", + "name":"endTime", + "type":"uint32" + }, + { + "internalType":"uint8", + "name":"rewardTreasuryFraction", + "type":"uint8" + }, + { + "internalType":"uint8", + "name":"maxBondFraction", + "type":"uint8" + } + ], + "internalType":"struct EpochPoint", + "name":"epochPoint", + "type":"tuple" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"mapNewOwners", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"mapNewUnits", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"mapOwnerRewards", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"mapOwnerTopUps", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"mapServiceAmounts", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"mapUnitIncentives", + "outputs":[ + { + "internalType":"uint96", + "name":"reward", + "type":"uint96" + }, + { + "internalType":"uint96", + "name":"pendingRelativeReward", + "type":"uint96" + }, + { + "internalType":"uint96", + "name":"topUp", + "type":"uint96" + }, + { + "internalType":"uint96", + "name":"pendingRelativeTopUp", + "type":"uint96" + }, + { + "internalType":"uint32", + "name":"lastEpoch", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"maxBond", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"nextEpochLen", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"nextVeOLASThreshold", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"olas", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"owner", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"refundFromBondProgram", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"reserveAmountForBondProgram", + "outputs":[ + { + "internalType":"bool", + "name":"success", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"serviceRegistry", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"timeLaunch", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"tokenomicsImplementation", + "outputs":[ + { + "internalType":"address", + "name":"implementation", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"tokenomicsParametersUpdated", + "outputs":[ + { + "internalType":"bytes1", + "name":"", + "type":"bytes1" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"donator", + "type":"address" + }, + { + "internalType":"uint256[]", + "name":"serviceIds", + "type":"uint256[]" + }, + { + "internalType":"uint256[]", + "name":"amounts", + "type":"uint256[]" + }, + { + "internalType":"uint256", + "name":"donationETH", + "type":"uint256" + } + ], + "name":"trackServiceDonations", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"treasury", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"ve", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"veOLASThreshold", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + } + ], + "bytecode": "" +} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json b/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json deleted file mode 100644 index cfb4e93..0000000 --- a/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistry.json +++ /dev/null @@ -1,1988 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ServiceRegistry", - "sourceName": "contracts/ServiceRegistry.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "_baseURI", - "type": "string" - }, - { - "internalType": "address", - "name": "_agentRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "AgentInstanceRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentInstancesSlotsFilled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "AgentNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentNotInService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "componentId", - "type": "uint256" - } - ], - "name": "ComponentNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "HashExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectAgentBondingValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectRegistrationDepositValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerOnly", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "provided", - "type": "address" - }, - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OnlyOwnServiceMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorHasNoInstances", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "Overflow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "Paused", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuard", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceMustBeInactive", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "UnauthorizedMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "WrongAgentId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numValues1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numValues2", - "type": "uint256" - } - ], - "name": "WrongArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "state", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxThreshold", - "type": "uint256" - } - ], - "name": "WrongThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroValue", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ActivateRegistration", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "baseURI", - "type": "string" - } - ], - "name": "BaseURIChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "CreateMultisigWithAgents", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "CreateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "DeployService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Drain", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - } - ], - "name": "DrainerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorUnbond", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Refund", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "agentInstance", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "RegisterInstance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "TerminateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "name": "UpdateService", - "type": "event" - }, - { - "inputs": [], - "name": "CID_PREFIX", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "activateRegistration", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "agentRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newDrainer", - "type": "address" - } - ], - "name": "changeDrainer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "changeManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bool", - "name": "permission", - "type": "bool" - } - ], - "name": "changeMultisigPermission", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "changeOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - } - ], - "name": "create", - "outputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "multisigImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "deploy", - "outputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drain", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drainer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentInstances", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentParams", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentIds", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "getInstancesForAgentId", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getOperatorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getPreviousHashes", - "outputs": [ - { - "internalType": "uint256", - "name": "numHashes", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "configHashes", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getService", - "outputs": [ - { - "components": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistry.ServiceState", - "name": "state", - "type": "uint8" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "internalType": "struct ServiceRegistry.Service", - "name": "service", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IRegistry.UnitType", - "name": "unitType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getUnitIdsOfService", - "outputs": [ - { - "internalType": "uint256", - "name": "numUnitIds", - "type": "uint256" - }, - { - "internalType": "uint32[]", - "name": "unitIds", - "type": "uint32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapAgentInstanceOperators", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapConfigHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapMultisigs", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "instance", - "type": "address" - }, - { - "internalType": "uint32", - "name": "agentId", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdOperatorBalances", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentParams", - "outputs": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceIdSetAgentIds", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceIdSetComponentIds", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServices", - "outputs": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistry.ServiceState", - "name": "state", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "name": "registerAgents", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "bURI", - "type": "string" - } - ], - "name": "setBaseURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint96[]", - "name": "amounts", - "type": "uint96[]" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "slash", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "slashedFunds", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "terminate", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "unbond", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "update", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60a06040526001600a553480156200001657600080fd5b506040516200636638038062006366833981016040819052620000399162000160565b83836000620000498382620002a2565b506001620000588282620002a2565b50600891506200006b90508382620002a2565b506001600160a01b03166080525050600680546001600160a01b03191633179055506200036e565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000bb57600080fd5b81516001600160401b0380821115620000d857620000d862000093565b604051601f8301601f19908116603f0116810190828211818310171562000103576200010362000093565b816040528381526020925086838588010111156200012057600080fd5b600091505b8382101562000144578582018301518183018401529082019062000125565b83821115620001565760008385830101525b9695505050505050565b600080600080608085870312156200017757600080fd5b84516001600160401b03808211156200018f57600080fd5b6200019d88838901620000a9565b95506020870151915080821115620001b457600080fd5b620001c288838901620000a9565b94506040870151915080821115620001d957600080fd5b50620001e887828801620000a9565b606087015190935090506001600160a01b03811681146200020857600080fd5b939692955090935050565b600181811c908216806200022857607f821691505b6020821081036200024957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029d57600081815260208120601f850160051c81016020861015620002785750805b601f850160051c820191505b81811015620002995782815560010162000284565b5050505b505050565b81516001600160401b03811115620002be57620002be62000093565b620002d681620002cf845462000213565b846200024f565b602080601f8311600181146200030e5760008415620002f55750858301515b600019600386901b1c1916600185901b17855562000299565b600085815260208120601f198616915b828110156200033f578886015182559484019460019091019084016200031e565b50858210156200035e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051615fce620003986000396000818161043e01528181613e9e01526146600152615fce6000f3fe6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json b/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json deleted file mode 100644 index 0054fd2..0000000 --- a/packages/dvilela/contracts/olas_tokenomics/build/ServiceRegistryL2.json +++ /dev/null @@ -1,1899 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ServiceRegistryL2", - "sourceName": "contracts/ServiceRegistryL2.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "_baseURI", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "AgentInstanceRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentInstancesSlotsFilled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "AgentNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentNotInService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "componentId", - "type": "uint256" - } - ], - "name": "ComponentNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "HashExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectAgentBondingValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectRegistrationDepositValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerOnly", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "provided", - "type": "address" - }, - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OnlyOwnServiceMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorHasNoInstances", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "Overflow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "Paused", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuard", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceMustBeInactive", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "UnauthorizedMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "WrongAgentId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numValues1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numValues2", - "type": "uint256" - } - ], - "name": "WrongArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "state", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxThreshold", - "type": "uint256" - } - ], - "name": "WrongThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroValue", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ActivateRegistration", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "baseURI", - "type": "string" - } - ], - "name": "BaseURIChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "CreateMultisigWithAgents", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "name": "CreateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "DeployService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Drain", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - } - ], - "name": "DrainerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorUnbond", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Refund", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "agentInstance", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "RegisterInstance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "TerminateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "name": "UpdateService", - "type": "event" - }, - { - "inputs": [], - "name": "CID_PREFIX", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "activateRegistration", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newDrainer", - "type": "address" - } - ], - "name": "changeDrainer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "changeManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bool", - "name": "permission", - "type": "bool" - } - ], - "name": "changeMultisigPermission", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "changeOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - } - ], - "name": "create", - "outputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "multisigImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "deploy", - "outputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drain", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drainer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentInstances", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentParams", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentIds", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "getInstancesForAgentId", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getOperatorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getPreviousHashes", - "outputs": [ - { - "internalType": "uint256", - "name": "numHashes", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "configHashes", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getService", - "outputs": [ - { - "components": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistryL2.ServiceState", - "name": "state", - "type": "uint8" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "internalType": "struct ServiceRegistryL2.Service", - "name": "service", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapAgentInstanceOperators", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapConfigHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapMultisigs", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "instance", - "type": "address" - }, - { - "internalType": "uint32", - "name": "agentId", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdOperatorBalances", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentParams", - "outputs": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServices", - "outputs": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistryL2.ServiceState", - "name": "state", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "name": "registerAgents", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "bURI", - "type": "string" - } - ], - "name": "setBaseURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint96[]", - "name": "amounts", - "type": "uint96[]" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "slash", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "slashedFunds", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "terminate", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "unbond", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "update", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040526001600a553480156200001657600080fd5b5060405162005bcb38038062005bcb83398101604081905262000039916200014d565b828260006200004983826200026d565b5060016200005882826200026d565b50600891506200006b905082826200026d565b5050600680546001600160a01b0319163317905550620003399050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000b057600080fd5b81516001600160401b0380821115620000cd57620000cd62000088565b604051601f8301601f19908116603f01168101908282118183101715620000f857620000f862000088565b816040528381526020925086838588010111156200011557600080fd5b600091505b838210156200013957858201830151818301840152908201906200011a565b600093810190920192909252949350505050565b6000806000606084860312156200016357600080fd5b83516001600160401b03808211156200017b57600080fd5b62000189878388016200009e565b94506020860151915080821115620001a057600080fd5b620001ae878388016200009e565b93506040860151915080821115620001c557600080fd5b50620001d4868287016200009e565b9150509250925092565b600181811c90821680620001f357607f821691505b6020821081036200021457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026857600081815260208120601f850160051c81016020861015620002435750805b601f850160051c820191505b8181101562000264578281556001016200024f565b5050505b505050565b81516001600160401b0381111562000289576200028962000088565b620002a1816200029a8454620001de565b846200021a565b602080601f831160018114620002d95760008415620002c05750858301515b600019600386901b1c1916600185901b17855562000264565b600085815260208120601f198616915b828110156200030a57888601518255948401946001909101908401620002e9565b5085821015620003295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61588280620003496000396000f3fe6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", - "deployedBytecode": "0x6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.py b/packages/dvilela/contracts/olas_tokenomics/contract.py index 2a34d04..5d1fab4 100644 --- a/packages/dvilela/contracts/olas_tokenomics/contract.py +++ b/packages/dvilela/contracts/olas_tokenomics/contract.py @@ -49,6 +49,7 @@ def get_events( event_name: str, from_block: int, to_block: Union[int, str] = "latest", + chain_name: str = "ethereum", ) -> Optional[JSONLike]: """Get events.""" contract_instance = cls.get_instance(ledger_api, contract_address) diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.yaml b/packages/dvilela/contracts/olas_tokenomics/contract.yaml index e6b99d6..15a9ffd 100644 --- a/packages/dvilela/contracts/olas_tokenomics/contract.yaml +++ b/packages/dvilela/contracts/olas_tokenomics/contract.yaml @@ -7,9 +7,8 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeigluox22eqqusqzynkbowsq4bnrw4gwodaawets5i2hrp42v43jfm - build/ServiceRegistry.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy - build/ServiceRegistryL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e - contract.py: bafybeiayb5l7axtoughtiuaztbmd64nqvhsbv2tif5gpxojw3yh7e7dj4u + build/OlasTokenomics.json: bafybeic4dyhqnnfnivfee5krnfyffmglk7icnmoo4wr7kmoixnllrh2jje + contract.py: bafybeid67bxfb2zhwvjdlkyxfv63qbatged3qxde3jpp3ihvbcdidgnhym fingerprint_ignore_patterns: [] contracts: [] class_name: OlasTokenomicsContract diff --git a/packages/dvilela/contracts/olas_treasury/build/OlasTreasury.json b/packages/dvilela/contracts/olas_treasury/build/OlasTreasury.json new file mode 100644 index 0000000..ae5de61 --- /dev/null +++ b/packages/dvilela/contracts/olas_treasury/build/OlasTreasury.json @@ -0,0 +1,1099 @@ +{ + "abi": [ + { + "inputs":[ + { + "internalType":"address", + "name":"_olas", + "type":"address" + }, + { + "internalType":"address", + "name":"_tokenomics", + "type":"address" + }, + { + "internalType":"address", + "name":"_depository", + "type":"address" + }, + { + "internalType":"address", + "name":"_dispenser", + "type":"address" + } + ], + "stateMutability":"payable", + "type":"constructor" + }, + { + "inputs":[ + + ], + "name":"AlreadyInitialized", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"bondId", + "type":"uint256" + } + ], + "name":"BondNotRedeemable", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"reward", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"topUp", + "type":"uint256" + } + ], + "name":"ClaimIncentivesFailed", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"DelegatecallOnly", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"DonatorBlacklisted", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expected", + "type":"uint256" + } + ], + "name":"InsufficientAllowance", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expected", + "type":"uint256" + } + ], + "name":"LowerThan", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "internalType":"address", + "name":"manager", + "type":"address" + } + ], + "name":"ManagerOnly", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"NonZeroValue", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"max", + "type":"uint256" + } + ], + "name":"Overflow", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "internalType":"address", + "name":"owner", + "type":"address" + } + ], + "name":"OwnerOnly", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"Paused", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"productId", + "type":"uint256" + } + ], + "name":"ProductClosed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"tokenAddress", + "type":"address" + }, + { + "internalType":"uint256", + "name":"productId", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"deadline", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"curTime", + "type":"uint256" + } + ], + "name":"ProductExpired", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"tokenAddress", + "type":"address" + }, + { + "internalType":"uint256", + "name":"productId", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"requested", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"actual", + "type":"uint256" + } + ], + "name":"ProductSupplyLow", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"ReentrancyGuard", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"SameBlockNumberViolation", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"serviceId", + "type":"uint256" + } + ], + "name":"ServiceDoesNotExist", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"serviceId", + "type":"uint256" + } + ], + "name":"ServiceNeverDeployed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"token", + "type":"address" + }, + { + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"TransferFailed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"epochNumber", + "type":"uint256" + } + ], + "name":"TreasuryRebalanceFailed", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"tokenAddress", + "type":"address" + } + ], + "name":"UnauthorizedToken", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"provided", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expected", + "type":"uint256" + } + ], + "name":"WrongAmount", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"numValues1", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"numValues2", + "type":"uint256" + } + ], + "name":"WrongArrayLength", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"provided", + "type":"address" + }, + { + "internalType":"address", + "name":"expected", + "type":"address" + } + ], + "name":"WrongTokenAddress", + "type":"error" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"unitId", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"unitType", + "type":"uint256" + } + ], + "name":"WrongUnitId", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"ZeroAddress", + "type":"error" + }, + { + "inputs":[ + + ], + "name":"ZeroValue", + "type":"error" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"token", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"tokenAmount", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"olasAmount", + "type":"uint256" + } + ], + "name":"DepositTokenFromAccount", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"depository", + "type":"address" + } + ], + "name":"DepositoryUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"token", + "type":"address" + } + ], + "name":"DisableToken", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"dispenser", + "type":"address" + } + ], + "name":"DispenserUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256[]", + "name":"serviceIds", + "type":"uint256[]" + }, + { + "indexed":false, + "internalType":"uint256[]", + "name":"amounts", + "type":"uint256[]" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"donation", + "type":"uint256" + } + ], + "name":"DonateToServicesETH", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"token", + "type":"address" + } + ], + "name":"EnableToken", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"MinAcceptedETHUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + } + ], + "name":"OwnerUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + + ], + "name":"PauseTreasury", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"ReceiveETH", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"tokenomics", + "type":"address" + } + ], + "name":"TokenomicsUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + + ], + "name":"UnpauseTreasury", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"ETHOwned", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"ETHFromServices", + "type":"uint256" + } + ], + "name":"UpdateTreasuryBalances", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"token", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"tokenAmount", + "type":"uint256" + } + ], + "name":"Withdraw", + "type":"event" + }, + { + "inputs":[ + + ], + "name":"ETHFromServices", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"ETHOwned", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"ETH_TOKEN_ADDRESS", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"_tokenomics", + "type":"address" + }, + { + "internalType":"address", + "name":"_depository", + "type":"address" + }, + { + "internalType":"address", + "name":"_dispenser", + "type":"address" + } + ], + "name":"changeManagers", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"_minAcceptedETH", + "type":"uint256" + } + ], + "name":"changeMinAcceptedETH", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"newOwner", + "type":"address" + } + ], + "name":"changeOwner", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256[]", + "name":"serviceIds", + "type":"uint256[]" + }, + { + "internalType":"uint256[]", + "name":"amounts", + "type":"uint256[]" + } + ], + "name":"depositServiceDonationsETH", + "outputs":[ + + ], + "stateMutability":"payable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"tokenAmount", + "type":"uint256" + }, + { + "internalType":"address", + "name":"token", + "type":"address" + }, + { + "internalType":"uint256", + "name":"olasMintAmount", + "type":"uint256" + } + ], + "name":"depositTokenForOLAS", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"depository", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"token", + "type":"address" + } + ], + "name":"disableToken", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"dispenser", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"drainServiceSlashedFunds", + "outputs":[ + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"token", + "type":"address" + } + ], + "name":"enableToken", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"token", + "type":"address" + } + ], + "name":"isEnabled", + "outputs":[ + { + "internalType":"bool", + "name":"enabled", + "type":"bool" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"mapEnabledTokens", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"mapTokenReserves", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"minAcceptedETH", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"olas", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"owner", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"pause", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"paused", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"uint256", + "name":"treasuryRewards", + "type":"uint256" + } + ], + "name":"rebalanceTreasury", + "outputs":[ + { + "internalType":"bool", + "name":"success", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"tokenomics", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + + ], + "name":"unpause", + "outputs":[ + + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"tokenAmount", + "type":"uint256" + }, + { + "internalType":"address", + "name":"token", + "type":"address" + } + ], + "name":"withdraw", + "outputs":[ + { + "internalType":"bool", + "name":"success", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"accountRewards", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"accountTopUps", + "type":"uint256" + } + ], + "name":"withdrawToAccount", + "outputs":[ + { + "internalType":"bool", + "name":"success", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "stateMutability":"payable", + "type":"receive" + } + ], + "bytecode": "" +} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json b/packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json deleted file mode 100644 index cfb4e93..0000000 --- a/packages/dvilela/contracts/olas_treasury/build/ServiceRegistry.json +++ /dev/null @@ -1,1988 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ServiceRegistry", - "sourceName": "contracts/ServiceRegistry.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "_baseURI", - "type": "string" - }, - { - "internalType": "address", - "name": "_agentRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "AgentInstanceRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentInstancesSlotsFilled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "AgentNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentNotInService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "componentId", - "type": "uint256" - } - ], - "name": "ComponentNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "HashExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectAgentBondingValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectRegistrationDepositValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerOnly", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "provided", - "type": "address" - }, - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OnlyOwnServiceMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorHasNoInstances", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "Overflow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "Paused", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuard", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceMustBeInactive", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "UnauthorizedMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "WrongAgentId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numValues1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numValues2", - "type": "uint256" - } - ], - "name": "WrongArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "state", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxThreshold", - "type": "uint256" - } - ], - "name": "WrongThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroValue", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ActivateRegistration", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "baseURI", - "type": "string" - } - ], - "name": "BaseURIChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "CreateMultisigWithAgents", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "CreateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "DeployService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Drain", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - } - ], - "name": "DrainerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorUnbond", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Refund", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "agentInstance", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "RegisterInstance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "TerminateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "name": "UpdateService", - "type": "event" - }, - { - "inputs": [], - "name": "CID_PREFIX", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "activateRegistration", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "agentRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newDrainer", - "type": "address" - } - ], - "name": "changeDrainer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "changeManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bool", - "name": "permission", - "type": "bool" - } - ], - "name": "changeMultisigPermission", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "changeOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - } - ], - "name": "create", - "outputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "multisigImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "deploy", - "outputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drain", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drainer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentInstances", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentParams", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentIds", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "getInstancesForAgentId", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getOperatorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getPreviousHashes", - "outputs": [ - { - "internalType": "uint256", - "name": "numHashes", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "configHashes", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getService", - "outputs": [ - { - "components": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistry.ServiceState", - "name": "state", - "type": "uint8" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "internalType": "struct ServiceRegistry.Service", - "name": "service", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IRegistry.UnitType", - "name": "unitType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getUnitIdsOfService", - "outputs": [ - { - "internalType": "uint256", - "name": "numUnitIds", - "type": "uint256" - }, - { - "internalType": "uint32[]", - "name": "unitIds", - "type": "uint32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapAgentInstanceOperators", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapConfigHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapMultisigs", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "instance", - "type": "address" - }, - { - "internalType": "uint32", - "name": "agentId", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdOperatorBalances", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentParams", - "outputs": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceIdSetAgentIds", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceIdSetComponentIds", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServices", - "outputs": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistry.ServiceState", - "name": "state", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "name": "registerAgents", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "bURI", - "type": "string" - } - ], - "name": "setBaseURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint96[]", - "name": "amounts", - "type": "uint96[]" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "slash", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "slashedFunds", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "terminate", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "unbond", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "update", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60a06040526001600a553480156200001657600080fd5b506040516200636638038062006366833981016040819052620000399162000160565b83836000620000498382620002a2565b506001620000588282620002a2565b50600891506200006b90508382620002a2565b506001600160a01b03166080525050600680546001600160a01b03191633179055506200036e565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000bb57600080fd5b81516001600160401b0380821115620000d857620000d862000093565b604051601f8301601f19908116603f0116810190828211818310171562000103576200010362000093565b816040528381526020925086838588010111156200012057600080fd5b600091505b8382101562000144578582018301518183018401529082019062000125565b83821115620001565760008385830101525b9695505050505050565b600080600080608085870312156200017757600080fd5b84516001600160401b03808211156200018f57600080fd5b6200019d88838901620000a9565b95506020870151915080821115620001b457600080fd5b620001c288838901620000a9565b94506040870151915080821115620001d957600080fd5b50620001e887828801620000a9565b606087015190935090506001600160a01b03811681146200020857600080fd5b939692955090935050565b600181811c908216806200022857607f821691505b6020821081036200024957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029d57600081815260208120601f850160051c81016020861015620002785750805b601f850160051c820191505b81811015620002995782815560010162000284565b5050505b505050565b81516001600160401b03811115620002be57620002be62000093565b620002d681620002cf845462000213565b846200024f565b602080601f8311600181146200030e5760008415620002f55750858301515b600019600386901b1c1916600185901b17855562000299565b600085815260208120601f198616915b828110156200033f578886015182559484019460019091019084016200031e565b50858210156200035e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051615fce620003986000396000818161043e01528181613e9e01526146600152615fce6000f3fe6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106103605760003560e01c80636f99f15c116101c6578063a5d059ca116100f7578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610bda578063f908bc7714610c07578063fbdeb3d714610c27578063ffa1ad7414610c4757600080fd5b8063dff7672414610b79578063e23f6fb414610b8c578063e985e9c514610b9f57600080fd5b8063b88d4fde116100d1578063b88d4fde14610af9578063c87b56dd14610b19578063cbf994f814610b39578063ccc9305d14610b5957600080fd5b8063a5d059ca14610a74578063a60e4c3c14610aab578063a6f9dae114610ad957600080fd5b80638a2bd86f1161016457806395d89b411161013e57806395d89b4114610a0a5780639890220b14610a1f578063a22cb46514610a34578063a3fbbaae14610a5457600080fd5b80638a2bd86f146109775780638da5cb5b146109bc57806392080b23146109dc57600080fd5b806373b8b6a2116101a057806373b8b6a2146108e25780637c5e63e01461090257806382694b1d1461093757806386a2bdd41461095757600080fd5b80636f99f15c1461085e57806370a082311461087e578063718934d81461089e57600080fd5b806342144854116102a05780634f6ccce71161023e5780635e4507fa116102185780635e4507fa1461079f5780636352211e146107bf57806363dd7615146107df5780636c0360eb1461084957600080fd5b80634f6ccce71461073857806355f804b31461075857806357838e851461077857600080fd5b8063481c6a751161027a578063481c6a75146106a25780634d486f85146106c25780634eb780da146106e25780634f558e791461071857600080fd5b806342144854146105a55780634236aff8146105f357806342842e0e1461068257600080fd5b806317351f7e1161030d57806321e4f7bb116102e757806321e4f7bb1461050257806323b872dd14610530578063323e010714610550578063406f14ad1461058557600080fd5b806317351f7e1461048057806318160ddd146104b05780631de286ba146104d457600080fd5b8063095ea7b31161033e578063095ea7b31461040a5780630d1cfcae1461042c57806310c6aa191461046057600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004614e43565b610c78565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610cca565b6040516103919190614ec3565b3480156103c857600080fd5b506103f26103d7366004614ed6565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610391565b34801561041657600080fd5b5061042a610425366004614f04565b610d58565b005b34801561043857600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046c57600080fd5b5061042a61047b366004614f30565b610e3f565b34801561048c57600080fd5b5061038561049b366004614f30565b60146020526000908152604090205460ff1681565b3480156104bc57600080fd5b506104c660095481565b604051908152602001610391565b3480156104e057600080fd5b506104f46104ef366004614ed6565b610ef8565b604051610391929190614f4d565b34801561050e57600080fd5b5061052261051d366004614fb4565b61114e565b60405161039192919061501a565b34801561053c57600080fd5b5061042a61054b36600461503b565b61123c565b34801561055c57600080fd5b5061057061056b366004614fb4565b611416565b60405163ffffffff9091168152602001610391565b34801561059157600080fd5b506105706105a0366004614fb4565b61145f565b3480156105b157600080fd5b506105db6105c0366004614ed6565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610391565b3480156105ff57600080fd5b5061066f61060e366004614ed6565b6015602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b60405161039197969594939291906150b4565b34801561068e57600080fd5b5061042a61069d36600461503b565b61147b565b3480156106ae57600080fd5b506007546103f2906001600160a01b031681565b3480156106ce57600080fd5b506105226106dd366004614ed6565b611570565b3480156106ee57600080fd5b506103f26106fd366004614f30565b6011602052600090815260409020546001600160a01b031681565b34801561072457600080fd5b50610385610733366004614ed6565b6116c2565b34801561074457600080fd5b506104c6610753366004614ed6565b6116e4565b34801561076457600080fd5b5061042a6107733660046151d7565b611729565b34801561078457600080fd5b50600b546103f290600160601b90046001600160a01b031681565b3480156107ab57600080fd5b506103f26107ba366004614fb4565b6117d2565b3480156107cb57600080fd5b506103f26107da366004614ed6565b61180a565b3480156107eb57600080fd5b506108256107fa366004614ed6565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610391565b34801561085557600080fd5b506103af61186f565b34801561086a57600080fd5b50600b546105db906001600160601b031681565b34801561088a57600080fd5b506104c6610899366004614f30565b61187c565b3480156108aa57600080fd5b506108be6108b9366004614fb4565b6118f0565b604080516001600160a01b03909316835263ffffffff909116602083015201610391565b3480156108ee57600080fd5b506103856108fd3660046152cf565b611936565b34801561090e57600080fd5b506103af6040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561094357600080fd5b50610385610952366004615399565b611d8b565b34801561096357600080fd5b506104c6610972366004614fb4565b611e24565b34801561098357600080fd5b506104c6610992366004614f04565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b3480156109c857600080fd5b506006546103f2906001600160a01b031681565b3480156109e857600080fd5b506109fc6109f73660046153d7565b611e55565b60405161039192919061542f565b348015610a1657600080fd5b506103af611f90565b348015610a2b57600080fd5b506104c6611f9d565b348015610a4057600080fd5b5061042a610a4f366004615399565b6120fb565b348015610a6057600080fd5b5061042a610a6f366004614f30565b612167565b348015610a8057600080fd5b50610a94610a8f366004614f04565b612218565b604080519215158352602083019190915201610391565b348015610ab757600080fd5b50610acb610ac6366004614ed6565b6126b4565b604051610391929190615448565b348015610ae557600080fd5b5061042a610af4366004614f30565b612718565b348015610b0557600080fd5b5061042a610b14366004615496565b6127c9565b348015610b2557600080fd5b506103af610b34366004614ed6565b6128ae565b348015610b4557600080fd5b50610385610b5436600461563a565b612928565b348015610b6557600080fd5b50610a94610b74366004614f04565b612eb6565b610385610b873660046156d7565b613246565b610385610b9a366004614f04565b613841565b348015610bab57600080fd5b50610385610bba366004615757565b600560209081526000928352604080842090915290825290205460ff1681565b348015610be657600080fd5b50610bfa610bf5366004614ed6565b6139c0565b6040516103919190615785565b348015610c1357600080fd5b506103f2610c22366004615821565b613b40565b348015610c3357600080fd5b506104c6610c42366004615895565b613fe6565b348015610c5357600080fd5b506103af604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610ca957506380ac58cd60e01b6001600160e01b03198316145b80610cc45750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610cd79061592a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d039061592a565b8015610d505780601f10610d2557610100808354040283529160200191610d50565b820191906000526020600020905b815481529060010190602001808311610d3357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610da157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610de35760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610e7f5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038116610ea65760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610f9957610f9961507c565b6005811115610faa57610faa61507c565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561102957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610fec5790505b50505050508152505090508060e001515192508267ffffffffffffffff8111156110555761105561510f565b60405190808252806020026020018201604052801561109a57816020015b60408051808201909152600080825260208201528152602001906001900390816110735790505b50915060005b8381101561114757600085905060208360e0015183815181106110c5576110c5615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061112a5761112a615964565b6020026020010181905250508061114090615990565b90506110a0565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff8111156111825761118261510f565b6040519080825280602002602001820160405280156111ab578160200160208202803683370190505b50915060005b83811015611233576000828152600f602052604090208054829081106111d9576111d9615964565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061120957611209615964565b6001600160a01b03909216602092830291909101909101528061122b81615990565b9150506111b1565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146112a55760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610dda565b6001600160a01b0382166112ef5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b336001600160a01b038416148061132957506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061134a57506000818152600460205260409020546001600160a01b031633145b6113875760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610dda565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6012602052816000526040600020818154811061143257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6013602052816000526040600020818154811061143257600080fd5b61148683838361123c565b6001600160a01b0382163b1561156b57604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152191906159a9565b6001600160e01b0319161461156b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b505050565b600081815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156116115761161161507c565b60058111156116225761162261507c565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116116645790505b50505050508152505090506116b681856142de565b91508151925050915091565b60008082118015610cc457506009546116dc9060016159c6565b821092915050565b60006116f18260016159c6565b905060095481111561172457600954604051637ae5968560e01b8152610dda918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146117695760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b805160000361178b57604051637c946ed760e01b815260040160405180910390fd5b60086117978282615a24565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516117c79190614ec3565b60405180910390a150565b600f60205281600052604060002081815481106117ee57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806117245760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610dda565b60088054610cd79061592a565b60006001600160a01b0382166118d45760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610dda565b506001600160a01b031660009081526003602052604090205490565b600d602052816000526040600020818154811061190c57600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260156020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff1660058111156119cd576119cd61507c565b60058111156119de576119de61507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015611a5d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611a205790505b505050505081525050905060046005811115611a7b57611a7b61507c565b8160c001516005811115611a9157611a9161507c565b14611ad0578060c001516005811115611aac57611aac61507c565b604051633c053f9d60e21b8152600481019190915260248101849052604401610dda565b8351855114611aff57845184516040516308151c1160e41b815260048101929092526024820152604401610dda565b80602001516001600160a01b0316336001600160a01b031614611b535760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610dda565b845160005b81811015611d7e57600060116000898481518110611b7857611b78615964565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611bdd57611bdd615964565b60200260200101516001611bf19190615ae4565b6001600160601b03161115611c4b57600b8054829190600090611c1e9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611ccf565b888481518110611c5d57611c5d615964565b6020908102919091010151600b8054600090611c839084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611cb957611cb9615964565b602002602001015181611ccc9190615b0f565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611d3e57611d3e615964565b6020026020010151604051611d6291906001600160601b0391909116815260200190565b60405180910390a350505080611d7790615990565b9050611b58565b5060019695505050505050565b6006546000906001600160a01b03163314611dce5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b038316611df55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611e4057600080fd5b90600052602060002001600091509150505481565b6000606081846001811115611e6c57611e6c61507c565b03611efd5760008381526012602090815260409182902080548351818402810184019094528084529091830182828015611ef157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611eb45790505b50505050509050611f85565b60008381526013602090815260409182902080548351818402810184019094528084529091830182828015611f7d57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f405790505b505050505090505b805191509250929050565b60018054610cd79061592a565b60006001600a541115611fc3576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b0316331461201557600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610dda565b50600b546001600160601b031680156120f357600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d806000811461207f576040519150601f19603f3d011682016040523d82523d6000602084013e612084565b606091505b50509050806120bc5760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610dda565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146121a75760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0381166121ce5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a54111561223f576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146122845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0384166122ab5760405163d92e233d60e01b815260040160405180910390fd5b600083815260156020526040902060056002820154600160601b900460ff1660058111156122db576122db61507c565b14612324576002810154600160601b900460ff1660058111156123005761230061507c565b604051633c053f9d60e21b8152600481019190915260248101859052604401610dda565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156123ac57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff1681830152825260019092019101612360565b50508251929350505060008190036123e95760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610dda565b808460020160088282829054906101000a900463ffffffff1661240c9190615b37565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036124625760028401805460ff60601b1916600160601b1790555b60005b8181101561252a576000889050602084838151811061248657612486615964565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e9092526040909120546124cd9064010000000090046001600160601b0316886159c6565b9650601160008584815181106124e5576124e5615964565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061252281615990565b915050612465565b506000838152600d6020526040812061254291614c87565b6000838152601060205260409020546001600160601b03168086111561256f57806001600160601b031695505b85156126685760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b50509050806126235760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610dda565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8860405161265e91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561270857602002820191906000526020600020905b8154815260200190600101908083116126f4575b5050505050905080519150915091565b6006546001600160a01b031633146127585760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b03811661277f5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6127d485858561123c565b6001600160a01b0384163b156128a757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061281a9033908a90899089908990600401615b54565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d91906159a9565b6001600160e01b031916146128a75760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050505050565b6000818152601560205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b8152506128f18361442f565b6128fe608085901b61442f565b6040516020016129119493929190615ba8565b604051602081830303815290604052915050919050565b6007546000906001600160a01b0316331461296b5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b60006129768361180a565b9050876001600160a01b0316816001600160a01b0316146129bd5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610dda565b600083815260156020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff9104166005811115612a5757612a5761507c565b6005811115612a6857612a6861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015612ae757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612aaa5790505b505050505081525050905060016005811115612b0557612b0561507c565b8160c001516005811115612b1b57612b1b61507c565b14612b36578060c0015160058111156123005761230061507c565b612b418888886145ff565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff811115612b7057612b7061510f565b604051908082528060200260200182016040528015612b99578160200160208202803683370190505b5090506000885167ffffffffffffffff811115612bb857612bb861510f565b604051908082528060200260200182016040528015612bfd57816020015b6040805180820190915260008082526020820152815260200190600190039081612bd65790505b5090506000805b8a51811015612d3257898181518110612c1f57612c1f615964565b60200260200101516000015163ffffffff16600003612c9457600088905060208c8381518110612c5157612c51615964565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612d20565b8a8181518110612ca657612ca6615964565b6020026020010151848381518110612cc057612cc0615964565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612cec57612cec615964565b6020026020010151838381518110612d0657612d06615964565b60200260200101819052508180612d1c90615990565b9250505b80612d2a81615990565b915050612c04565b5060408401518b8114612d69576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612d76858585858c6147c6565b6000888152601560209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612e4b57612e4b61507c565b021790555060e08201518051612e6b916003840191602090910190614ca8565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612edd576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612f225760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000612f2d8461180a565b9050846001600160a01b0316816001600160a01b031614612f745760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610dda565b600084815260156020526040902060016002820154600160601b900460ff166005811115612fa457612fa461507c565b1480612fcf575060056002820154600160601b900460ff166005811115612fcd57612fcd61507c565b145b15613018576002810154600160601b900460ff166005811115612ff457612ff461507c565b604051633c053f9d60e21b8152600481019190915260248101869052604401610dda565b6002810154600160401b900463ffffffff16156130525760028101805460ff60601b19166c05000000000000000000000000179055613068565b60028101805460ff60601b1916600160601b1790555b600085815260126020526040812061307f91614d57565b600085815260136020526040812061309691614d57565b60005b600382015481101561312357600086905060208360030183815481106130c1576130c1615964565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f600082815260200190815260200160002060006131129190614d7c565b5061311c81615990565b9050613099565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b50509050806131c45760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610dda565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d856040516131ff91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b031633146132895760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b81518351146132b857825182516040516308151c1160e41b815260048101929092526024820152604401610dda565b6000848152601560205260409020600280820154600160601b900460ff1660058111156132e7576132e761507c565b1461330c576002810154600160601b900460ff166005811115612ff457612ff461507c565b83516000805b82811015613401576000889050602087838151811061333357613333615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b03169481019490945290929190036133d45787838151811061339f5761339f615964565b60200260200101518a6040516332832be560e21b8152600401610dda92919063ffffffff929092168252602082015260400190565b60208101516133ec906001600160601b0316856159c6565b93505050806133fa90615990565b9050613312565b5080341461343257604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610dda565b6001600160a01b03888116600090815260116020526040902054161561346e576040516322ddebd960e21b815260048101889052602401610dda565b60a087901b6001600160a01b0389161760005b8381101561376257600088828151811061349d5761349d615964565b6020026020010151905060008883815181106134bb576134bb615964565b60200260200101519050816001600160a01b03168c6001600160a01b0316036134fa576040516322ddebd960e21b8152600481018c9052602401610dda565b6001600160a01b038281166000908152601160205260409020541615613551576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610dda565b60008b905060208a858151811061356a5761356a615964565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f909552902054909290911690036135c3576040516304ad100760e21b8152600481018d9052602401610dda565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b900490911690600861368d83615c3a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613746919063ffffffff91909116815260200190565b60405180910390a45050508061375b90615990565b9050613481565b50600284015463ffffffff64010000000082048116600160401b90920416036137a45760028401805460ff60601b19166c030000000000000000000000001790555b600081815260106020526040812080543492906137cb9084906001600160601b0316615ae4565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161382a91815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146138845760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b600061388f8361180a565b9050836001600160a01b0316816001600160a01b0316146138d65760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610dda565b600083815260156020526040902060016002820154600160601b900460ff1660058111156139065761390661507c565b1461392757604051635960d22f60e11b815260048101859052602401610dda565b80546001600160601b0316341461396c578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610dda565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b613a086040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526015602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff166005811115613aa057613aa061507c565b6005811115613ab157613ab161507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b3057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613af35790505b5050505050815250509050919050565b60006001600a541115613b66576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613bab5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6000613bb68561180a565b9050856001600160a01b0316816001600160a01b031614613bfd5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610dda565b6001600160a01b03841660009081526014602052604090205460ff16613c405760405162a2307960e51b81526001600160a01b0385166004820152602401610dda565b600085815260156020526040902060036002820154600160601b900460ff166005811115613c7057613c7061507c565b14613cb9576002810154600160601b900460ff166005811115613c9557613c9561507c565b604051633c053f9d60e21b8152600481019190915260248101879052604401610dda565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613de69291859160c08401910460ff166005811115613d4757613d4761507c565b6005811115613d5857613d5861507c565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613d9a5790505b505050505081525050886142de565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613e2391859163ffffffff16908a90600401615c5d565b6020604051808303816000875af1158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615c98565b6000888152601360205260409020600384018054929650613e8692614d9a565b506040516304d9dc3f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906309b3b87e90613ed6906003860190600401615cb5565b600060405180830381865afa158015613ef3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f1b9190810190615e3d565b60008881526012602090815260409091208251613f3e9391929190910190614ca8565b5081546001600160601b0316600160601b6001600160a01b03861690810291909117835560028301805460ff60601b19166c0400000000000000000000000017905560405188907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a54111561400c576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146140515760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610dda565b6001600160a01b0386166140785760405163d92e233d60e01b815260040160405180910390fd5b6140838585856145ff565b60005b8451811015614117578381815181106140a1576140a1615964565b60200260200101516000015163ffffffff16600014806140e757508381815181106140ce576140ce615964565b6020026020010151602001516001600160601b03166000145b1561410557604051637c946ed760e01b815260040160405180910390fd5b8061410f81615990565b915050614086565b50506009548061412681615990565b9150506141716040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c08201818152505061419d8186868851866147c6565b6000828152601560209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff00000000000000001990921691909117908360058111156142725761427261507c565b021790555060e08201518051614292916003840191602090910190614ca8565b50505060098290556142a48783614a7d565b60405182907f9169d45eacd63571e315a0504da919b7c89de505493e7b34051802dd0816a06990600090a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff8111156143035761430361510f565b60405190808252806020026020018201604052801561432c578160200160208202803683370190505b5090506000805b8460e001515181101561442757600084905060208660e00151838151811061435d5761435d615964565b602002602001015163ffffffff16901b8117905060005b6000828152600f6020526040902054811015614412576000828152600f602052604090208054829081106143aa576143aa615964565b9060005260206000200160009054906101000a90046001600160a01b03168585815181106143da576143da615964565b6001600160a01b0390921660209283029190910190910152836143fc81615990565b945050808061440a90615990565b915050614374565b5050808061441f90615990565b915050614333565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c16179061459b827f06060606060606060606060606060606060606060606060606060606060606066159c6565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660276145cb9190615ed7565b6145f5827f30303030303030303030303030303030303030303030303030303030303030306159c6565b610cc491906159c6565b600083900361462157604051637c946ed760e01b815260040160405180910390fd5b8151158061463157508051825114155b1561465c57815181516040516308151c1160e41b815260048101929092526024820152604401610dda565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e09190615ef6565b90506000805b84518110156147be576146fa8260016159c6565b85828151811061470c5761470c615964565b602002602001015163ffffffff16108061474457508285828151811061473457614734615964565b602002602001015163ffffffff16115b156147895784818151811061475b5761475b615964565b6020026020010151604051632ab10b0b60e21b8152600401610dda919063ffffffff91909116815260200190565b84818151811061479b5761479b615964565b602002602001015163ffffffff16915080806147b690615990565b9150506146e6565b505050505050565b60008267ffffffffffffffff8111156147e1576147e161510f565b60405190808252806020026020018201604052801561480a578160200160208202803683370190505b5060e087015260005b8381101561499a5785818151811061482d5761482d615964565b60200260200101518760e00151828151811061484b5761484b615964565b63ffffffff909216602092830291909101820152865184919088908490811061487657614876615964565b602002602001015163ffffffff16901b8117905085828151811061489c5761489c615964565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff90931692909217179055855186908390811061490657614906615964565b602002602001015160000151886080018181516149239190615f0f565b63ffffffff1690525085516001600160601b0384169087908490811061494b5761494b615964565b6020026020010151602001516001600160601b031611156149875785828151811061497857614978615964565b60200260200101516020015192505b508061499281615990565b915050614813565b506001600160601b038116865260808601516000906149ba906002615f2e565b6149c5906001615f0f565b63ffffffff1690506149d8600382615f70565b6000036149f1576149ea600382615f84565b9050614a0a565b6149fc600382615f84565b614a079060016159c6565b90505b80876060015163ffffffff161080614a355750866080015163ffffffff16876060015163ffffffff16115b15614a74576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610dda565b50505050505050565b614a878282614b6d565b6001600160a01b0382163b15614b6957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015614afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1f91906159a9565b6001600160e01b03191614614b695760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610dda565b5050565b6001600160a01b038216614bb75760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610dda565b6000818152600260205260409020546001600160a01b031615614c1c5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610dda565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190614ca59190614de8565b50565b82805482825590600052602060002090600701600890048101928215614d475791602002820160005b83821115614d1557835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302614cd1565b8015614d455782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614d15565b505b50614d53929150614e18565b5090565b508054600082556007016008900490600052602060002090810190614ca59190614e18565b5080546000825590600052602060002090810190614ca59190614e18565b82805482825590600052602060002090600701600890048101928215614d47576000526020600020916007016008900482015b82811115614d47578254825591600101919060010190614dcd565b5b80821115614d5357805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614de9565b5b80821115614d535760008155600101614e19565b6001600160e01b031981168114614ca557600080fd5b600060208284031215614e5557600080fd5b8135614e6081614e2d565b9392505050565b60005b83811015614e82578181015183820152602001614e6a565b83811115614e91576000848401525b50505050565b60008151808452614eaf816020860160208601614e67565b601f01601f19169290920160200192915050565b602081526000614e606020830184614e97565b600060208284031215614ee857600080fd5b5035919050565b6001600160a01b0381168114614ca557600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b8135614e6081614eef565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614fa6578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614f72565b509098975050505050505050565b60008060408385031215614fc757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561500f5781516001600160a01b031687529582019590820190600101614fea565b509495945050505050565b8281526040602082015260006150336040830184614fd6565b949350505050565b60008060006060848603121561505057600080fd5b833561505b81614eef565b9250602084013561506b81614eef565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b600681106150b057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e0810161510360c0830184615092565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156151485761514861510f565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156151775761517761510f565b604052919050565b600067ffffffffffffffff8311156151995761519961510f565b6151ac601f8401601f191660200161514e565b90508281528383830111156151c057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156151e957600080fd5b813567ffffffffffffffff81111561520057600080fd5b8201601f8101841361521157600080fd5b6150338482356020840161517f565b600067ffffffffffffffff82111561523a5761523a61510f565b5060051b60200190565b600082601f83011261525557600080fd5b8135602061526a61526583615220565b61514e565b82815260059290921b8401810191818101908684111561528957600080fd5b8286015b848110156152ad5780356152a081614eef565b835291830191830161528d565b509695505050505050565b80356001600160601b038116811461172457600080fd5b6000806000606084860312156152e457600080fd5b833567ffffffffffffffff808211156152fc57600080fd5b61530887838801615244565b945060209150818601358181111561531f57600080fd5b86019050601f8101871361533257600080fd5b803561534061526582615220565b81815260059190911b8201830190838101908983111561535f57600080fd5b928401925b8284101561538457615375846152b8565b82529284019290840190615364565b96999698505050506040949094013593505050565b600080604083850312156153ac57600080fd5b82356153b781614eef565b9150602083013580151581146153cc57600080fd5b809150509250929050565b600080604083850312156153ea57600080fd5b823560028110614f2257600080fd5b600081518084526020808501945080840160005b8381101561500f57815163ffffffff168752958201959082019060010161540d565b82815260406020820152600061503360408301846153f9565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156154895784518352938301939183019160010161546d565b5090979650505050505050565b6000806000806000608086880312156154ae57600080fd5b85356154b981614eef565b945060208601356154c981614eef565b935060408601359250606086013567ffffffffffffffff808211156154ed57600080fd5b818801915088601f83011261550157600080fd5b81358181111561551057600080fd5b89602082850101111561552257600080fd5b9699959850939650602001949392505050565b63ffffffff81168114614ca557600080fd5b600082601f83011261555857600080fd5b8135602061556861526583615220565b82815260059290921b8401810191818101908684111561558757600080fd5b8286015b848110156152ad57803561559e81615535565b835291830191830161558b565b600082601f8301126155bc57600080fd5b813560206155cc61526583615220565b82815260069290921b840181019181810190868411156155eb57600080fd5b8286015b848110156152ad57604081890312156156085760008081fd5b615610615125565b813561561b81615535565b81526156288286016152b8565b818601528352918301916040016155ef565b60008060008060008060c0878903121561565357600080fd5b863561565e81614eef565b955060208701359450604087013567ffffffffffffffff8082111561568257600080fd5b61568e8a838b01615547565b955060608901359150808211156156a457600080fd5b506156b189828a016155ab565b93505060808701356156c281615535565b8092505060a087013590509295509295509295565b600080600080608085870312156156ed57600080fd5b84356156f881614eef565b935060208501359250604085013567ffffffffffffffff8082111561571c57600080fd5b61572888838901615244565b9350606087013591508082111561573e57600080fd5b5061574b87828801615547565b91505092959194509250565b6000806040838503121561576a57600080fd5b823561577581614eef565b915060208301356153cc81614eef565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516157cf608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161580660e0840182615092565b5060e0830151610100838101526150336101208401826153f9565b6000806000806080858703121561583757600080fd5b843561584281614eef565b935060208501359250604085013561585981614eef565b9150606085013567ffffffffffffffff81111561587557600080fd5b8501601f8101871361588657600080fd5b61574b8782356020840161517f565b600080600080600060a086880312156158ad57600080fd5b85356158b881614eef565b945060208601359350604086013567ffffffffffffffff808211156158dc57600080fd5b6158e889838a01615547565b945060608801359150808211156158fe57600080fd5b5061590b888289016155ab565b925050608086013561591c81615535565b809150509295509295909350565b600181811c9082168061593e57607f821691505b60208210810361595e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016159a2576159a261597a565b5060010190565b6000602082840312156159bb57600080fd5b8151614e6081614e2d565b600082198211156159d9576159d961597a565b500190565b601f82111561156b57600081815260208120601f850160051c81016020861015615a055750805b601f850160051c820191505b818110156147be57828155600101615a11565b815167ffffffffffffffff811115615a3e57615a3e61510f565b615a5281615a4c845461592a565b846159de565b602080601f831160018114615a875760008415615a6f5750858301515b600019600386901b1c1916600185901b1785556147be565b600085815260208120601f198616915b82811015615ab657888601518255948401946001909101908401615a97565b5085821015615ad45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160601b03808316818516808303821115615b0657615b0661597a565b01949350505050565b60006001600160601b0383811690831681811015615b2f57615b2f61597a565b039392505050565b600063ffffffff83811690831681811015615b2f57615b2f61597a565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654615bb68161592a565b60018281168015615bce5760018114615be357615c12565b60ff1984168752821515830287019450615c12565b8a60005260208060002060005b85811015615c095781548a820152908401908201615bf0565b50505082870194505b505050508551615c26818360208a01614e67565b019384525050602082015260400192915050565b600063ffffffff808316818103615c5357615c5361597a565b6001019392505050565b606081526000615c706060830186614fd6565b63ffffffff851660208401528281036040840152615c8e8185614e97565b9695505050505050565b600060208284031215615caa57600080fd5b8151614e6081614eef565b60006020808301818452808554615cd0818490815260200190565b60008881526020812094509092505b81600782011015615d5557835463ffffffff808216855281871c811687860152604082811c821690860152606082811c821690860152608082811c82169086015260a082811c82169086015260c082811c9091169085015260e090811c9084015260019093019261010090920191600801615cdf565b92549281811015615d715763ffffffff84168352918401916001015b81811015615d8c5783851c63ffffffff168352918401916001015b81811015615da957604084901c63ffffffff168352918401916001015b81811015615dc657606084901c63ffffffff168352918401916001015b81811015615de357608084901c63ffffffff168352918401916001015b81811015615e005760a084901c63ffffffff168352918401916001015b81811015615e1d5760c084901c63ffffffff168352918401916001015b81811015615e315760e084901c8352918401915b50909695505050505050565b60006020808385031215615e5057600080fd5b825167ffffffffffffffff811115615e6757600080fd5b8301601f81018513615e7857600080fd5b8051615e8661526582615220565b81815260059190911b82018301908381019087831115615ea557600080fd5b928401925b82841015615ecc578351615ebd81615535565b82529284019290840190615eaa565b979650505050505050565b6000816000190483118215151615615ef157615ef161597a565b500290565b600060208284031215615f0857600080fd5b5051919050565b600063ffffffff808316818516808303821115615b0657615b0661597a565b600063ffffffff80831681851681830481118215151615615f5157615f5161597a565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082615f7f57615f7f615f5a565b500690565b600082615f9357615f93615f5a565b50049056fea2646970667358221220c6f47c49865f99357fc7f3a83dfde648490b39975e4ec4242e3bcab08caabf3664736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json b/packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json deleted file mode 100644 index 0054fd2..0000000 --- a/packages/dvilela/contracts/olas_treasury/build/ServiceRegistryL2.json +++ /dev/null @@ -1,1899 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ServiceRegistryL2", - "sourceName": "contracts/ServiceRegistryL2.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "_baseURI", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "AgentInstanceRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentInstancesSlotsFilled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "AgentNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentNotInService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "componentId", - "type": "uint256" - } - ], - "name": "ComponentNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "HashExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectAgentBondingValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectRegistrationDepositValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerOnly", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "provided", - "type": "address" - }, - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OnlyOwnServiceMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorHasNoInstances", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "Overflow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "Paused", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuard", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceMustBeInactive", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "UnauthorizedMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "WrongAgentId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numValues1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numValues2", - "type": "uint256" - } - ], - "name": "WrongArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "state", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxThreshold", - "type": "uint256" - } - ], - "name": "WrongThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroValue", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ActivateRegistration", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "baseURI", - "type": "string" - } - ], - "name": "BaseURIChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "CreateMultisigWithAgents", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "name": "CreateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "DeployService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Drain", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "drainer", - "type": "address" - } - ], - "name": "DrainerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorUnbond", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Refund", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "agentInstance", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "RegisterInstance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "TerminateService", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "name": "UpdateService", - "type": "event" - }, - { - "inputs": [], - "name": "CID_PREFIX", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "activateRegistration", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newDrainer", - "type": "address" - } - ], - "name": "changeDrainer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "changeManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bool", - "name": "permission", - "type": "bool" - } - ], - "name": "changeMultisigPermission", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "changeOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - } - ], - "name": "create", - "outputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "multisigImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "deploy", - "outputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drain", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "drainer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentInstances", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getAgentParams", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentIds", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "getInstancesForAgentId", - "outputs": [ - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getOperatorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getPreviousHashes", - "outputs": [ - { - "internalType": "uint256", - "name": "numHashes", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "configHashes", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getService", - "outputs": [ - { - "components": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistryL2.ServiceState", - "name": "state", - "type": "uint8" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "internalType": "struct ServiceRegistryL2.Service", - "name": "service", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapAgentInstanceOperators", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapConfigHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "mapMultisigs", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "instance", - "type": "address" - }, - { - "internalType": "uint32", - "name": "agentId", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapOperatorAndServiceIdOperatorBalances", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentInstances", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceAndAgentIdAgentParams", - "outputs": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServices", - "outputs": [ - { - "internalType": "uint96", - "name": "securityDeposit", - "type": "uint96" - }, - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxNumAgentInstances", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numAgentInstances", - "type": "uint32" - }, - { - "internalType": "enum ServiceRegistryL2.ServiceState", - "name": "state", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - } - ], - "name": "registerAgents", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "bURI", - "type": "string" - } - ], - "name": "setBaseURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "agentInstances", - "type": "address[]" - }, - { - "internalType": "uint96[]", - "name": "amounts", - "type": "uint96[]" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "slash", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "slashedFunds", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "terminate", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unitId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "unbond", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceOwner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - }, - { - "internalType": "uint32[]", - "name": "agentIds", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "slots", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "bond", - "type": "uint96" - } - ], - "internalType": "struct AgentParams[]", - "name": "agentParams", - "type": "tuple[]" - }, - { - "internalType": "uint32", - "name": "threshold", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "update", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040526001600a553480156200001657600080fd5b5060405162005bcb38038062005bcb83398101604081905262000039916200014d565b828260006200004983826200026d565b5060016200005882826200026d565b50600891506200006b905082826200026d565b5050600680546001600160a01b0319163317905550620003399050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000b057600080fd5b81516001600160401b0380821115620000cd57620000cd62000088565b604051601f8301601f19908116603f01168101908282118183101715620000f857620000f862000088565b816040528381526020925086838588010111156200011557600080fd5b600091505b838210156200013957858201830151818301840152908201906200011a565b600093810190920192909252949350505050565b6000806000606084860312156200016357600080fd5b83516001600160401b03808211156200017b57600080fd5b62000189878388016200009e565b94506020860151915080821115620001a057600080fd5b620001ae878388016200009e565b93506040860151915080821115620001c557600080fd5b50620001d4868287016200009e565b9150509250925092565b600181811c90821680620001f357607f821691505b6020821081036200021457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026857600081815260208120601f850160051c81016020861015620002435750805b601f850160051c820191505b8181101562000264578281556001016200024f565b5050505b505050565b81516001600160401b0381111562000289576200028962000088565b620002a1816200029a8454620001de565b846200021a565b602080601f831160018114620002d95760008415620002c05750858301515b600019600386901b1c1916600185901b17855562000264565b600085815260208120601f198616915b828110156200030a57888601518255948401946001909101908401620002e9565b5085821015620003295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61588280620003496000396000f3fe6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", - "deployedBytecode": "0x6080604052600436106103345760003560e01c806370a08231116101b0578063a60e4c3c116100ec578063dff7672411610095578063ef0e239b1161006f578063ef0e239b14610af7578063f908bc7714610b24578063fbdeb3d714610b44578063ffa1ad7414610b6457600080fd5b8063dff7672414610a96578063e23f6fb414610aa9578063e985e9c514610abc57600080fd5b8063c87b56dd116100c6578063c87b56dd14610a36578063cbf994f814610a56578063ccc9305d14610a7657600080fd5b8063a60e4c3c146109c8578063a6f9dae1146109f6578063b88d4fde14610a1657600080fd5b80638a2bd86f116101595780639890220b116101335780639890220b1461093c578063a22cb46514610951578063a3fbbaae14610971578063a5d059ca1461099157600080fd5b80638a2bd86f146108c25780638da5cb5b1461090757806395d89b411461092757600080fd5b80637c5e63e01161018a5780637c5e63e01461084d57806382694b1d1461088257806386a2bdd4146108a257600080fd5b806370a08231146107c9578063718934d8146107e957806373b8b6a21461082d57600080fd5b806342842e0e1161027f57806355f804b3116102285780636352211e116102025780636352211e1461070a57806363dd76151461072a5780636c0360eb146107945780636f99f15c146107a957600080fd5b806355f804b3146106a357806357838e85146106c35780635e4507fa146106ea57600080fd5b80634eb780da116102595780634eb780da1461062d5780634f558e79146106635780634f6ccce71461068357600080fd5b806342842e0e146105cd578063481c6a75146105ed5780634d486f851461060d57600080fd5b806318160ddd116102e157806323b872dd116102bb57806323b872dd146104d057806342144854146104f05780634236aff81461053e57600080fd5b806318160ddd146104505780631de286ba1461047457806321e4f7bb146104a257600080fd5b8063095ea7b311610312578063095ea7b3146103de57806310c6aa191461040057806317351f7e1461042057600080fd5b806301ffc9a71461033957806306fdde031461036e578063081812fc14610390575b600080fd5b34801561034557600080fd5b506103596103543660046149a2565b610b95565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610be7565b6040516103659190614a16565b34801561039c57600080fd5b506103c66103ab366004614a29565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103ea57600080fd5b506103fe6103f9366004614a57565b610c75565b005b34801561040c57600080fd5b506103fe61041b366004614a83565b610d5c565b34801561042c57600080fd5b5061035961043b366004614a83565b60126020526000908152604090205460ff1681565b34801561045c57600080fd5b5061046660095481565b604051908152602001610365565b34801561048057600080fd5b5061049461048f366004614a29565b610e15565b604051610365929190614aa0565b3480156104ae57600080fd5b506104c26104bd366004614b07565b61106b565b604051610365929190614b6d565b3480156104dc57600080fd5b506103fe6104eb366004614b8e565b611159565b3480156104fc57600080fd5b5061052661050b366004614a29565b6010602052600090815260409020546001600160601b031681565b6040516001600160601b039091168152602001610365565b34801561054a57600080fd5b506105ba610559366004614a29565b6013602052600090815260409020805460018201546002909201546001600160601b03821692600160601b928390046001600160a01b031692909163ffffffff808216926401000000008304821692600160401b8104909216910460ff1687565b6040516103659796959493929190614c07565b3480156105d957600080fd5b506103fe6105e8366004614b8e565b611333565b3480156105f957600080fd5b506007546103c6906001600160a01b031681565b34801561061957600080fd5b506104c2610628366004614a29565b611428565b34801561063957600080fd5b506103c6610648366004614a83565b6011602052600090815260409020546001600160a01b031681565b34801561066f57600080fd5b5061035961067e366004614a29565b61157a565b34801561068f57600080fd5b5061046661069e366004614a29565b61159c565b3480156106af57600080fd5b506103fe6106be366004614d2a565b6115e1565b3480156106cf57600080fd5b50600b546103c690600160601b90046001600160a01b031681565b3480156106f657600080fd5b506103c6610705366004614b07565b61168a565b34801561071657600080fd5b506103c6610725366004614a29565b6116c2565b34801561073657600080fd5b50610770610745366004614a29565b600e6020526000908152604090205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610365565b3480156107a057600080fd5b50610383611727565b3480156107b557600080fd5b50600b54610526906001600160601b031681565b3480156107d557600080fd5b506104666107e4366004614a83565b611734565b3480156107f557600080fd5b50610809610804366004614b07565b6117a8565b604080516001600160a01b03909316835263ffffffff909116602083015201610365565b34801561083957600080fd5b50610359610848366004614e22565b6117ee565b34801561085957600080fd5b506103836040518060400160405280600981526020016806630313730313232360bc1b81525081565b34801561088e57600080fd5b5061035961089d366004614eec565b611c43565b3480156108ae57600080fd5b506104666108bd366004614b07565b611cdc565b3480156108ce57600080fd5b506104666108dd366004614a57565b60a01b6001600160a01b03909116176000908152601060205260409020546001600160601b031690565b34801561091357600080fd5b506006546103c6906001600160a01b031681565b34801561093357600080fd5b50610383611d0d565b34801561094857600080fd5b50610466611d1a565b34801561095d57600080fd5b506103fe61096c366004614eec565b611e78565b34801561097d57600080fd5b506103fe61098c366004614a83565b611ee4565b34801561099d57600080fd5b506109b16109ac366004614a57565b611f95565b604080519215158352602083019190915201610365565b3480156109d457600080fd5b506109e86109e3366004614a29565b612431565b604051610365929190614f2a565b348015610a0257600080fd5b506103fe610a11366004614a83565b612495565b348015610a2257600080fd5b506103fe610a31366004614f78565b612546565b348015610a4257600080fd5b50610383610a51366004614a29565b61262b565b348015610a6257600080fd5b50610359610a7136600461511a565b6126a5565b348015610a8257600080fd5b506109b1610a91366004614a57565b612c33565b610359610aa43660046151b3565b612f95565b610359610ab7366004614a57565b613590565b348015610ac857600080fd5b50610359610ad7366004615233565b600560209081526000928352604080842090915290825290205460ff1681565b348015610b0357600080fd5b50610b17610b12366004614a29565b61370f565b6040516103659190615297565b348015610b3057600080fd5b506103c6610b3f366004615333565b61388f565b348015610b5057600080fd5b50610466610b5f3660046153a7565b613c60565b348015610b7057600080fd5b50610383604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b031983161480610bc657506380ac58cd60e01b6001600160e01b03198316145b80610be15750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610bf490615438565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090615438565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480610cbe57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d9c5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116610dc35760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160601b0316600160601b6001600160a01b038416908102919091179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff9104166005811115610eb657610eb6614bcf565b6005811115610ec757610ec7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f4657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f095790505b50505050508152505090508060e001515192508267ffffffffffffffff811115610f7257610f72614c62565b604051908082528060200260200182016040528015610fb757816020015b6040805180820190915260008082526020820152815260200190600190039081610f905790505b50915060005b8381101561106457600085905060208360e001518381518110610fe257610fe2615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260409081902081518083019092525492831681526401000000009092046001600160601b031692820192909252845185908490811061104757611047615472565b6020026020010181905250508061105d9061549e565b9050610fbd565b5050915091565b602081811b83176000818152600f909252604090912054906060908267ffffffffffffffff81111561109f5761109f614c62565b6040519080825280602002602001820160405280156110c8578160200160208202803683370190505b50915060005b83811015611150576000828152600f602052604090208054829081106110f6576110f6615472565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061112657611126615472565b6001600160a01b0390921660209283029190910190910152806111488161549e565b9150506110ce565b50509250929050565b6000818152600260205260409020546001600160a01b038481169116146111c25760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b03821661120c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b336001600160a01b038416148061124657506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061126757506000818152600460205260409020546001600160a01b031633145b6112a45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610cf7565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61133e838383611159565b6001600160a01b0382163b1561142357604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906154b7565b6001600160e01b031916146114235760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b505050565b600081815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff808216606085810191909152640100000000830482166080860152600160401b830490911660a0850152938593929160c084019160ff91041660058111156114c9576114c9614bcf565b60058111156114da576114da614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561155957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161151c5790505b505050505081525050905061156e8185613f67565b91508151925050915091565b60008082118015610be157506009546115949060016154d4565b821092915050565b60006115a98260016154d4565b90506009548111156115dc57600954604051637ae5968560e01b8152610cf7918391600401918252602082015260400190565b919050565b6006546001600160a01b031633146116215760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b805160000361164357604051637c946ed760e01b815260040160405180910390fd5b600861164f8282615535565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161167f9190614a16565b60405180910390a150565b600f60205281600052604060002081815481106116a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000818152600260205260409020546001600160a01b0316806115dc5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610cf7565b60088054610bf490615438565b60006001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610cf7565b506001600160a01b031660009081526003602052604090205490565b600d60205281600052604060002081815481106117c457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b900463ffffffff16905082565b600081815260136020908152604080832081516101008101835281546001600160601b0381168252600160601b908190046001600160a01b031694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a0840152849360c08401910460ff16600581111561188557611885614bcf565b600581111561189657611896614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561191557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116118d85790505b50505050508152505090506004600581111561193357611933614bcf565b8160c00151600581111561194957611949614bcf565b14611988578060c00151600581111561196457611964614bcf565b604051633c053f9d60e21b8152600481019190915260248101849052604401610cf7565b83518551146119b757845184516040516308151c1160e41b815260048101929092526024820152604401610cf7565b80602001516001600160a01b0316336001600160a01b031614611a0b5760208101516040516379f91cd360e01b81523360048201526001600160a01b03909116602482015260448101849052606401610cf7565b845160005b81811015611c3657600060116000898481518110611a3057611a30615472565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081205490931660a08a901b81178085526010909252919092205489519193506001600160601b03169081908a9086908110611a9557611a95615472565b60200260200101516001611aa991906155f5565b6001600160601b03161115611b0357600b8054829190600090611ad69084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555060009050611b87565b888481518110611b1557611b15615472565b6020908102919091010151600b8054600090611b3b9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550888481518110611b7157611b71615472565b602002602001015181611b84919061561c565b90505b600082815260106020526040902080546bffffffffffffffffffffffff19166001600160601b038316179055885188906001600160a01b038516907fa2e524bd0f71903485fbb3d6d50cb305f61005ceea2047c3ac92aa7e0d104306908c9088908110611bf657611bf6615472565b6020026020010151604051611c1a91906001600160601b0391909116815260200190565b60405180910390a350505080611c2f9061549e565b9050611a10565b5060019695505050505050565b6006546000906001600160a01b03163314611c865760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038316611cad5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055600190565b600c6020528160005260406000208181548110611cf857600080fd5b90600052602060002001600091509150505481565b60018054610bf490615438565b60006001600a541115611d40576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a55600b54600160601b90046001600160a01b03163314611d9257600b5460405163312d21ff60e11b8152336004820152600160601b9091046001600160a01b03166024820152604401610cf7565b50600b546001600160601b03168015611e7057600b80546bffffffffffffffffffffffff19169055604051600090339083908381818185875af1925050503d8060008114611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b5050905080611e395760405163cd3f165960e01b81526000600482015230602482015233604482015260648101839052608401610cf7565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2505b6001600a5590565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b03163314611f245760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038116611f4b5760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000806001600a541115611fbc576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146120015760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0384166120285760405163d92e233d60e01b815260040160405180910390fd5b600083815260136020526040902060056002820154600160601b900460ff16600581111561205857612058614bcf565b146120a1576002810154600160601b900460ff16600581111561207d5761207d614bcf565b604051633c053f9d60e21b8152600481019190915260248101859052604401610cf7565b60a084901b6001600160a01b038616176000818152600d6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561212957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900463ffffffff16818301528252600190920191016120dd565b50508251929350505060008190036121665760405163df2ddd7360e01b81526001600160a01b038916600482015260248101889052604401610cf7565b808460020160088282829054906101000a900463ffffffff16612189919061563c565b92506101000a81548163ffffffff021916908363ffffffff1602179055508360020160089054906101000a900463ffffffff1663ffffffff166000036121df5760028401805460ff60601b1916600160601b1790555b60005b818110156122a7576000889050602084838151811061220357612203615472565b60209081029190910181015181015163ffffffff1690911b919091176000818152600e90925260409091205461224a9064010000000090046001600160601b0316886154d4565b96506011600085848151811061226257612262615472565b602090810291909101810151516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055508061229f8161549e565b9150506121e2565b506000838152600d602052604081206122bf91614859565b6000838152601060205260409020546001600160601b0316808611156122ec57806001600160601b031695505b85156123e55760008481526010602052604080822080546bffffffffffffffffffffffff19169055516001600160a01b038b169088908381818185875af1925050503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b50509050806123a05760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038b16604482015260648101889052608401610cf7565b896001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d886040516123db91815260200190565b60405180910390a2505b60405188906001600160a01b038b16907f5ebf7fe30be09f0f03b9195632508d95c8b67bf010c93abda67f70d5d9599d1e90600090a350506001600a8190559793965092945050505050565b6000818152600c60209081526040808320805482518185028101850190935280835260609383018282801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050905080519150915091565b6006546001600160a01b031633146124d55760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b0381166124fc5760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b612551858585611159565b6001600160a01b0384163b1561262457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906125979033908a90899089908990600401615659565b6020604051808303816000875af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da91906154b7565b6001600160e01b031916146126245760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050505050565b6000818152601360205260408120600101546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061266e836140b8565b61267b608085901b6140b8565b60405160200161268e94939291906156ad565b604051602081830303815290604052915050919050565b6007546000906001600160a01b031633146126e85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006126f3836116c2565b9050876001600160a01b0316816001600160a01b03161461273a5760405163521eb56d60e11b81526001600160a01b03808a16600483015282166024820152604401610cf7565b600083815260136020908152604080832081516101008101835281546001600160601b03811682526001600160a01b03600160601b918290041694820194909452600182015492810192909252600281015463ffffffff8082166060850152640100000000820481166080850152600160401b82041660a08401529192909160c084019160ff91041660058111156127d4576127d4614bcf565b60058111156127e5576127e5614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561286457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116128275790505b50505050508152505090506001600581111561288257612882614bcf565b8160c00151600581111561289857612898614bcf565b146128b3578060c00151600581111561207d5761207d614bcf565b6128be888888614288565b63ffffffff85166060820152600060808201819052875167ffffffffffffffff8111156128ed576128ed614c62565b604051908082528060200260200182016040528015612916578160200160208202803683370190505b5090506000885167ffffffffffffffff81111561293557612935614c62565b60405190808252806020026020018201604052801561297a57816020015b60408051808201909152600080825260208201528152602001906001900390816129535790505b5090506000805b8a51811015612aaf5789818151811061299c5761299c615472565b60200260200101516000015163ffffffff16600003612a1157600088905060208c83815181106129ce576129ce615472565b60209081029190910181015163ffffffff1690911b919091176000908152600e9091526040902080546fffffffffffffffffffffffffffffffff19169055612a9d565b8a8181518110612a2357612a23615472565b6020026020010151848381518110612a3d57612a3d615472565b602002602001019063ffffffff16908163ffffffff1681525050898181518110612a6957612a69615472565b6020026020010151838381518110612a8357612a83615472565b60200260200101819052508180612a999061549e565b9250505b80612aa78161549e565b915050612981565b5060408401518b8114612ae6576000888152600c602090815260408083208054600181018255908452919092200182905585018c90525b612af3858585858c614398565b6000888152601360209081526040918290208751918801516001600160a01b0316600160601b9081026001600160601b03909316929092178155918701516001830155606087015160028301805460808a015160a08b015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c08a01518a9594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115612bc857612bc8614bcf565b021790555060e08201518051612be891600384019160209091019061487a565b50506040518d81528991507fff312ce131c4d73ac90ece91266be7090486c5e15f78b7ea2b108c36dfd475299060200160405180910390a25060019c9b505050505050505050505050565b6000806001600a541115612c5a576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314612c9f5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000612caa846116c2565b9050846001600160a01b0316816001600160a01b031614612cf15760405163521eb56d60e11b81526001600160a01b03808716600483015282166024820152604401610cf7565b600084815260136020526040902060016002820154600160601b900460ff166005811115612d2157612d21614bcf565b1480612d4c575060056002820154600160601b900460ff166005811115612d4a57612d4a614bcf565b145b15612d95576002810154600160601b900460ff166005811115612d7157612d71614bcf565b604051633c053f9d60e21b8152600481019190915260248101869052604401610cf7565b6002810154600160401b900463ffffffff1615612dcf5760028101805460ff60601b19166c05000000000000000000000000179055612de5565b60028101805460ff60601b1916600160601b1790555b60005b6003820154811015612e725760008690506020836003018381548110612e1057612e10615472565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16901b81179050600f60008281526020019081526020016000206000612e619190614929565b50612e6b8161549e565b9050612de8565b5080546040516001600160601b0390911693506000906001600160a01b0388169085908381818185875af1925050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f135760405163cd3f165960e01b8152600060048201523060248201526001600160a01b038816604482015260648101859052608401610cf7565b866001600160a01b03167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d85604051612f4e91815260200190565b60405180910390a260405186907fe45f5b9540df4f71b7e044809fa318806328c1ea2388a70c7373d97ccf8a0faa90600090a250506001600a819055959194509092505050565b6007546000906001600160a01b03163314612fd85760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b815183511461300757825182516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000848152601360205260409020600280820154600160601b900460ff16600581111561303657613036614bcf565b1461305b576002810154600160601b900460ff166005811115612d7157612d71614bcf565b83516000805b82811015613150576000889050602087838151811061308257613082615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e845260408082208151808301909252549384168082526401000000009094046001600160601b0316948101949094529092919003613123578783815181106130ee576130ee615472565b60200260200101518a6040516332832be560e21b8152600401610cf792919063ffffffff929092168252602082015260400190565b602081015161313b906001600160601b0316856154d4565b93505050806131499061549e565b9050613061565b5080341461318157604051637ebbcab960e11b81523460048201526024810182905260448101889052606401610cf7565b6001600160a01b0388811660009081526011602052604090205416156131bd576040516322ddebd960e21b815260048101889052602401610cf7565b60a087901b6001600160a01b0389161760005b838110156134b15760008882815181106131ec576131ec615472565b60200260200101519050600088838151811061320a5761320a615472565b60200260200101519050816001600160a01b03168c6001600160a01b031603613249576040516322ddebd960e21b8152600481018c9052602401610cf7565b6001600160a01b0382811660009081526011602052604090205416156132a0576001600160a01b038281166000908152601160205260409081902054905163631695bd60e01b815291166004820152602401610cf7565b60008b905060208a85815181106132b9576132b9615472565b60209081029190910181015163ffffffff90811690921b929092176000818152600e8452604080822054600f90955290205490929091169003613312576040516304ad100760e21b8152600481018d9052602401610cf7565b6000818152600f602090815260408083208054600181810183559185528385200180546001600160a01b03808a166001600160a01b031990921682179092558a8652600d8552838620845180860190955290845263ffffffff8089168587019081528254948501835591875294909520925192909101805494518416600160a01b0277ffffffffffffffffffffffffffffffffffffffffffffffff19909516929091169190911792909217909155600289018054600160401b90049091169060086133dc8361573f565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c60116000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b03168c8e6001600160a01b03167f6835389a6da5341647f18cbe0a89c56f473f4c17bfaee6e6d07d61f1928e0b7c85604051613495919063ffffffff91909116815260200190565b60405180910390a4505050806134aa9061549e565b90506131d0565b50600284015463ffffffff64010000000082048116600160401b90920416036134f35760028401805460ff60601b19166c030000000000000000000000001790555b6000818152601060205260408120805434929061351a9084906001600160601b03166155f5565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550886001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161357991815260200190565b60405180910390a250600198975050505050505050565b6007546000906001600160a01b031633146135d35760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b60006135de836116c2565b9050836001600160a01b0316816001600160a01b0316146136255760405163521eb56d60e11b81526001600160a01b03808616600483015282166024820152604401610cf7565b600083815260136020526040902060016002820154600160601b900460ff16600581111561365557613655614bcf565b1461367657604051635960d22f60e11b815260048101859052602401610cf7565b80546001600160601b031634146136bb578054604051631c30abbb60e31b81523460048201526001600160601b03909116602482015260448101859052606401610cf7565b60028101805460ff60601b19166c0200000000000000000000000017905560405184907fa48b531f972c0e4aca57afcc5c099c52a7bd21bc5e2a1b733eec3be9e88da97a90600090a2506001949350505050565b6137576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b60008281526013602090815260409182902082516101008101845281546001600160601b0381168252600160601b908190046001600160a01b031693820193909352600182015493810193909352600281015463ffffffff8082166060860152640100000000820481166080860152600160401b82041660a0850152909160c08401910460ff1660058111156137ef576137ef614bcf565b600581111561380057613800614bcf565b81526020016003820180548060200260200160405190810160405280929190818152602001828054801561387f57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116138425790505b5050505050815250509050919050565b60006001600a5411156138b5576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146138fa5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6000613905856116c2565b9050856001600160a01b0316816001600160a01b03161461394c5760405163521eb56d60e11b81526001600160a01b03808816600483015282166024820152604401610cf7565b6001600160a01b03841660009081526012602052604090205460ff1661398f5760405162a2307960e51b81526001600160a01b0385166004820152602401610cf7565b600085815260136020526040902060036002820154600160601b900460ff1660058111156139bf576139bf614bcf565b14613a08576002810154600160601b900460ff1660058111156139e4576139e4614bcf565b604051633c053f9d60e21b8152600481019190915260248101879052604401610cf7565b604080516101008101825282546001600160601b0381168252600160601b908190046001600160a01b03166020830152600184015492820192909252600283015463ffffffff8082166060840152640100000000820481166080840152600160401b82041660a0830152600092613b359291859160c08401910460ff166005811115613a9657613a96614bcf565b6005811115613aa757613aa7614bcf565b815260200160038201805480602002602001604051908101604052809291908181526020018280548015613b2657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613ae95790505b50505050508152505088613f67565b6002830154604051631e731b7560e31b81529192506001600160a01b0388169163f398dba891613b7291859163ffffffff16908a90600401615762565b6020604051808303816000875af1158015613b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb5919061579d565b82546001600160601b0316600160601b6001600160a01b03831690810291909117845560028401805460ff60601b19166c040000000000000000000000001790556040519195509088907f2d53f895cd5faf3cddba94a25c2ced2105885b5b37450ff430ffa3cbdf332c7490600090a360405187907fa133ed72c03a7d008deaae618a61613c4fd41c67bba1cad1a6bc0a1c5a9c156e90600090a250506001600a5550949350505050565b60006001600a541115613c86576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b03163314613ccb5760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610cf7565b6001600160a01b038616613cf25760405163d92e233d60e01b815260040160405180910390fd5b613cfd858585614288565b60005b8451811015613d9157838181518110613d1b57613d1b615472565b60200260200101516000015163ffffffff1660001480613d615750838181518110613d4857613d48615472565b6020026020010151602001516001600160601b03166000145b15613d7f57604051637c946ed760e01b815260040160405180910390fd5b80613d898161549e565b915050613d00565b505060095480613da08161549e565b915050613deb6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529060c08201908152602001606081525090565b63ffffffff8316606082015260408101869052600160c082018181525050613e17818686885186614398565b6000828152601360209081526040918290208351918401516001600160a01b0316600160601b9081026001600160601b039093169290921781559183015160018301556060830151600283018054608086015160a087015163ffffffff908116600160401b026bffffffff0000000000000000199282166401000000000267ffffffffffffffff199094169190951617919091179081168317825560c0860151869594909360ff60601b19166cffffffffff0000000000000000199092169190911790836005811115613eec57613eec614bcf565b021790555060e08201518051613f0c91600384019160209091019061487a565b5050506009829055613f1e878361464f565b817fb34c1e02384201736eb4693b9b173306cb41bff12f15894dea5773088e9a3b1c87604051613f5091815260200190565b60405180910390a2506001600a5595945050505050565b60608260a0015163ffffffff1667ffffffffffffffff811115613f8c57613f8c614c62565b604051908082528060200260200182016040528015613fb5578160200160208202803683370190505b5090506000805b8460e00151518110156140b057600084905060208660e001518381518110613fe657613fe6615472565b602002602001015163ffffffff16901b8117905060005b6000828152600f602052604090205481101561409b576000828152600f6020526040902080548290811061403357614033615472565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061406357614063615472565b6001600160a01b0390921660209283029190910190910152836140858161549e565b94505080806140939061549e565b915050613ffd565b505080806140a89061549e565b915050613fbc565b505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790614224827f06060606060606060606060606060606060606060606060606060606060606066154d4565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f16602761425491906157ba565b61427e827f30303030303030303030303030303030303030303030303030303030303030306154d4565b610be191906154d4565b60008390036142aa57604051637c946ed760e01b815260040160405180910390fd5b815115806142ba57508051825114155b156142e557815181516040516308151c1160e41b815260048101929092526024820152604401610cf7565b6000805b8351811015612624576142fd8260016154d4565b84828151811061430f5761430f615472565b602002602001015163ffffffff1610156143635783818151811061433557614335615472565b6020026020010151604051632ab10b0b60e21b8152600401610cf7919063ffffffff91909116815260200190565b83818151811061437557614375615472565b602002602001015163ffffffff16915080806143909061549e565b9150506142e9565b60008267ffffffffffffffff8111156143b3576143b3614c62565b6040519080825280602002602001820160405280156143dc578160200160208202803683370190505b5060e087015260005b8381101561456c578581815181106143ff576143ff615472565b60200260200101518760e00151828151811061441d5761441d615472565b63ffffffff909216602092830291909101820152865184919088908490811061444857614448615472565b602002602001015163ffffffff16901b8117905085828151811061446e5761446e615472565b6020908102919091018101516000838152600e8352604090208151815492909301516001600160601b0316640100000000026fffffffffffffffffffffffffffffffff1990921663ffffffff9093169290921717905585518690839081106144d8576144d8615472565b602002602001015160000151886080018181516144f591906157d1565b63ffffffff1690525085516001600160601b0384169087908490811061451d5761451d615472565b6020026020010151602001516001600160601b031611156145595785828151811061454a5761454a615472565b60200260200101516020015192505b50806145648161549e565b9150506143e5565b506001600160601b0381168652608086015160009061458c9060026157ee565b6145979060016157d1565b63ffffffff1690506145aa600382615824565b6000036145c3576145bc600382615838565b90506145dc565b6145ce600382615838565b6145d99060016154d4565b90505b80876060015163ffffffff1610806146075750866080015163ffffffff16876060015163ffffffff16115b15614646576060870151608088015160405163eb3a8ba360e01b815263ffffffff92831660048201526024810184905291166044820152606401610cf7565b50505050505050565b614659828261473f565b6001600160a01b0382163b1561473b57604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af11580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f191906154b7565b6001600160e01b0319161461473b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610cf7565b5050565b6001600160a01b0382166147895760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610cf7565b6000818152600260205260409020546001600160a01b0316156147ee5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610cf7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460008255906000526020600020908101906148779190614947565b50565b828054828255906000526020600020906007016008900481019282156149195791602002820160005b838211156148e757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026148a3565b80156149175782816101000a81549063ffffffff02191690556004016020816003010492830192600103026148e7565b505b50614925929150614977565b5090565b50805460008255906000526020600020908101906148779190614977565b5b8082111561492557805477ffffffffffffffffffffffffffffffffffffffffffffffff19168155600101614948565b5b808211156149255760008155600101614978565b6001600160e01b03198116811461487757600080fd5b6000602082840312156149b457600080fd5b81356149bf8161498c565b9392505050565b60005b838110156149e15781810151838201526020016149c9565b50506000910152565b60008151808452614a028160208601602086016149c6565b601f01601f19169290920160200192915050565b6020815260006149bf60208301846149ea565b600060208284031215614a3b57600080fd5b5035919050565b6001600160a01b038116811461487757600080fd5b60008060408385031215614a6a57600080fd5b8235614a7581614a42565b946020939093013593505050565b600060208284031215614a9557600080fd5b81356149bf81614a42565b6000604080830185845260208281860152818651808452606087019150828801935060005b81811015614af9578451805163ffffffff1684528401516001600160601b0316848401529383019391850191600101614ac5565b509098975050505050505050565b60008060408385031215614b1a57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614b625781516001600160a01b031687529582019590820190600101614b3d565b509495945050505050565b828152604060208201526000614b866040830184614b29565b949350505050565b600080600060608486031215614ba357600080fd5b8335614bae81614a42565b92506020840135614bbe81614a42565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60068110614c0357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03881681526001600160a01b03871660208201526040810186905263ffffffff85811660608301528481166080830152831660a082015260e08101614c5660c0830184614be5565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614c9b57614c9b614c62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cca57614cca614c62565b604052919050565b600067ffffffffffffffff831115614cec57614cec614c62565b614cff601f8401601f1916602001614ca1565b9050828152838383011115614d1357600080fd5b828260208301376000602084830101529392505050565b600060208284031215614d3c57600080fd5b813567ffffffffffffffff811115614d5357600080fd5b8201601f81018413614d6457600080fd5b614b8684823560208401614cd2565b600067ffffffffffffffff821115614d8d57614d8d614c62565b5060051b60200190565b600082601f830112614da857600080fd5b81356020614dbd614db883614d73565b614ca1565b82815260059290921b84018101918181019086841115614ddc57600080fd5b8286015b84811015614e00578035614df381614a42565b8352918301918301614de0565b509695505050505050565b80356001600160601b03811681146115dc57600080fd5b600080600060608486031215614e3757600080fd5b833567ffffffffffffffff80821115614e4f57600080fd5b614e5b87838801614d97565b9450602091508186013581811115614e7257600080fd5b86019050601f81018713614e8557600080fd5b8035614e93614db882614d73565b81815260059190911b82018301908381019089831115614eb257600080fd5b928401925b82841015614ed757614ec884614e0b565b82529284019290840190614eb7565b96999698505050506040949094013593505050565b60008060408385031215614eff57600080fd5b8235614f0a81614a42565b915060208301358015158114614f1f57600080fd5b809150509250929050565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f6b57845183529383019391830191600101614f4f565b5090979650505050505050565b600080600080600060808688031215614f9057600080fd5b8535614f9b81614a42565b94506020860135614fab81614a42565b935060408601359250606086013567ffffffffffffffff80821115614fcf57600080fd5b818801915088601f830112614fe357600080fd5b813581811115614ff257600080fd5b89602082850101111561500457600080fd5b9699959850939650602001949392505050565b803563ffffffff811681146115dc57600080fd5b600082601f83011261503c57600080fd5b8135602061504c614db883614d73565b82815260059290921b8401810191818101908684111561506b57600080fd5b8286015b84811015614e005761508081615017565b835291830191830161506f565b600082601f83011261509e57600080fd5b813560206150ae614db883614d73565b82815260069290921b840181019181810190868411156150cd57600080fd5b8286015b84811015614e0057604081890312156150ea5760008081fd5b6150f2614c78565b6150fb82615017565b8152615108858301614e0b565b818601528352918301916040016150d1565b60008060008060008060c0878903121561513357600080fd5b863561513e81614a42565b955060208701359450604087013567ffffffffffffffff8082111561516257600080fd5b61516e8a838b0161502b565b9550606089013591508082111561518457600080fd5b5061519189828a0161508d565b9350506151a060808801615017565b915060a087013590509295509295509295565b600080600080608085870312156151c957600080fd5b84356151d481614a42565b935060208501359250604085013567ffffffffffffffff808211156151f857600080fd5b61520488838901614d97565b9350606087013591508082111561521a57600080fd5b506152278782880161502b565b91505092959194509250565b6000806040838503121561524657600080fd5b823561525181614a42565b91506020830135614f1f81614a42565b600081518084526020808501945080840160005b83811015614b6257815163ffffffff1687529582019590820190600101615275565b602081526001600160601b0382511660208201526001600160a01b03602083015116604082015260408201516060820152600060608301516152e1608084018263ffffffff169052565b50608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015161531860e0840182614be5565b5060e083015161010083810152614b86610120840182615261565b6000806000806080858703121561534957600080fd5b843561535481614a42565b935060208501359250604085013561536b81614a42565b9150606085013567ffffffffffffffff81111561538757600080fd5b8501601f8101871361539857600080fd5b61522787823560208401614cd2565b600080600080600060a086880312156153bf57600080fd5b85356153ca81614a42565b945060208601359350604086013567ffffffffffffffff808211156153ee57600080fd5b6153fa89838a0161502b565b9450606088013591508082111561541057600080fd5b5061541d8882890161508d565b92505061542c60808701615017565b90509295509295909350565b600181811c9082168061544c57607f821691505b60208210810361546c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154b0576154b0615488565b5060010190565b6000602082840312156154c957600080fd5b81516149bf8161498c565b80820180821115610be157610be1615488565b601f82111561142357600081815260208120601f850160051c8101602086101561550e5750805b601f850160051c820191505b8181101561552d5782815560010161551a565b505050505050565b815167ffffffffffffffff81111561554f5761554f614c62565b6155638161555d8454615438565b846154e7565b602080601f83116001811461559857600084156155805750858301515b600019600386901b1c1916600185901b17855561552d565b600085815260208120601f198616915b828110156155c7578886015182559484019460019091019084016155a8565b50858210156155e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0381811683821601908082111561561557615615615488565b5092915050565b6001600160601b0382811682821603908082111561561557615615615488565b63ffffffff82811682821603908082111561561557615615615488565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60008086546156bb81615438565b600182811680156156d357600181146156e857615717565b60ff1984168752821515830287019450615717565b8a60005260208060002060005b8581101561570e5781548a8201529084019082016156f5565b50505082870194505b50505050855161572b818360208a016149c6565b019384525050602082015260400192915050565b600063ffffffff80831681810361575857615758615488565b6001019392505050565b6060815260006157756060830186614b29565b63ffffffff85166020840152828103604084015261579381856149ea565b9695505050505050565b6000602082840312156157af57600080fd5b81516149bf81614a42565b8082028115828204841417610be157610be1615488565b63ffffffff81811683821601908082111561561557615615615488565b63ffffffff8181168382160280821691908281146140b0576140b0615488565b634e487b7160e01b600052601260045260246000fd5b6000826158335761583361580e565b500690565b6000826158475761584761580e565b50049056fea2646970667358221220ee3dd136eb9c3aaae80969db0d981f4555af6520415662932908c79dee30e48b64736f6c63430008130033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/dvilela/contracts/olas_treasury/contract.py b/packages/dvilela/contracts/olas_treasury/contract.py index af043a6..8e4474b 100644 --- a/packages/dvilela/contracts/olas_treasury/contract.py +++ b/packages/dvilela/contracts/olas_treasury/contract.py @@ -49,6 +49,7 @@ def get_events( event_name: str, from_block: int, to_block: Union[int, str] = "latest", + chain_name: str = "ethereum", ) -> Optional[JSONLike]: """Get events.""" contract_instance = cls.get_instance(ledger_api, contract_address) diff --git a/packages/dvilela/contracts/olas_treasury/contract.yaml b/packages/dvilela/contracts/olas_treasury/contract.yaml index 6e03d40..56cdf81 100644 --- a/packages/dvilela/contracts/olas_treasury/contract.yaml +++ b/packages/dvilela/contracts/olas_treasury/contract.yaml @@ -7,9 +7,8 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeigv5vccsux5xbgxdowpxet2qwzyym6jzxxycvuuf3bqpaxe6zpaem - build/ServiceRegistry.json: bafybeia4qi2vstrutejzrxfpbb6eift7va5cjs7bparaal2fafiiczuiyy - build/ServiceRegistryL2.json: bafybeic2jylwfod4nmdtbs4izyxyi246pd3f35aoqyahnmyrvzn7j3sv4e - contract.py: bafybeihnyvspubuhfxveaxfzb2pqvgpzkoz7hrvq6oq32ixkyyozjhplga + build/OlasTreasury.json: bafybeier45zqqza5guhusfhchu6d63yktigfxvojq4so2ftmslxeezbk3m + contract.py: bafybeienzxhlb2yxnypeidl32nihie7bmlak4nbbnconft4eqvbyq72r5q fingerprint_ignore_patterns: [] contracts: [] class_name: OlasTreasuryContract diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index 822b874..e8985c7 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibh5bgshii5oqjfuhwmiivfvfqy7fw5pzvarxkpe4qrgivxtc3xym fingerprint_ignore_patterns: [] -agent: dvilela/tsunami:0.1.0:bafybeihrx3thfxgyoeez4yb3rvta3k3qdghex53nbyyo6ihisewahcw3be +agent: dvilela/tsunami:0.1.0:bafybeidfrp3tabbdwbblk5rhyyndvghxmelvyaklbfr5lcgxbntrxbrtwi number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index ab85802..60dfba5 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -27,6 +27,8 @@ connections: - valory/http_server:0.22.0:bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m contracts: - dvilela/olas_registries:0.1.0:bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa +- dvilela/olas_tokenomics:0.1.0:bafybeibmpcw6it2zbmu5ttpnqpnn4aafvrij3abzifkqmvswjnysnclkeu +- dvilela/olas_treasury:0.1.0:bafybeihbne26js7q73m3lgddun4nlps36dmf4u7pwdryyr7h5povsvklni protocols: - valory/contract_api:1.0.0:bafybeidgu7o5llh26xp3u3ebq3yluull5lupiyeu6iooi2xyymdrgnzq5i - valory/ledger_api:1.0.0:bafybeihdk6psr4guxmbcrc26jr2cbgzpd5aljkqvpwo64bvaz7tdti2oni diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index 445ef3b..277c085 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- dvilela/tsunami_abci:0.1.0:bafybeib6sbveqpns35ahs75ai6wrdlevftffeqrx5i4lx2rbcmoqqdktvm +- dvilela/tsunami_abci:0.1.0:bafybeid33vcxz7nt5y2vpjantbm6xpx7psbnge7mlx4flcv36kwm2rn4ee behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index 7ec69f9..d230152 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -2,16 +2,16 @@ "dev": { "protocol/dvilela/kv_store/0.1.0": "bafybeihimf5f37uupxmugvagmaxworgmz7cxuqpikkyzlgldtbq46jbvci", "contract/dvilela/olas_registries/0.1.0": "bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa", - "contract/dvilela/olas_tokenomics/0.1.0": "bafybeiaeyxsrdzqqpujrj3lljvioejeebinu6wjgtjwpmje7epajbq3xse", - "contract/dvilela/olas_treasury/0.1.0": "bafybeiewi7wvsjxwly6iem2id6plzmhnuesnuvabt25tppmeixiw5t6nxe", + "contract/dvilela/olas_tokenomics/0.1.0": "bafybeibmpcw6it2zbmu5ttpnqpnn4aafvrij3abzifkqmvswjnysnclkeu", + "contract/dvilela/olas_treasury/0.1.0": "bafybeihbne26js7q73m3lgddun4nlps36dmf4u7pwdryyr7h5povsvklni", "connection/dvilela/kv_store/0.1.0": "bafybeiekugvb2kan4342hliluxl3h5och3fjwqoafdyttpcn57evvyztq4", "connection/dvilela/llama/0.1.0": "bafybeiauzzq2pxmn4brdqgdyxrrikbc5ywjpmetlajyohute5qtnn37aqq", "connection/valory/twitter/0.1.0": "bafybeihotqawulig3g4a7fosi4pljsjii2neiqxtepd42e2neemhqecfcq", "connection/dvilela/suno/0.1.0": "bafybeihy2phtjwbz27ntv55wxfk754kp5tjceujzsdbppjafljoydjflhi", - "skill/dvilela/tsunami_abci/0.1.0": "bafybeib6sbveqpns35ahs75ai6wrdlevftffeqrx5i4lx2rbcmoqqdktvm", - "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeigiiisvp727vahqsfj2gvstnywjc6qaozfeehamcf35i2jnwrmxl4", - "agent/dvilela/tsunami/0.1.0": "bafybeihrx3thfxgyoeez4yb3rvta3k3qdghex53nbyyo6ihisewahcw3be", - "service/dvilela/tsunami/0.1.0": "bafybeic2x3seor7yrym2kjx75q4w74mlvkuiexwhjfm44cy6yzpzol4v5u" + "skill/dvilela/tsunami_abci/0.1.0": "bafybeid33vcxz7nt5y2vpjantbm6xpx7psbnge7mlx4flcv36kwm2rn4ee", + "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeie2ymexe5xedc6vgvsav44hkoh72weoot4f5illc4lwtelmx2itgq", + "agent/dvilela/tsunami/0.1.0": "bafybeidfrp3tabbdwbblk5rhyyndvghxmelvyaklbfr5lcgxbntrxbrtwi", + "service/dvilela/tsunami/0.1.0": "bafybeibu5334y5udd6psuayvlaoptry6ksgrttq6qhenloxrxbsiixdkbu" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", From e712b2acd30702778d53db969ea493022dcb123d Mon Sep 17 00:00:00 2001 From: dvilela Date: Thu, 13 Jun 2024 23:39:39 +0200 Subject: [PATCH 4/7] fix: decouple event process functions --- .../dvilela/agents/tsunami/aea-config.yaml | 5 +- .../dvilela/services/tsunami/service.yaml | 3 +- .../dvilela/skills/tsunami_abci/behaviours.py | 213 +++++++++++------- .../dvilela/skills/tsunami_abci/skill.yaml | 2 +- .../skills/tsunami_chained_abci/skill.yaml | 2 +- packages/packages.json | 8 +- scripts/aea-config-replace.py | 4 + 7 files changed, 150 insertions(+), 87 deletions(-) diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index 9700ece..b14dff3 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -47,8 +47,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/registration_abci:0.1.0:bafybeieu7vq3pyns4t5ty6u3sbmpkd7yznpg3rmqifoz3jhy7pmqyg3w6q - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie -- dvilela/tsunami_abci:0.1.0:bafybeid33vcxz7nt5y2vpjantbm6xpx7psbnge7mlx4flcv36kwm2rn4ee -- dvilela/tsunami_chained_abci:0.1.0:bafybeie2ymexe5xedc6vgvsav44hkoh72weoot4f5illc4lwtelmx2itgq +- dvilela/tsunami_abci:0.1.0:bafybeia6jg3ycxfgxkm2tof7t2rkoevcrep5mk24w4k23iywmgzn6256ru +- dvilela/tsunami_chained_abci:0.1.0:bafybeicnqa7swnuzfqqzugn6nhejhxatzg2fp7x4kxmxn5ipyhyjroltpe default_ledger: ethereum required_ledgers: - ethereum @@ -239,4 +239,5 @@ public_id: valory/http_server:0.22.0:bafybeicblltx7ha3ulthg7bzfccuqqyjmihhrvfezt type: connection config: host: ${str:0.0.0.0} + port: ${int:8000} target_skill_id: dvilela/tsunami_chained_abci:0.1.0 diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index e8985c7..e88e1f1 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibh5bgshii5oqjfuhwmiivfvfqy7fw5pzvarxkpe4qrgivxtc3xym fingerprint_ignore_patterns: [] -agent: dvilela/tsunami:0.1.0:bafybeidfrp3tabbdwbblk5rhyyndvghxmelvyaklbfr5lcgxbntrxbrtwi +agent: dvilela/tsunami:0.1.0:bafybeiapxepyznrq2tsixmjgl6vcbf3iisqut63nek3uxbdm5umpqjh3kq number_of_agents: 1 deployment: agent: @@ -178,4 +178,5 @@ public_id: valory/http_server:0.22.0:bafybeicblltx7ha3ulthg7bzfccuqqyjmihhrvfezt type: connection config: host: ${HTTP_SERVER_HOST:str:0.0.0.0} + port: ${HTTP_SERVER_PORT:int:8000} target_skill_id: dvilela/tsunami_chained_abci:0.1.0 diff --git a/packages/dvilela/skills/tsunami_abci/behaviours.py b/packages/dvilela/skills/tsunami_abci/behaviours.py index c499dfe..991a2a0 100644 --- a/packages/dvilela/skills/tsunami_abci/behaviours.py +++ b/packages/dvilela/skills/tsunami_abci/behaviours.py @@ -235,6 +235,7 @@ def __init__(self, **kwargs: Any): "event_to_template": { "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], }, + "build_thread_function": self.build_registry_tweet, }, "agent_registry": { "contract_id": str(OlasRegistriesContract.contract_id), @@ -242,6 +243,7 @@ def __init__(self, **kwargs: Any): "event_to_template": { "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["agent_minted"] }, + "build_thread_function": self.build_registry_tweet, }, "component_registry": { "contract_id": str(OlasRegistriesContract.contract_id), @@ -249,6 +251,7 @@ def __init__(self, **kwargs: Any): "event_to_template": { "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["component_minted"] }, + "build_thread_function": self.build_registry_tweet, }, "tokenomics": { "contract_id": str(OlasTokenomicsContract.contract_id), @@ -256,6 +259,7 @@ def __init__(self, **kwargs: Any): "event_to_template": { "EpochSettled": EVENT_USER_PROMPT_TEMPLATES["epoch_settled"] }, + "build_thread_function": self.build_tokenomics_tweet, }, "treasury": { "contract_id": str(OlasTreasuryContract.contract_id), @@ -265,6 +269,7 @@ def __init__(self, **kwargs: Any): "donation_sent" ] }, + "build_thread_function": self.build_treasury_tweet, }, }, "gnosis": { @@ -578,6 +583,123 @@ def build_thread( return thread + def get_token_uri( + self, chain_id: str, contract_id: str, contract_address: str, unit_id: str + ) -> Generator[None, None, Optional[str]]: + """Get registries events""" + + self.context.logger.info( + f"Retrieving uri for unit_id {unit_id} on contract {chain_id}::{contract_id}::{contract_address}" + ) + + contract_api_msg = yield from self.get_contract_api_response( + performative=ContractApiMessage.Performative.GET_STATE, # type: ignore + contract_address=contract_address, + contract_id=contract_id, + contract_callable="get_token_uri", + unit_id=unit_id, + chain_id=chain_id, + ) + + if contract_api_msg.performative != ContractApiMessage.Performative.STATE: + self.context.logger.info( + f"Error retrieving the events [{contract_api_msg.performative}]" + ) + return None + + uri = cast(dict, contract_api_msg.state.body)["result"] + + self.context.logger.info(f"Got uri: {uri}") + + return uri + + def build_registry_tweet( + self, + chain_id, + contract_id, + contract_name, + contract_address, + event_name, + event, + event_template, + ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: + """Build a thread for a registry event""" + + unit_type = "service" if contract_name == "service_registry" else "unit" + component_type = contract_name.split("_", maxsplit=1)[ + 0 + ] # service, agent or component + + self.context.logger.info(f"Processing event {event}") + + unit_id = getattr(event.args, f"{unit_type}Id") + + kwargs = { + "unit_id": unit_id, + "chain_name": chain_id, + } + + user_prompt = event_template.format(**kwargs) + + # Get token URI + uri = yield from self.get_token_uri( + chain_id, contract_id, contract_address, unit_id + ) + + if uri is None: + self.context.logger.error( + f"Error while retieving uri: {uri}\n. Skipping event {chain_id}:{contract_name}:{event_name}:{event}..." + ) + return None + + # Get unit data + self.context.logger.info("Getting token data...") + response = yield from self.get_http_response( # type: ignore + method="GET", url=uri + ) + + if response.status_code != HTTP_OK: # type: ignore + self.context.logger.error( + f"Error while download token data: {response}\n. Skipping event {chain_id}:{contract_name}:{event_name}:{event}...\n{response}" # type: ignore + ) + return None + + response_json = json.loads(response.body) # type: ignore + self.context.logger.info(f"Got token data: {response_json}") + + unit_name = response_json["name"] + unit_description = response_json["description"] + user_prompt += f" The {unit_type}'s name is {unit_name}. Its description is: {unit_description}'" + unit_url = f"{OLAS_REGISTRY_URL}/{chain_id}/{component_type}s/{unit_id}" + + thread = yield from self.build_thread(user_prompt) + + return thread, unit_url + + def build_tokenomics_tweet( + self, + chain_id, + contract_id, + contract_name, + contract_address, + event_name, + event, + event_template, + ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: + """Build a thread for a tokenomics event""" + + def build_treasury_tweet( + self, + chain_id, + contract_id, + contract_name, + contract_address, + event_name, + event, + event_template, + ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: + """Build a thread for a treasury event""" + class TrackChainEventsBehaviour( TsunamiBaseBehaviour @@ -663,10 +785,6 @@ def build_tweets( # pylint: disable=too-many-locals,too-many-statements for contract_name, contract_data in contracts_data.items(): contract_id = contract_data["contract_id"] contract_address = contract_data["contract_address"] - unit_type = "service" if contract_name == "service_registry" else "unit" - component_type = contract_name.split("_", maxsplit=1)[ - 0 - ] # service, agent or component # Event type loop for event_name, event_template in contract_data[ @@ -694,58 +812,27 @@ def build_tweets( # pylint: disable=too-many-locals,too-many-statements # Event loop for event in events: - self.context.logger.info(f"Processing event {event}") - - unit_id = getattr(event.args, f"{unit_type}Id") - - kwargs = { - "unit_id": unit_id, - "chain_name": chain_id, - } - - user_prompt = event_template.format(**kwargs) - - # Get token URI - uri = yield from self.get_token_uri( - chain_id, contract_id, contract_address, unit_id - ) - - if uri is None: - self.context.logger.error( - f"Error while retieving uri: {ledger_api_response}\n. Skipping event {chain_id}:{contract_name}:{event_name}:{event}..." - ) - continue - - # Get unit data - self.context.logger.info("Getting token data...") - response = yield from self.get_http_response( # type: ignore - method="GET", url=uri + build_thread_function = contract_data["build_thread_function"] + + thread, link = yield from build_thread_function( + chain_id, + contract_id, + contract_name, + contract_address, + event_name, + event, + event_template, ) - if response.status_code != HTTP_OK: # type: ignore - self.context.logger.error( - f"Error while download token data: {ledger_api_response}\n. Skipping event {chain_id}:{contract_name}:{event_name}:{event}...\n{response}" # type: ignore - ) - continue - - response_json = json.loads(response.body) # type: ignore - self.context.logger.info(f"Got token data: {response_json}") - - unit_name = response_json["name"] - unit_description = response_json["description"] - user_prompt += f" The {unit_type}'s name is {unit_name}. Its description is: {unit_description}'" - unit_url = f"{OLAS_REGISTRY_URL}/{chain_id}/{component_type}s/{unit_id}" - - thread = yield from self.build_thread(user_prompt) - if thread is None: self.context.logger.error( "Error while building thread. Skipping..." ) continue - # Add a link to the unit - thread.append(unit_url) + # Add a link to the event + if link: + thread.append(link) tweets.append( { @@ -811,36 +898,6 @@ def get_events( # pylint: disable=too-many-arguments return events, latest_block - def get_token_uri( - self, chain_id: str, contract_id: str, contract_address: str, unit_id: str - ) -> Generator[None, None, Optional[str]]: - """Get registries events""" - - self.context.logger.info( - f"Retrieving uri for unit_id {unit_id} on contract {chain_id}::{contract_id}::{contract_address}" - ) - - contract_api_msg = yield from self.get_contract_api_response( - performative=ContractApiMessage.Performative.GET_STATE, # type: ignore - contract_address=contract_address, - contract_id=contract_id, - contract_callable="get_token_uri", - unit_id=unit_id, - chain_id=chain_id, - ) - - if contract_api_msg.performative != ContractApiMessage.Performative.STATE: - self.context.logger.info( - f"Error retrieving the events [{contract_api_msg.performative}]" - ) - return None - - uri = cast(dict, contract_api_msg.state.body)["result"] - - self.context.logger.info(f"Got uri: {uri}") - - return uri - class TrackReposBehaviour(TsunamiBaseBehaviour): # pylint: disable=too-many-ancestors """TrackReposBehaviour""" diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index 60dfba5..af7e20b 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeiaicsttkv5xapta2eqove7si2pyv3zmshkqolluxpnrh3hkulqsqu - behaviours.py: bafybeidcdesx4vij5sjuog6sozjt3ls5fmh3ul3lbdr54giw3fjmpqtfse + behaviours.py: bafybeigznfeygktvfttonltktxuqi6tlrnwuo66sf7rsc7p6mn4ffhrjwy dialogues.py: bafybeidmgjji6zw6wcvhijrxb74batj2kc2lskfuqxv76duv2j7azcqwra fsm_specification.yaml: bafybeidlfuabsldhezjaovupkvzrtydpcimzz6r56phsi2psrtdzougu4u handlers.py: bafybeigjy73h3uaroovfuuo3ugffrm3oq6pntz5me7nrbsbiwwjceztj5m diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index 277c085..cbcded1 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- dvilela/tsunami_abci:0.1.0:bafybeid33vcxz7nt5y2vpjantbm6xpx7psbnge7mlx4flcv36kwm2rn4ee +- dvilela/tsunami_abci:0.1.0:bafybeia6jg3ycxfgxkm2tof7t2rkoevcrep5mk24w4k23iywmgzn6256ru behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index d230152..1b030fa 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -8,10 +8,10 @@ "connection/dvilela/llama/0.1.0": "bafybeiauzzq2pxmn4brdqgdyxrrikbc5ywjpmetlajyohute5qtnn37aqq", "connection/valory/twitter/0.1.0": "bafybeihotqawulig3g4a7fosi4pljsjii2neiqxtepd42e2neemhqecfcq", "connection/dvilela/suno/0.1.0": "bafybeihy2phtjwbz27ntv55wxfk754kp5tjceujzsdbppjafljoydjflhi", - "skill/dvilela/tsunami_abci/0.1.0": "bafybeid33vcxz7nt5y2vpjantbm6xpx7psbnge7mlx4flcv36kwm2rn4ee", - "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeie2ymexe5xedc6vgvsav44hkoh72weoot4f5illc4lwtelmx2itgq", - "agent/dvilela/tsunami/0.1.0": "bafybeidfrp3tabbdwbblk5rhyyndvghxmelvyaklbfr5lcgxbntrxbrtwi", - "service/dvilela/tsunami/0.1.0": "bafybeibu5334y5udd6psuayvlaoptry6ksgrttq6qhenloxrxbsiixdkbu" + "skill/dvilela/tsunami_abci/0.1.0": "bafybeia6jg3ycxfgxkm2tof7t2rkoevcrep5mk24w4k23iywmgzn6256ru", + "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeicnqa7swnuzfqqzugn6nhejhxatzg2fp7x4kxmxn5ipyhyjroltpe", + "agent/dvilela/tsunami/0.1.0": "bafybeiapxepyznrq2tsixmjgl6vcbf3iisqut63nek3uxbdm5umpqjh3kq", + "service/dvilela/tsunami/0.1.0": "bafybeigif3rtlc7eyiq5nusecueq6hvvebchgqtydfqwiy5uteaomi6wwe" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", diff --git a/scripts/aea-config-replace.py b/scripts/aea-config-replace.py index a530b4e..bf2bc30 100644 --- a/scripts/aea-config-replace.py +++ b/scripts/aea-config-replace.py @@ -38,6 +38,10 @@ def main() -> None: "farcaster_mnemonic" ] = f"${{str:{os.getenv('FARCASTER_MNEMONIC')}}}" + config[2]["config"]["repo_id"] = f"${{str:{os.getenv('LLAMA_REPO_ID')}}}" + + config[2]["config"]["filename"] = f"${{str:{os.getenv('LLAMA_FILENAME')}}}" + config[5]["config"]["ledger_apis"]["ethereum"][ "address" ] = f"${{str:{os.getenv('ETHEREUM_LEDGER_RPC')}}}" From 1f0847217482064507235e6a43d2917c5076ca81 Mon Sep 17 00:00:00 2001 From: dvilela Date: Fri, 14 Jun 2024 00:28:20 +0200 Subject: [PATCH 5/7] feat: add missing event process functions --- .../dvilela/agents/tsunami/aea-config.yaml | 4 +- .../dvilela/services/tsunami/service.yaml | 2 +- .../dvilela/skills/tsunami_abci/behaviours.py | 80 +++++++++++++------ .../dvilela/skills/tsunami_abci/prompts.py | 6 +- .../dvilela/skills/tsunami_abci/skill.yaml | 4 +- .../skills/tsunami_chained_abci/skill.yaml | 2 +- packages/packages.json | 8 +- 7 files changed, 67 insertions(+), 39 deletions(-) diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index b14dff3..2b35cd7 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -47,8 +47,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/registration_abci:0.1.0:bafybeieu7vq3pyns4t5ty6u3sbmpkd7yznpg3rmqifoz3jhy7pmqyg3w6q - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie -- dvilela/tsunami_abci:0.1.0:bafybeia6jg3ycxfgxkm2tof7t2rkoevcrep5mk24w4k23iywmgzn6256ru -- dvilela/tsunami_chained_abci:0.1.0:bafybeicnqa7swnuzfqqzugn6nhejhxatzg2fp7x4kxmxn5ipyhyjroltpe +- dvilela/tsunami_abci:0.1.0:bafybeigqnnxh2hnzeegvwjsv6dhfyexguavbgo7libwnf3oey3qignkvxa +- dvilela/tsunami_chained_abci:0.1.0:bafybeieuts7pclyhxgourt24dze4edniefjx2fj3kqfgfrdbex373vhwca default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index e88e1f1..d6170a9 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibh5bgshii5oqjfuhwmiivfvfqy7fw5pzvarxkpe4qrgivxtc3xym fingerprint_ignore_patterns: [] -agent: dvilela/tsunami:0.1.0:bafybeiapxepyznrq2tsixmjgl6vcbf3iisqut63nek3uxbdm5umpqjh3kq +agent: dvilela/tsunami:0.1.0:bafybeidkhbz7jd4ugnwccslpnqt3562c3oheicnjwfntdrbn3aajbayrrq number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/tsunami_abci/behaviours.py b/packages/dvilela/skills/tsunami_abci/behaviours.py index 991a2a0..a14e6e9 100644 --- a/packages/dvilela/skills/tsunami_abci/behaviours.py +++ b/packages/dvilela/skills/tsunami_abci/behaviours.py @@ -229,30 +229,30 @@ def __init__(self, **kwargs: Any): self.tracked_events = { "ethereum": { - "service_registry": { - "contract_id": str(OlasRegistriesContract.contract_id), - "contract_address": self.params.service_registry_address_ethereum, - "event_to_template": { - "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], - }, - "build_thread_function": self.build_registry_tweet, - }, - "agent_registry": { - "contract_id": str(OlasRegistriesContract.contract_id), - "contract_address": self.params.agent_registry_address_ethereum, - "event_to_template": { - "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["agent_minted"] - }, - "build_thread_function": self.build_registry_tweet, - }, - "component_registry": { - "contract_id": str(OlasRegistriesContract.contract_id), - "contract_address": self.params.component_registry_address_ethereum, - "event_to_template": { - "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["component_minted"] - }, - "build_thread_function": self.build_registry_tweet, - }, + # "service_registry": { + # "contract_id": str(OlasRegistriesContract.contract_id), + # "contract_address": self.params.service_registry_address_ethereum, + # "event_to_template": { + # "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], + # }, + # "build_thread_function": self.build_registry_tweet, + # }, + # "agent_registry": { + # "contract_id": str(OlasRegistriesContract.contract_id), + # "contract_address": self.params.agent_registry_address_ethereum, + # "event_to_template": { + # "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["agent_minted"] + # }, + # "build_thread_function": self.build_registry_tweet, + # }, + # "component_registry": { + # "contract_id": str(OlasRegistriesContract.contract_id), + # "contract_address": self.params.component_registry_address_ethereum, + # "event_to_template": { + # "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["component_minted"] + # }, + # "build_thread_function": self.build_registry_tweet, + # }, "tokenomics": { "contract_id": str(OlasTokenomicsContract.contract_id), "contract_address": self.params.tokenomics_address_ethereum, @@ -630,7 +630,7 @@ def build_registry_tweet( 0 ] # service, agent or component - self.context.logger.info(f"Processing event {event}") + self.context.logger.info(f"Processing registry event {event}") unit_id = getattr(event.args, f"{unit_type}Id") @@ -688,6 +688,19 @@ def build_tokenomics_tweet( ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: """Build a thread for a tokenomics event""" + self.context.logger.info(f"Processing tokenomics event {event}") + + kwargs = { + "n_epoch": event.args["epochCounter"], + "eth_rewards": event.args["accountRewards"] / 1e18, + "olas_topups": event.args["accountTopUps"] / 1e18, + } + + user_prompt = event_template.format(**kwargs) + thread = yield from self.build_thread(user_prompt) + + return thread, None + def build_treasury_tweet( self, chain_id, @@ -700,6 +713,23 @@ def build_treasury_tweet( ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: """Build a thread for a treasury event""" + self.context.logger.info(f"Processing treasury event {event}") + + donations = "" + for amount, service_id in zip(event.args["amounts"], event.args["serviceIds"]): + donations += f"* {amount / 1e18:.2f} ETH to service {service_id}\n" + + kwargs = { + "donator": event.args["sender"], + "amount": event.args["donation"] / 1e18, + "donations": donations, + } + + user_prompt = event_template.format(**kwargs) + thread = yield from self.build_thread(user_prompt) + + return thread, None + class TrackChainEventsBehaviour( TsunamiBaseBehaviour diff --git a/packages/dvilela/skills/tsunami_abci/prompts.py b/packages/dvilela/skills/tsunami_abci/prompts.py index 77d3b57..9896df0 100644 --- a/packages/dvilela/skills/tsunami_abci/prompts.py +++ b/packages/dvilela/skills/tsunami_abci/prompts.py @@ -77,10 +77,8 @@ EVENT_USER_PROMPT_SERVICE_CREATED = "A new service with id {unit_id} has been minted on the Olas protocol on {chain_name}." EVENT_USER_PROMPT_AGENT_CREATED = "A new agent with id {unit_id} has been minted on the Olas protocol on {chain_name}." EVENT_USER_PROMPT_COMPONENT_CREATED = "A new component with id {unit_id} has been minted on the Olas protocol on {chain_name}." -EVENT_USER_PROMPT_EPOCH_SETTLED = "Tokenomics epoch {n_epoch} has finished. A total of {eth_rewards} ETH and {olas_topups} OLAS have been distributed to Olas developers." -EVENT_USER_PROMPT_DONATION_SENT = ( - "Address {donator} has donated {donation_eth} ETH to {service_name}." -) +EVENT_USER_PROMPT_EPOCH_SETTLED = "Tokenomics epoch {n_epoch} has finished. A total of {eth_rewards:.2f} ETH and {olas_topups:.2f} OLAS have been distributed to Olas developers." +EVENT_USER_PROMPT_DONATION_SENT = "Address {donator} has donated {amount:.2f} ETH to the following services:\n{donations}" EVENT_USER_PROMPT_TEMPLATES = { "service_minted": EVENT_USER_PROMPT_SERVICE_CREATED, diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index af7e20b..6b5ea0b 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeiaicsttkv5xapta2eqove7si2pyv3zmshkqolluxpnrh3hkulqsqu - behaviours.py: bafybeigznfeygktvfttonltktxuqi6tlrnwuo66sf7rsc7p6mn4ffhrjwy + behaviours.py: bafybeibexuiambipfabrja46b5jxugldqsxpsqwxlqf62y75lca2vhlphy dialogues.py: bafybeidmgjji6zw6wcvhijrxb74batj2kc2lskfuqxv76duv2j7azcqwra fsm_specification.yaml: bafybeidlfuabsldhezjaovupkvzrtydpcimzz6r56phsi2psrtdzougu4u handlers.py: bafybeigjy73h3uaroovfuuo3ugffrm3oq6pntz5me7nrbsbiwwjceztj5m models.py: bafybeicx5tpwcxy2hufcaydozc6ho4fjalgk4imfh3jgelt2rxea3h4ipu payloads.py: bafybeicejv72ralhxgwzkcprgj5akehu65jfik2cpwsnrxs7zlglpdrl6u - prompts.py: bafybeicsrdy4lapzk3d233ab5d5d6mu65t53esp3rbfty3btempw2ii5uq + prompts.py: bafybeigthshg2g7exkzndx6lunqpw7varihut5ofyugqgrizmkw3dy247q rounds.py: bafybeidmfi6v335lgvjidptqrvuruhtk5hhq3fkcubwbln7xbn2iiok7di subgraph.py: bafybeib7f63y2hozc73lgp3f4ehpssjd23oaotamemeg3xmwxy3esbdlii fingerprint_ignore_patterns: [] diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index cbcded1..8e0dd67 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- dvilela/tsunami_abci:0.1.0:bafybeia6jg3ycxfgxkm2tof7t2rkoevcrep5mk24w4k23iywmgzn6256ru +- dvilela/tsunami_abci:0.1.0:bafybeigqnnxh2hnzeegvwjsv6dhfyexguavbgo7libwnf3oey3qignkvxa behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index 1b030fa..479c23a 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -8,10 +8,10 @@ "connection/dvilela/llama/0.1.0": "bafybeiauzzq2pxmn4brdqgdyxrrikbc5ywjpmetlajyohute5qtnn37aqq", "connection/valory/twitter/0.1.0": "bafybeihotqawulig3g4a7fosi4pljsjii2neiqxtepd42e2neemhqecfcq", "connection/dvilela/suno/0.1.0": "bafybeihy2phtjwbz27ntv55wxfk754kp5tjceujzsdbppjafljoydjflhi", - "skill/dvilela/tsunami_abci/0.1.0": "bafybeia6jg3ycxfgxkm2tof7t2rkoevcrep5mk24w4k23iywmgzn6256ru", - "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeicnqa7swnuzfqqzugn6nhejhxatzg2fp7x4kxmxn5ipyhyjroltpe", - "agent/dvilela/tsunami/0.1.0": "bafybeiapxepyznrq2tsixmjgl6vcbf3iisqut63nek3uxbdm5umpqjh3kq", - "service/dvilela/tsunami/0.1.0": "bafybeigif3rtlc7eyiq5nusecueq6hvvebchgqtydfqwiy5uteaomi6wwe" + "skill/dvilela/tsunami_abci/0.1.0": "bafybeigqnnxh2hnzeegvwjsv6dhfyexguavbgo7libwnf3oey3qignkvxa", + "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeieuts7pclyhxgourt24dze4edniefjx2fj3kqfgfrdbex373vhwca", + "agent/dvilela/tsunami/0.1.0": "bafybeidkhbz7jd4ugnwccslpnqt3562c3oheicnjwfntdrbn3aajbayrrq", + "service/dvilela/tsunami/0.1.0": "bafybeigenwarqk3clag5ulkvwimwc2jvkho5euzg42vyakvewsvoc2l6cy" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", From d7d90e38a92546e3ce8eebacfa6e34e5af620854 Mon Sep 17 00:00:00 2001 From: dvilela Date: Fri, 14 Jun 2024 00:35:25 +0200 Subject: [PATCH 6/7] fix: linters --- .gitleaksignore | 4 +- .../dvilela/agents/tsunami/aea-config.yaml | 8 +- .../contracts/olas_tokenomics/contract.py | 2 +- .../contracts/olas_tokenomics/contract.yaml | 2 +- .../contracts/olas_treasury/contract.py | 2 +- .../contracts/olas_treasury/contract.yaml | 2 +- .../dvilela/services/tsunami/service.yaml | 2 +- .../dvilela/skills/tsunami_abci/behaviours.py | 100 +++++++++--------- .../dvilela/skills/tsunami_abci/skill.yaml | 6 +- .../skills/tsunami_chained_abci/skill.yaml | 2 +- packages/packages.json | 12 +-- 11 files changed, 72 insertions(+), 70 deletions(-) diff --git a/.gitleaksignore b/.gitleaksignore index 8f397a8..8392612 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -3,4 +3,6 @@ 84bb27da7c7e36ae932749216a05fe563d83bc42:packages/dvilela/skills/tsunami_chained_abci/skill.yaml:generic-api-key:85 a4c606c6635c2562f67e4d2cb7c614e0d10d58f8:packages/dvilela/skills/prepare_tweets_abci/skill.yaml:generic-api-key:80 a4c606c6635c2562f67e4d2cb7c614e0d10d58f8:packages/dvilela/skills/tsunami_abci/skill.yaml:generic-api-key:80 -117e66917c1ddac74c0958c5b6d9d5435f55b02d:packages/dvilela/services/tsunami/service.yaml:generic-api-key:69 \ No newline at end of file +117e66917c1ddac74c0958c5b6d9d5435f55b02d:packages/dvilela/services/tsunami/service.yaml:generic-api-key:69 +3ffffb92954da6ffe5391bd13385c571c1db53db:packages/dvilela/contracts/olas_tokenomics/contract.yaml:generic-api-key:11 +f465f892ab8e6520d1fa57a2daeafb1fc1e5e66c:packages/dvilela/contracts/olas_tokenomics/contract.yaml:generic-api-key:10 \ No newline at end of file diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index 2b35cd7..c3ebe92 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -26,8 +26,8 @@ contracts: - valory/multisend:0.1.0:bafybeig5byt5urg2d2bsecufxe5ql7f4mezg3mekfleeh32nmuusx66p4y - valory/service_registry:0.1.0:bafybeiekytropd5ysnap2wkekub3byi5jbda3qll7awchvhu5plbpafhmi - dvilela/olas_registries:0.1.0:bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa -- dvilela/olas_tokenomics:0.1.0:bafybeibmpcw6it2zbmu5ttpnqpnn4aafvrij3abzifkqmvswjnysnclkeu -- dvilela/olas_treasury:0.1.0:bafybeihbne26js7q73m3lgddun4nlps36dmf4u7pwdryyr7h5povsvklni +- dvilela/olas_tokenomics:0.1.0:bafybeifslkoofg3ohscvovzhgaa3up5jhmb6fac4r35b5wcdjphafzssxu +- dvilela/olas_treasury:0.1.0:bafybeidd6yelhuztyvtbso6fkc4iiq2pmegh734exyrtcbqh62yfwgluqy protocols: - open_aea/signing:1.0.0:bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi - valory/abci:0.1.0:bafybeiaqmp7kocbfdboksayeqhkbrynvlfzsx4uy4x6nohywnmaig4an7u @@ -47,8 +47,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/registration_abci:0.1.0:bafybeieu7vq3pyns4t5ty6u3sbmpkd7yznpg3rmqifoz3jhy7pmqyg3w6q - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie -- dvilela/tsunami_abci:0.1.0:bafybeigqnnxh2hnzeegvwjsv6dhfyexguavbgo7libwnf3oey3qignkvxa -- dvilela/tsunami_chained_abci:0.1.0:bafybeieuts7pclyhxgourt24dze4edniefjx2fj3kqfgfrdbex373vhwca +- dvilela/tsunami_abci:0.1.0:bafybeihk3pveqdr6cta44zitlnnpbgc4osc7jf7j35oy3ooptfvcwrs3qm +- dvilela/tsunami_chained_abci:0.1.0:bafybeic55smrkhd2jihynbfhkqitxugsdto6rwwfy6udetg4gyyc2useeu default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.py b/packages/dvilela/contracts/olas_tokenomics/contract.py index 5d1fab4..c6c3262 100644 --- a/packages/dvilela/contracts/olas_tokenomics/contract.py +++ b/packages/dvilela/contracts/olas_tokenomics/contract.py @@ -42,7 +42,7 @@ class OlasTokenomicsContract(Contract): contract_id = PUBLIC_ID @classmethod - def get_events( + def get_events( # pylint: disable=unused-argument cls, ledger_api: EthereumApi, contract_address: str, diff --git a/packages/dvilela/contracts/olas_tokenomics/contract.yaml b/packages/dvilela/contracts/olas_tokenomics/contract.yaml index 15a9ffd..42545ef 100644 --- a/packages/dvilela/contracts/olas_tokenomics/contract.yaml +++ b/packages/dvilela/contracts/olas_tokenomics/contract.yaml @@ -8,7 +8,7 @@ aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeigluox22eqqusqzynkbowsq4bnrw4gwodaawets5i2hrp42v43jfm build/OlasTokenomics.json: bafybeic4dyhqnnfnivfee5krnfyffmglk7icnmoo4wr7kmoixnllrh2jje - contract.py: bafybeid67bxfb2zhwvjdlkyxfv63qbatged3qxde3jpp3ihvbcdidgnhym + contract.py: bafybeiafc7acx2ffv2p2ys6kzq3ltptreud26rkoindvqkyxlild42xzde fingerprint_ignore_patterns: [] contracts: [] class_name: OlasTokenomicsContract diff --git a/packages/dvilela/contracts/olas_treasury/contract.py b/packages/dvilela/contracts/olas_treasury/contract.py index 8e4474b..5776c85 100644 --- a/packages/dvilela/contracts/olas_treasury/contract.py +++ b/packages/dvilela/contracts/olas_treasury/contract.py @@ -42,7 +42,7 @@ class OlasTreasuryContract(Contract): contract_id = PUBLIC_ID @classmethod - def get_events( + def get_events( # pylint: disable=unused-argument cls, ledger_api: EthereumApi, contract_address: str, diff --git a/packages/dvilela/contracts/olas_treasury/contract.yaml b/packages/dvilela/contracts/olas_treasury/contract.yaml index 56cdf81..e7e46ae 100644 --- a/packages/dvilela/contracts/olas_treasury/contract.yaml +++ b/packages/dvilela/contracts/olas_treasury/contract.yaml @@ -8,7 +8,7 @@ aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeigv5vccsux5xbgxdowpxet2qwzyym6jzxxycvuuf3bqpaxe6zpaem build/OlasTreasury.json: bafybeier45zqqza5guhusfhchu6d63yktigfxvojq4so2ftmslxeezbk3m - contract.py: bafybeienzxhlb2yxnypeidl32nihie7bmlak4nbbnconft4eqvbyq72r5q + contract.py: bafybeidoby6xmkztlqdkeqmg6larbibbwavrf7b563ngemie24k664jnlq fingerprint_ignore_patterns: [] contracts: [] class_name: OlasTreasuryContract diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index d6170a9..c02ebc3 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibh5bgshii5oqjfuhwmiivfvfqy7fw5pzvarxkpe4qrgivxtc3xym fingerprint_ignore_patterns: [] -agent: dvilela/tsunami:0.1.0:bafybeidkhbz7jd4ugnwccslpnqt3562c3oheicnjwfntdrbn3aajbayrrq +agent: dvilela/tsunami:0.1.0:bafybeig3sle3mjj6yfxdsaxxdvfl7jv66rlvfbsdrcjrqxqw53pipi67r4 number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/tsunami_abci/behaviours.py b/packages/dvilela/skills/tsunami_abci/behaviours.py index a14e6e9..bb61f6e 100644 --- a/packages/dvilela/skills/tsunami_abci/behaviours.py +++ b/packages/dvilela/skills/tsunami_abci/behaviours.py @@ -229,30 +229,30 @@ def __init__(self, **kwargs: Any): self.tracked_events = { "ethereum": { - # "service_registry": { - # "contract_id": str(OlasRegistriesContract.contract_id), - # "contract_address": self.params.service_registry_address_ethereum, - # "event_to_template": { - # "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], - # }, - # "build_thread_function": self.build_registry_tweet, - # }, - # "agent_registry": { - # "contract_id": str(OlasRegistriesContract.contract_id), - # "contract_address": self.params.agent_registry_address_ethereum, - # "event_to_template": { - # "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["agent_minted"] - # }, - # "build_thread_function": self.build_registry_tweet, - # }, - # "component_registry": { - # "contract_id": str(OlasRegistriesContract.contract_id), - # "contract_address": self.params.component_registry_address_ethereum, - # "event_to_template": { - # "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["component_minted"] - # }, - # "build_thread_function": self.build_registry_tweet, - # }, + "service_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), + "contract_address": self.params.service_registry_address_ethereum, + "event_to_template": { + "CreateService": EVENT_USER_PROMPT_TEMPLATES["service_minted"], + }, + "build_thread_function": self.build_registry_tweet, + }, + "agent_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), + "contract_address": self.params.agent_registry_address_ethereum, + "event_to_template": { + "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["agent_minted"] + }, + "build_thread_function": self.build_registry_tweet, + }, + "component_registry": { + "contract_id": str(OlasRegistriesContract.contract_id), + "contract_address": self.params.component_registry_address_ethereum, + "event_to_template": { + "CreateUnit": EVENT_USER_PROMPT_TEMPLATES["component_minted"] + }, + "build_thread_function": self.build_registry_tweet, + }, "tokenomics": { "contract_id": str(OlasTokenomicsContract.contract_id), "contract_address": self.params.tokenomics_address_ethereum, @@ -613,15 +613,15 @@ def get_token_uri( return uri - def build_registry_tweet( + def build_registry_tweet( # pylint: disable=too-many-arguments,too-many-locals self, - chain_id, - contract_id, - contract_name, - contract_address, - event_name, - event, - event_template, + chain_id: str, + contract_id: str, + contract_name: str, + contract_address: str, + event_name: str, + event: Any, + event_template: str, ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: """Build a thread for a registry event""" @@ -650,7 +650,7 @@ def build_registry_tweet( self.context.logger.error( f"Error while retieving uri: {uri}\n. Skipping event {chain_id}:{contract_name}:{event_name}:{event}..." ) - return None + return None, None # Get unit data self.context.logger.info("Getting token data...") @@ -662,7 +662,7 @@ def build_registry_tweet( self.context.logger.error( f"Error while download token data: {response}\n. Skipping event {chain_id}:{contract_name}:{event_name}:{event}...\n{response}" # type: ignore ) - return None + return None, None response_json = json.loads(response.body) # type: ignore self.context.logger.info(f"Got token data: {response_json}") @@ -676,15 +676,15 @@ def build_registry_tweet( return thread, unit_url - def build_tokenomics_tweet( + def build_tokenomics_tweet( # pylint: disable=too-many-arguments,too-many-locals,unused-argument self, - chain_id, - contract_id, - contract_name, - contract_address, - event_name, - event, - event_template, + chain_id: str, + contract_id: str, + contract_name: str, + contract_address: str, + event_name: str, + event: Any, + event_template: str, ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: """Build a thread for a tokenomics event""" @@ -701,15 +701,15 @@ def build_tokenomics_tweet( return thread, None - def build_treasury_tweet( + def build_treasury_tweet( # pylint: disable=too-many-arguments,too-many-locals,unused-argument self, - chain_id, - contract_id, - contract_name, - contract_address, - event_name, - event, - event_template, + chain_id: str, + contract_id: str, + contract_name: str, + contract_address: str, + event_name: str, + event: Any, + event_template: str, ) -> Generator[None, None, Tuple[Optional[List[str]], Optional[str]]]: """Build a thread for a treasury event""" diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index 6b5ea0b..660a5f8 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeiaicsttkv5xapta2eqove7si2pyv3zmshkqolluxpnrh3hkulqsqu - behaviours.py: bafybeibexuiambipfabrja46b5jxugldqsxpsqwxlqf62y75lca2vhlphy + behaviours.py: bafybeih74hpxfafqjwvmsl7gbrydm6zh24vrgmkebp2ifdifmy3jve6qxi dialogues.py: bafybeidmgjji6zw6wcvhijrxb74batj2kc2lskfuqxv76duv2j7azcqwra fsm_specification.yaml: bafybeidlfuabsldhezjaovupkvzrtydpcimzz6r56phsi2psrtdzougu4u handlers.py: bafybeigjy73h3uaroovfuuo3ugffrm3oq6pntz5me7nrbsbiwwjceztj5m @@ -27,8 +27,8 @@ connections: - valory/http_server:0.22.0:bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m contracts: - dvilela/olas_registries:0.1.0:bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa -- dvilela/olas_tokenomics:0.1.0:bafybeibmpcw6it2zbmu5ttpnqpnn4aafvrij3abzifkqmvswjnysnclkeu -- dvilela/olas_treasury:0.1.0:bafybeihbne26js7q73m3lgddun4nlps36dmf4u7pwdryyr7h5povsvklni +- dvilela/olas_tokenomics:0.1.0:bafybeifslkoofg3ohscvovzhgaa3up5jhmb6fac4r35b5wcdjphafzssxu +- dvilela/olas_treasury:0.1.0:bafybeidd6yelhuztyvtbso6fkc4iiq2pmegh734exyrtcbqh62yfwgluqy protocols: - valory/contract_api:1.0.0:bafybeidgu7o5llh26xp3u3ebq3yluull5lupiyeu6iooi2xyymdrgnzq5i - valory/ledger_api:1.0.0:bafybeihdk6psr4guxmbcrc26jr2cbgzpd5aljkqvpwo64bvaz7tdti2oni diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index 8e0dd67..194a753 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- dvilela/tsunami_abci:0.1.0:bafybeigqnnxh2hnzeegvwjsv6dhfyexguavbgo7libwnf3oey3qignkvxa +- dvilela/tsunami_abci:0.1.0:bafybeihk3pveqdr6cta44zitlnnpbgc4osc7jf7j35oy3ooptfvcwrs3qm behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index 479c23a..cf6ce15 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -2,16 +2,16 @@ "dev": { "protocol/dvilela/kv_store/0.1.0": "bafybeihimf5f37uupxmugvagmaxworgmz7cxuqpikkyzlgldtbq46jbvci", "contract/dvilela/olas_registries/0.1.0": "bafybeict2xpt56m2a5ehezd2oylrhbhahrsas3dht2fdfbnrejlr5mdqpa", - "contract/dvilela/olas_tokenomics/0.1.0": "bafybeibmpcw6it2zbmu5ttpnqpnn4aafvrij3abzifkqmvswjnysnclkeu", - "contract/dvilela/olas_treasury/0.1.0": "bafybeihbne26js7q73m3lgddun4nlps36dmf4u7pwdryyr7h5povsvklni", + "contract/dvilela/olas_tokenomics/0.1.0": "bafybeifslkoofg3ohscvovzhgaa3up5jhmb6fac4r35b5wcdjphafzssxu", + "contract/dvilela/olas_treasury/0.1.0": "bafybeidd6yelhuztyvtbso6fkc4iiq2pmegh734exyrtcbqh62yfwgluqy", "connection/dvilela/kv_store/0.1.0": "bafybeiekugvb2kan4342hliluxl3h5och3fjwqoafdyttpcn57evvyztq4", "connection/dvilela/llama/0.1.0": "bafybeiauzzq2pxmn4brdqgdyxrrikbc5ywjpmetlajyohute5qtnn37aqq", "connection/valory/twitter/0.1.0": "bafybeihotqawulig3g4a7fosi4pljsjii2neiqxtepd42e2neemhqecfcq", "connection/dvilela/suno/0.1.0": "bafybeihy2phtjwbz27ntv55wxfk754kp5tjceujzsdbppjafljoydjflhi", - "skill/dvilela/tsunami_abci/0.1.0": "bafybeigqnnxh2hnzeegvwjsv6dhfyexguavbgo7libwnf3oey3qignkvxa", - "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeieuts7pclyhxgourt24dze4edniefjx2fj3kqfgfrdbex373vhwca", - "agent/dvilela/tsunami/0.1.0": "bafybeidkhbz7jd4ugnwccslpnqt3562c3oheicnjwfntdrbn3aajbayrrq", - "service/dvilela/tsunami/0.1.0": "bafybeigenwarqk3clag5ulkvwimwc2jvkho5euzg42vyakvewsvoc2l6cy" + "skill/dvilela/tsunami_abci/0.1.0": "bafybeihk3pveqdr6cta44zitlnnpbgc4osc7jf7j35oy3ooptfvcwrs3qm", + "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeic55smrkhd2jihynbfhkqitxugsdto6rwwfy6udetg4gyyc2useeu", + "agent/dvilela/tsunami/0.1.0": "bafybeig3sle3mjj6yfxdsaxxdvfl7jv66rlvfbsdrcjrqxqw53pipi67r4", + "service/dvilela/tsunami/0.1.0": "bafybeihbr6pcdasvu4fjjmwywdzrtcpvw4jwur734ewjjubheha2ajs3ou" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", From b7ff874e8a7b27635c3bc8556d3c5b11b0da578d Mon Sep 17 00:00:00 2001 From: dvilela Date: Fri, 14 Jun 2024 00:49:05 +0200 Subject: [PATCH 7/7] feat: set service names --- .../dvilela/agents/tsunami/aea-config.yaml | 4 +- .../dvilela/services/tsunami/service.yaml | 2 +- .../dvilela/skills/tsunami_abci/behaviours.py | 100 ++++++++++++------ .../dvilela/skills/tsunami_abci/prompts.py | 4 +- .../dvilela/skills/tsunami_abci/skill.yaml | 4 +- .../skills/tsunami_chained_abci/skill.yaml | 2 +- packages/packages.json | 8 +- 7 files changed, 80 insertions(+), 44 deletions(-) diff --git a/packages/dvilela/agents/tsunami/aea-config.yaml b/packages/dvilela/agents/tsunami/aea-config.yaml index c3ebe92..59508fa 100644 --- a/packages/dvilela/agents/tsunami/aea-config.yaml +++ b/packages/dvilela/agents/tsunami/aea-config.yaml @@ -47,8 +47,8 @@ skills: - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/registration_abci:0.1.0:bafybeieu7vq3pyns4t5ty6u3sbmpkd7yznpg3rmqifoz3jhy7pmqyg3w6q - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie -- dvilela/tsunami_abci:0.1.0:bafybeihk3pveqdr6cta44zitlnnpbgc4osc7jf7j35oy3ooptfvcwrs3qm -- dvilela/tsunami_chained_abci:0.1.0:bafybeic55smrkhd2jihynbfhkqitxugsdto6rwwfy6udetg4gyyc2useeu +- dvilela/tsunami_abci:0.1.0:bafybeifb4oatjxqa5tc37xxb36ru5wktebqqy4f5ig6d6wnwsovvyjysii +- dvilela/tsunami_chained_abci:0.1.0:bafybeiaj7y4bnugd45nlnfb6fz36ixnpzlhbgs76frukd7r2zyjooopngq default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/dvilela/services/tsunami/service.yaml b/packages/dvilela/services/tsunami/service.yaml index c02ebc3..59788d3 100644 --- a/packages/dvilela/services/tsunami/service.yaml +++ b/packages/dvilela/services/tsunami/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibh5bgshii5oqjfuhwmiivfvfqy7fw5pzvarxkpe4qrgivxtc3xym fingerprint_ignore_patterns: [] -agent: dvilela/tsunami:0.1.0:bafybeig3sle3mjj6yfxdsaxxdvfl7jv66rlvfbsdrcjrqxqw53pipi67r4 +agent: dvilela/tsunami:0.1.0:bafybeiac2s5bwsi54yu2azqh6hvyhx3wnene2mesfmfaxonyuxqo4fgqhm number_of_agents: 1 deployment: agent: diff --git a/packages/dvilela/skills/tsunami_abci/behaviours.py b/packages/dvilela/skills/tsunami_abci/behaviours.py index bb61f6e..82879bd 100644 --- a/packages/dvilela/skills/tsunami_abci/behaviours.py +++ b/packages/dvilela/skills/tsunami_abci/behaviours.py @@ -517,7 +517,10 @@ def _do_connection_request( return response def build_thread( - self, user_prompt: str, header: Optional[str] = None + self, + user_prompt: str, + header: Optional[str] = None, + footer: Optional[str] = None, ) -> Generator[None, None, Optional[List[str]]]: """Build thread""" @@ -556,6 +559,10 @@ def build_thread( if "#OlasNetwork" not in tweet_attempt: tweet_attempt += " #OlasNetwork" + # Add footer + if footer: + tweet_attempt = tweet_attempt + footer + # Create a single-tweet thread if tweet_len(tweet_attempt) < MAX_TWEET_CHARS: self.context.logger.info("Tweet is OK!") @@ -715,21 +722,73 @@ def build_treasury_tweet( # pylint: disable=too-many-arguments,too-many-locals, self.context.logger.info(f"Processing treasury event {event}") - donations = "" - for amount, service_id in zip(event.args["amounts"], event.args["serviceIds"]): - donations += f"* {amount / 1e18:.2f} ETH to service {service_id}\n" + packages = yield from self.get_packages(package_type="service") + service_id_to_name = { + str(s["tokenId"]): s["publicId"] for s in packages["units"] # type: ignore + } + + donations = [ + f"Here's the complete list of donations from address {event.args['sender']}:" + ] + if packages: + for amount, service_id in zip( + event.args["amounts"], event.args["serviceIds"] + ): + service_name = service_id_to_name[str(service_id)] + donations.append(f"☴ {amount / 1e18:.2f} ETH for {service_name}") kwargs = { "donator": event.args["sender"], "amount": event.args["donation"] / 1e18, - "donations": donations, + "n_services": len(event.args["serviceIds"]), } user_prompt = event_template.format(**kwargs) thread = yield from self.build_thread(user_prompt) + if not thread: + return None, None + + thread += donations + return thread, None + def get_packages(self, package_type: str) -> Generator[None, None, Optional[Dict]]: + """Gets minted packages from the subgraph""" + + self.context.logger.info("Getting packages from Olas subgraph...") + + SUBGRAPH_URL = "https://subgraph.autonolas.tech/subgraphs/name/autonolas" + + headers = { + "Content-Type": "application/json", + } + + data = { + "query": AGENT_QUERY, + "variables": { + "package_type": package_type, + }, + } + + # Get all existing agents from the subgraph + self.context.logger.info("Getting agents from subgraph") + response = yield from self.get_http_response( # type: ignore + method="POST", + url=SUBGRAPH_URL, + headers=headers, + content=json.dumps(data).encode(), + ) + + if response.status_code != HTTP_OK: # type: ignore + self.context.logger.error( + f"Error getting agents from subgraph: {response}" # type: ignore + ) + return None + + response_json = json.loads(response.body)["data"] # type: ignore + return response_json + class TrackChainEventsBehaviour( TsunamiBaseBehaviour @@ -1301,36 +1360,11 @@ def get_suno_tweets( # pylint: disable=too-many-locals,too-many-return-statemen ) return tweets - SUBGRAPH_URL = "https://subgraph.autonolas.tech/subgraphs/name/autonolas" - - headers = { - "Content-Type": "application/json", - } - - data = { - "query": AGENT_QUERY, - "variables": { - "package_type": "agent", - }, - } - - # Get all existing agents from the subgraph - self.context.logger.info("Getting agents from subgraph") - response = yield from self.get_http_response( # type: ignore - method="POST", - url=SUBGRAPH_URL, - headers=headers, - content=json.dumps(data).encode(), - ) - - if response.status_code != HTTP_OK: # type: ignore - self.context.logger.error( - f"Error getting agents from subgraph: {response}" # type: ignore - ) + packages = yield from self.get_packages(package_type="agent") + if not packages: return tweets - response_json = json.loads(response.body)["data"] # type: ignore - agents = [u for u in response_json["units"] if u["packageType"] == "agent"] + agents = [u for u in packages["units"] if u["packageType"] == "agent"] agents = sorted(agents, key=lambda i: int(i["tokenId"])) n_agents = len(agents) diff --git a/packages/dvilela/skills/tsunami_abci/prompts.py b/packages/dvilela/skills/tsunami_abci/prompts.py index 9896df0..7447e2d 100644 --- a/packages/dvilela/skills/tsunami_abci/prompts.py +++ b/packages/dvilela/skills/tsunami_abci/prompts.py @@ -78,7 +78,9 @@ EVENT_USER_PROMPT_AGENT_CREATED = "A new agent with id {unit_id} has been minted on the Olas protocol on {chain_name}." EVENT_USER_PROMPT_COMPONENT_CREATED = "A new component with id {unit_id} has been minted on the Olas protocol on {chain_name}." EVENT_USER_PROMPT_EPOCH_SETTLED = "Tokenomics epoch {n_epoch} has finished. A total of {eth_rewards:.2f} ETH and {olas_topups:.2f} OLAS have been distributed to Olas developers." -EVENT_USER_PROMPT_DONATION_SENT = "Address {donator} has donated {amount:.2f} ETH to the following services:\n{donations}" +EVENT_USER_PROMPT_DONATION_SENT = ( + "Address {donator} has donated {amount:.2f} ETH to {n_services} services." +) EVENT_USER_PROMPT_TEMPLATES = { "service_minted": EVENT_USER_PROMPT_SERVICE_CREATED, diff --git a/packages/dvilela/skills/tsunami_abci/skill.yaml b/packages/dvilela/skills/tsunami_abci/skill.yaml index 660a5f8..2bd7bad 100644 --- a/packages/dvilela/skills/tsunami_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_abci/skill.yaml @@ -8,13 +8,13 @@ license: Apache-2.0 aea_version: '>=1.0.0, <2.0.0' fingerprint: __init__.py: bafybeiaicsttkv5xapta2eqove7si2pyv3zmshkqolluxpnrh3hkulqsqu - behaviours.py: bafybeih74hpxfafqjwvmsl7gbrydm6zh24vrgmkebp2ifdifmy3jve6qxi + behaviours.py: bafybeiahkmts365cpdamupwoq3l3m6d4brmpnhlbiugbtvlgn5i4ys5zxy dialogues.py: bafybeidmgjji6zw6wcvhijrxb74batj2kc2lskfuqxv76duv2j7azcqwra fsm_specification.yaml: bafybeidlfuabsldhezjaovupkvzrtydpcimzz6r56phsi2psrtdzougu4u handlers.py: bafybeigjy73h3uaroovfuuo3ugffrm3oq6pntz5me7nrbsbiwwjceztj5m models.py: bafybeicx5tpwcxy2hufcaydozc6ho4fjalgk4imfh3jgelt2rxea3h4ipu payloads.py: bafybeicejv72ralhxgwzkcprgj5akehu65jfik2cpwsnrxs7zlglpdrl6u - prompts.py: bafybeigthshg2g7exkzndx6lunqpw7varihut5ofyugqgrizmkw3dy247q + prompts.py: bafybeicjacdvtggitktvwnzqq6nsic7zf7qpaaf4gy7uepzjdr55ql2cs4 rounds.py: bafybeidmfi6v335lgvjidptqrvuruhtk5hhq3fkcubwbln7xbn2iiok7di subgraph.py: bafybeib7f63y2hozc73lgp3f4ehpssjd23oaotamemeg3xmwxy3esbdlii fingerprint_ignore_patterns: [] diff --git a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml index 194a753..510c571 100644 --- a/packages/dvilela/skills/tsunami_chained_abci/skill.yaml +++ b/packages/dvilela/skills/tsunami_chained_abci/skill.yaml @@ -23,7 +23,7 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- dvilela/tsunami_abci:0.1.0:bafybeihk3pveqdr6cta44zitlnnpbgc4osc7jf7j35oy3ooptfvcwrs3qm +- dvilela/tsunami_abci:0.1.0:bafybeifb4oatjxqa5tc37xxb36ru5wktebqqy4f5ig6d6wnwsovvyjysii behaviours: main: args: {} diff --git a/packages/packages.json b/packages/packages.json index cf6ce15..07a4d3a 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -8,10 +8,10 @@ "connection/dvilela/llama/0.1.0": "bafybeiauzzq2pxmn4brdqgdyxrrikbc5ywjpmetlajyohute5qtnn37aqq", "connection/valory/twitter/0.1.0": "bafybeihotqawulig3g4a7fosi4pljsjii2neiqxtepd42e2neemhqecfcq", "connection/dvilela/suno/0.1.0": "bafybeihy2phtjwbz27ntv55wxfk754kp5tjceujzsdbppjafljoydjflhi", - "skill/dvilela/tsunami_abci/0.1.0": "bafybeihk3pveqdr6cta44zitlnnpbgc4osc7jf7j35oy3ooptfvcwrs3qm", - "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeic55smrkhd2jihynbfhkqitxugsdto6rwwfy6udetg4gyyc2useeu", - "agent/dvilela/tsunami/0.1.0": "bafybeig3sle3mjj6yfxdsaxxdvfl7jv66rlvfbsdrcjrqxqw53pipi67r4", - "service/dvilela/tsunami/0.1.0": "bafybeihbr6pcdasvu4fjjmwywdzrtcpvw4jwur734ewjjubheha2ajs3ou" + "skill/dvilela/tsunami_abci/0.1.0": "bafybeifb4oatjxqa5tc37xxb36ru5wktebqqy4f5ig6d6wnwsovvyjysii", + "skill/dvilela/tsunami_chained_abci/0.1.0": "bafybeiaj7y4bnugd45nlnfb6fz36ixnpzlhbgs76frukd7r2zyjooopngq", + "agent/dvilela/tsunami/0.1.0": "bafybeiac2s5bwsi54yu2azqh6hvyhx3wnene2mesfmfaxonyuxqo4fgqhm", + "service/dvilela/tsunami/0.1.0": "bafybeiaikowdosu6luqkyf43bjsjzfdboccgioaa2dzpdy747fzkyey7vq" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi",