opengradient 0.4.6__py3-none-any.whl → 0.4.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opengradient/__init__.py +59 -67
- opengradient/abi/PriceHistoryInference.abi +1 -0
- opengradient/abi/WorkflowScheduler.abi +13 -0
- opengradient/alphasense/read_workflow_tool.py +1 -1
- opengradient/alphasense/run_model_tool.py +3 -3
- opengradient/bin/PriceHistoryInference.bin +1 -0
- opengradient/cli.py +8 -4
- opengradient/client.py +282 -217
- opengradient/defaults.py +1 -0
- opengradient/llm/__init__.py +1 -1
- opengradient/llm/og_langchain.py +36 -22
- opengradient/llm/og_openai.py +1 -1
- opengradient/types.py +22 -20
- opengradient/utils.py +2 -0
- opengradient-0.4.7.dist-info/METADATA +159 -0
- opengradient-0.4.7.dist-info/RECORD +29 -0
- {opengradient-0.4.6.dist-info → opengradient-0.4.7.dist-info}/WHEEL +1 -1
- opengradient/abi/ModelExecutorHistorical.abi +0 -1
- opengradient-0.4.6.dist-info/METADATA +0 -189
- opengradient-0.4.6.dist-info/RECORD +0 -27
- {opengradient-0.4.6.dist-info → opengradient-0.4.7.dist-info}/LICENSE +0 -0
- {opengradient-0.4.6.dist-info → opengradient-0.4.7.dist-info}/entry_points.txt +0 -0
- {opengradient-0.4.6.dist-info → opengradient-0.4.7.dist-info}/top_level.txt +0 -0
opengradient/__init__.py
CHANGED
|
@@ -6,7 +6,18 @@ from typing import Any, Dict, List, Optional, Tuple, Union
|
|
|
6
6
|
|
|
7
7
|
from .client import Client
|
|
8
8
|
from .defaults import DEFAULT_INFERENCE_CONTRACT_ADDRESS, DEFAULT_RPC_URL
|
|
9
|
-
from .types import
|
|
9
|
+
from .types import (
|
|
10
|
+
LLM,
|
|
11
|
+
TEE_LLM,
|
|
12
|
+
HistoricalInputQuery,
|
|
13
|
+
SchedulerParams,
|
|
14
|
+
CandleType,
|
|
15
|
+
CandleOrder,
|
|
16
|
+
InferenceMode,
|
|
17
|
+
LlmInferenceMode,
|
|
18
|
+
TextGenerationOutput,
|
|
19
|
+
ModelOutput,
|
|
20
|
+
)
|
|
10
21
|
|
|
11
22
|
from . import llm, alphasense
|
|
12
23
|
|
|
@@ -14,15 +25,19 @@ _client = None
|
|
|
14
25
|
|
|
15
26
|
|
|
16
27
|
def new_client(
|
|
17
|
-
email: str,
|
|
28
|
+
email: Optional[str],
|
|
29
|
+
password: Optional[str],
|
|
30
|
+
private_key: str,
|
|
31
|
+
rpc_url=DEFAULT_RPC_URL,
|
|
32
|
+
contract_address=DEFAULT_INFERENCE_CONTRACT_ADDRESS,
|
|
18
33
|
) -> Client:
|
|
19
34
|
"""
|
|
20
35
|
Creates a unique OpenGradient client instance with the given authentication and network settings.
|
|
21
36
|
|
|
22
37
|
Args:
|
|
23
|
-
email: User's email address for authentication
|
|
24
|
-
password: User's password for authentication
|
|
25
|
-
private_key:
|
|
38
|
+
email: User's email address for authentication with Model Hub
|
|
39
|
+
password: User's password for authentication with Model Hub
|
|
40
|
+
private_key: Private key for OpenGradient transactions
|
|
26
41
|
rpc_url: Optional RPC URL for the blockchain network, defaults to mainnet
|
|
27
42
|
contract_address: Optional inference contract address
|
|
28
43
|
"""
|
|
@@ -65,7 +80,7 @@ def upload(model_path, model_name, version):
|
|
|
65
80
|
return _client.upload(model_path, model_name, version)
|
|
66
81
|
|
|
67
82
|
|
|
68
|
-
def create_model(model_name: str, model_desc: str, model_path: str = None):
|
|
83
|
+
def create_model(model_name: str, model_desc: str, model_path: Optional[str] = None):
|
|
69
84
|
"""Create a new model repository.
|
|
70
85
|
|
|
71
86
|
Args:
|
|
@@ -121,7 +136,7 @@ def infer(model_cid, inference_mode, model_input, max_retries: Optional[int] = N
|
|
|
121
136
|
max_retries: Maximum number of retries for failed transactions
|
|
122
137
|
|
|
123
138
|
Returns:
|
|
124
|
-
|
|
139
|
+
InferenceResult: Transaction hash and model output
|
|
125
140
|
|
|
126
141
|
Raises:
|
|
127
142
|
RuntimeError: If SDK is not initialized
|
|
@@ -134,12 +149,12 @@ def infer(model_cid, inference_mode, model_input, max_retries: Optional[int] = N
|
|
|
134
149
|
def llm_completion(
|
|
135
150
|
model_cid: LLM,
|
|
136
151
|
prompt: str,
|
|
137
|
-
inference_mode:
|
|
152
|
+
inference_mode: LlmInferenceMode = LlmInferenceMode.VANILLA,
|
|
138
153
|
max_tokens: int = 100,
|
|
139
154
|
stop_sequence: Optional[List[str]] = None,
|
|
140
155
|
temperature: float = 0.0,
|
|
141
156
|
max_retries: Optional[int] = None,
|
|
142
|
-
) ->
|
|
157
|
+
) -> TextGenerationOutput:
|
|
143
158
|
"""Generate text completion using an LLM.
|
|
144
159
|
|
|
145
160
|
Args:
|
|
@@ -152,7 +167,7 @@ def llm_completion(
|
|
|
152
167
|
max_retries: Maximum number of retries for failed transactions
|
|
153
168
|
|
|
154
169
|
Returns:
|
|
155
|
-
|
|
170
|
+
TextGenerationOutput: Transaction hash and generated text
|
|
156
171
|
|
|
157
172
|
Raises:
|
|
158
173
|
RuntimeError: If SDK is not initialized
|
|
@@ -173,14 +188,14 @@ def llm_completion(
|
|
|
173
188
|
def llm_chat(
|
|
174
189
|
model_cid: LLM,
|
|
175
190
|
messages: List[Dict],
|
|
176
|
-
inference_mode:
|
|
191
|
+
inference_mode: LlmInferenceMode = LlmInferenceMode.VANILLA,
|
|
177
192
|
max_tokens: int = 100,
|
|
178
193
|
stop_sequence: Optional[List[str]] = None,
|
|
179
194
|
temperature: float = 0.0,
|
|
180
195
|
tools: Optional[List[Dict]] = None,
|
|
181
196
|
tool_choice: Optional[str] = None,
|
|
182
197
|
max_retries: Optional[int] = None,
|
|
183
|
-
) ->
|
|
198
|
+
) -> TextGenerationOutput:
|
|
184
199
|
"""Have a chat conversation with an LLM.
|
|
185
200
|
|
|
186
201
|
Args:
|
|
@@ -195,7 +210,7 @@ def llm_chat(
|
|
|
195
210
|
max_retries: Maximum number of retries for failed transactions
|
|
196
211
|
|
|
197
212
|
Returns:
|
|
198
|
-
|
|
213
|
+
TextGenerationOutput
|
|
199
214
|
|
|
200
215
|
Raises:
|
|
201
216
|
RuntimeError: If SDK is not initialized
|
|
@@ -215,24 +230,6 @@ def llm_chat(
|
|
|
215
230
|
)
|
|
216
231
|
|
|
217
232
|
|
|
218
|
-
def login(email: str, password: str):
|
|
219
|
-
"""Login to OpenGradient.
|
|
220
|
-
|
|
221
|
-
Args:
|
|
222
|
-
email: User's email address
|
|
223
|
-
password: User's password
|
|
224
|
-
|
|
225
|
-
Returns:
|
|
226
|
-
dict: Login response with authentication tokens
|
|
227
|
-
|
|
228
|
-
Raises:
|
|
229
|
-
RuntimeError: If SDK is not initialized
|
|
230
|
-
"""
|
|
231
|
-
if _client is None:
|
|
232
|
-
raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
|
|
233
|
-
return _client.login(email, password)
|
|
234
|
-
|
|
235
|
-
|
|
236
233
|
def list_files(model_name: str, version: str) -> List[Dict]:
|
|
237
234
|
"""List files in a model repository version.
|
|
238
235
|
|
|
@@ -251,32 +248,11 @@ def list_files(model_name: str, version: str) -> List[Dict]:
|
|
|
251
248
|
return _client.list_files(model_name, version)
|
|
252
249
|
|
|
253
250
|
|
|
254
|
-
def generate_image(model: str, prompt: str, height: Optional[int] = None, width: Optional[int] = None) -> bytes:
|
|
255
|
-
"""Generate an image from a text prompt.
|
|
256
|
-
|
|
257
|
-
Args:
|
|
258
|
-
model: Model identifier (e.g. "stabilityai/stable-diffusion-xl-base-1.0")
|
|
259
|
-
prompt: Text description of the desired image
|
|
260
|
-
height: Optional height of the generated image in pixels
|
|
261
|
-
width: Optional width of the generated image in pixels
|
|
262
|
-
|
|
263
|
-
Returns:
|
|
264
|
-
bytes: Raw image data as bytes
|
|
265
|
-
|
|
266
|
-
Raises:
|
|
267
|
-
RuntimeError: If SDK is not initialized
|
|
268
|
-
OpenGradientError: If image generation fails
|
|
269
|
-
"""
|
|
270
|
-
if _client is None:
|
|
271
|
-
raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
|
|
272
|
-
return _client.generate_image(model, prompt, height=height, width=width)
|
|
273
|
-
|
|
274
|
-
|
|
275
251
|
def new_workflow(
|
|
276
252
|
model_cid: str,
|
|
277
|
-
input_query:
|
|
253
|
+
input_query: HistoricalInputQuery,
|
|
278
254
|
input_tensor_name: str,
|
|
279
|
-
scheduler_params: Optional[
|
|
255
|
+
scheduler_params: Optional[SchedulerParams] = None,
|
|
280
256
|
) -> str:
|
|
281
257
|
"""
|
|
282
258
|
Deploy a new workflow contract with the specified parameters.
|
|
@@ -287,13 +263,9 @@ def new_workflow(
|
|
|
287
263
|
|
|
288
264
|
Args:
|
|
289
265
|
model_cid: IPFS CID of the model
|
|
290
|
-
input_query:
|
|
266
|
+
input_query: HistoricalInputQuery containing query parameters
|
|
291
267
|
input_tensor_name: Name of the input tensor
|
|
292
|
-
scheduler_params: Optional scheduler configuration
|
|
293
|
-
- Can be a dictionary with:
|
|
294
|
-
- frequency: Execution frequency in seconds (default: 600)
|
|
295
|
-
- duration_hours: How long to run in hours (default: 2)
|
|
296
|
-
- Or a SchedulerParams instance
|
|
268
|
+
scheduler_params: Optional scheduler configuration as SchedulerParams instance
|
|
297
269
|
If not provided, the workflow will be deployed without scheduling.
|
|
298
270
|
|
|
299
271
|
Returns:
|
|
@@ -303,15 +275,12 @@ def new_workflow(
|
|
|
303
275
|
if _client is None:
|
|
304
276
|
raise RuntimeError("OpenGradient client not initialized. Call og.init(...) first.")
|
|
305
277
|
|
|
306
|
-
# Convert scheduler_params if it's a dict, otherwise use as is
|
|
307
|
-
scheduler = SchedulerParams.from_dict(scheduler_params) if isinstance(scheduler_params, dict) else scheduler_params
|
|
308
|
-
|
|
309
278
|
return _client.new_workflow(
|
|
310
|
-
model_cid=model_cid, input_query=input_query, input_tensor_name=input_tensor_name, scheduler_params=
|
|
279
|
+
model_cid=model_cid, input_query=input_query, input_tensor_name=input_tensor_name, scheduler_params=scheduler_params
|
|
311
280
|
)
|
|
312
281
|
|
|
313
282
|
|
|
314
|
-
def read_workflow_result(contract_address: str) ->
|
|
283
|
+
def read_workflow_result(contract_address: str) -> ModelOutput:
|
|
315
284
|
"""
|
|
316
285
|
Reads the latest inference result from a deployed workflow contract.
|
|
317
286
|
|
|
@@ -335,7 +304,7 @@ def read_workflow_result(contract_address: str) -> Dict[str, Union[str, Dict]]:
|
|
|
335
304
|
return _client.read_workflow_result(contract_address)
|
|
336
305
|
|
|
337
306
|
|
|
338
|
-
def run_workflow(contract_address: str) ->
|
|
307
|
+
def run_workflow(contract_address: str) -> ModelOutput:
|
|
339
308
|
"""
|
|
340
309
|
Executes the workflow by calling run() on the contract to pull latest data and perform inference.
|
|
341
310
|
|
|
@@ -350,8 +319,23 @@ def run_workflow(contract_address: str) -> Dict[str, Union[str, Dict]]:
|
|
|
350
319
|
return _client.run_workflow(contract_address)
|
|
351
320
|
|
|
352
321
|
|
|
322
|
+
def read_workflow_history(contract_address: str, num_results: int) -> List[Dict]:
|
|
323
|
+
"""
|
|
324
|
+
Gets historical inference results from a workflow contract.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
contract_address (str): Address of the deployed workflow contract
|
|
328
|
+
num_results (int): Number of historical results to retrieve
|
|
329
|
+
|
|
330
|
+
Returns:
|
|
331
|
+
List[Dict]: List of historical inference results
|
|
332
|
+
"""
|
|
333
|
+
if _client is None:
|
|
334
|
+
raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
|
|
335
|
+
return _client.read_workflow_history(contract_address, num_results)
|
|
336
|
+
|
|
337
|
+
|
|
353
338
|
__all__ = [
|
|
354
|
-
"generate_image",
|
|
355
339
|
"list_files",
|
|
356
340
|
"login",
|
|
357
341
|
"llm_chat",
|
|
@@ -366,6 +350,14 @@ __all__ = [
|
|
|
366
350
|
"new_workflow",
|
|
367
351
|
"read_workflow_result",
|
|
368
352
|
"run_workflow",
|
|
353
|
+
"read_workflow_history",
|
|
354
|
+
"InferenceMode",
|
|
355
|
+
"LlmInferenceMode",
|
|
356
|
+
"HistoricalInputQuery",
|
|
357
|
+
"SchedulerParams",
|
|
358
|
+
"CandleType",
|
|
359
|
+
"CandleOrder",
|
|
360
|
+
"InferenceMode",
|
|
369
361
|
"llm",
|
|
370
362
|
"alphasense",
|
|
371
363
|
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"inputs":[{"internalType":"string","name":"_modelId","type":"string"},{"internalType":"string","name":"_inputName","type":"string"},{"components":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"quote","type":"string"},{"internalType":"uint32","name":"total_candles","type":"uint32"},{"internalType":"uint32","name":"candle_duration_in_mins","type":"uint32"},{"internalType":"enum CandleOrder","name":"order","type":"uint8"},{"internalType":"enum CandleType[]","name":"candle_types","type":"uint8[]"}],"internalType":"struct HistoricalInputQuery","name":"_query","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"indexed":false,"internalType":"struct ModelOutput","name":"result","type":"tuple"}],"name":"InferenceResultEmitted","type":"event"},{"inputs":[],"name":"getInferenceResult","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"internalType":"struct ModelOutput","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"getLastInferenceResults","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"internalType":"struct ModelOutput[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"historicalContract","outputs":[{"internalType":"contract OGHistorical","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inputName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inputQuery","outputs":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"quote","type":"string"},{"internalType":"uint32","name":"total_candles","type":"uint32"},{"internalType":"uint32","name":"candle_duration_in_mins","type":"uint32"},{"internalType":"enum CandleOrder","name":"order","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modelId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"run","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"inputs": [
|
|
4
|
+
{"internalType": "address", "name": "contractAddress", "type": "address"},
|
|
5
|
+
{"internalType": "uint256", "name": "endTime", "type": "uint256"},
|
|
6
|
+
{"internalType": "uint256", "name": "frequency", "type": "uint256"}
|
|
7
|
+
],
|
|
8
|
+
"name": "registerTask",
|
|
9
|
+
"outputs": [],
|
|
10
|
+
"stateMutability": "nonpayable",
|
|
11
|
+
"type": "function"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
@@ -12,7 +12,7 @@ def create_read_workflow_tool(
|
|
|
12
12
|
tool_name: str,
|
|
13
13
|
tool_description: str,
|
|
14
14
|
output_formatter: Callable[..., str] = lambda x: x,
|
|
15
|
-
) -> BaseTool:
|
|
15
|
+
) -> BaseTool | Callable:
|
|
16
16
|
"""
|
|
17
17
|
Creates a tool that reads results from a workflow contract on OpenGradient.
|
|
18
18
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
|
-
from typing import Any, Callable, Dict, Type
|
|
2
|
+
from typing import Any, Callable, Dict, Type, Optional
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import BaseTool, StructuredTool
|
|
5
5
|
from pydantic import BaseModel
|
|
@@ -14,10 +14,10 @@ def create_run_model_tool(
|
|
|
14
14
|
tool_name: str,
|
|
15
15
|
input_getter: Callable,
|
|
16
16
|
output_formatter: Callable[..., str] = lambda x: x,
|
|
17
|
-
input_schema: Type[BaseModel] = None,
|
|
17
|
+
input_schema: Optional[Type[BaseModel]] = None,
|
|
18
18
|
tool_description: str = "Executes the given ML model",
|
|
19
19
|
inference_mode: og.InferenceMode = og.InferenceMode.VANILLA,
|
|
20
|
-
) -> BaseTool:
|
|
20
|
+
) -> BaseTool | Callable:
|
|
21
21
|
"""
|
|
22
22
|
Creates a tool that wraps an OpenGradient model for inference.
|
|
23
23
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
60a0604052346100405761001a610014610389565b91610a62565b610022610045565b61460c610a928239608051818181610b7401526144c0015261460c90f35b61004b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100779061004f565b810190811060018060401b0382111761008f57604052565b610059565b906100a76100a0610045565b928361006d565b565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b60018060401b0381116100d5576100d160209161004f565b0190565b610059565b90825f9392825e0152565b909291926100fa6100f5826100b9565b610094565b9381855260208501908284011161011657610114926100da565b565b6100b5565b9080601f8301121561013957816020610136935191016100e5565b90565b6100b1565b5f80fd5b5f80fd5b63ffffffff1690565b61015881610146565b0361015f57565b5f80fd5b905051906101708261014f565b565b6002111561017c57565b5f80fd5b9050519061018d82610172565b565b60018060401b0381116101a55760208091020190565b610059565b5f80fd5b600511156101b857565b5f80fd5b905051906101c9826101ae565b565b909291926101e06101db8261018f565b610094565b938185526020808601920283019281841161021d57915b8383106102045750505050565b6020809161021284866101bc565b8152019201916101f7565b6101aa565b9080601f830112156102405781602061023d935191016101cb565b90565b6100b1565b91909160c0818403126103095761025c60c0610094565b925f82015160018060401b038111610304578161027a91840161011b565b5f850152602082015160018060401b0381116102ff578161029c91840161011b565b60208501526102ae8160408401610163565b60408501526102c08160608401610163565b60608501526102d28160808401610180565b608085015260a082015160018060401b0381116102fa576102f39201610222565b60a0830152565b610142565b610142565b610142565b61013e565b91606083830312610384575f83015160018060401b03811161037f578261033691850161011b565b92602081015160018060401b03811161037a578361035591830161011b565b92604082015160018060401b038111610375576103729201610245565b90565b6100ad565b6100ad565b6100ad565b6100a9565b6103a761509e8038038061039c81610094565b92833981019061030e565b909192565b5190565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156103e4575b60208310146103df57565b6103b0565b91607f16916103d4565b5f5260205f2090565b601f602091010490565b1b90565b9190600861042091029161041a5f1984610401565b92610401565b9181191691161790565b90565b90565b61044461043f6104499261042a565b61042d565b61042a565b90565b90565b919061046561046061046d93610430565b61044c565b908354610405565b9055565b5f90565b61048791610481610471565b9161044f565b565b5b818110610495575050565b806104a25f600193610475565b0161048a565b9190601f81116104b8575b505050565b6104c46104e9936103ee565b9060206104d0846103f7565b830193106104f1575b6104e2906103f7565b0190610489565b5f80806104b3565b91506104e2819290506104d9565b1c90565b90610513905f19906008026104ff565b191690565b8161052291610503565b906002021790565b90610534816103ac565b9060018060401b0382116105f2576105568261055085546103c4565b856104a8565b602090601f831160011461058a57918091610579935f9261057e575b5050610518565b90555b565b90915001515f80610572565b601f19831691610599856103ee565b925f5b8181106105da575091600293918560019694106105c0575b5050500201905561057c565b6105d0910151601f841690610503565b90555f80806105b4565b9193602060018192878701518155019501920161059c565b610059565b906106019161052a565b565b60018060a01b031690565b61062261061d61062792610603565b61042d565b610603565b90565b6106339061060e565b90565b61063f9061062a565b90565b5190565b6106509051610146565b90565b5f1b90565b9061066763ffffffff91610653565b9181191691161790565b61068561068061068a92610146565b61042d565b610146565b90565b90565b906106a56106a06106ac92610671565b61068d565b8254610658565b9055565b60201b90565b906106c967ffffffff00000000916106b0565b9181191691161790565b906106e86106e36106ef92610671565b61068d565b82546106b6565b9055565b634e487b7160e01b5f52602160045260245ffd5b6002111561071157565b6106f3565b9061072082610707565b565b61072c9051610716565b90565b60401b90565b9061074968ff00000000000000009161072f565b9181191691161790565b61075c90610716565b90565b90565b9061077761077261077e92610753565b61075f565b8254610735565b9055565b5190565b5490565b60209060018203010490565b5f5260205f2090565b5b8181106107ab575050565b806107b85f600193610475565b016107a0565b906107d1905f19906020036008026104ff565b8154169055565b9190918282106107e8575b505050565b600160206107f86108209561078a565b61080a6108048661078a565b94610796565b93840193019306025f8111610828575b5061079f565b5f80806107e3565b61083590600183036107be565b5f61081a565b90680100000000000000008111610864578161085961086293610786565b908281556107d8565b565b610059565b5190565b6005111561087757565b6106f3565b906108868261086d565b565b610892905161087c565b90565b60200190565b919060086108b69102916108b060ff84610401565b92610401565b9181191691161790565b90565b906108cd81610869565b9060018060401b0382116109ae576108f16108f7916108ec848661083b565b610895565b92610796565b60208204915f5b83811061096657506020830290035f811161091a575b50505050565b925f935f5b8181106109345750505001555f808080610914565b909194602061095a60019261095061094b8a610888565b6108c0565b908585029061089b565b9601910191909161091f565b5f5f5b6020811061098057509060019181850155016108fe565b959060206109a560019261099b61099686610888565b6108c0565b908a85029061089b565b92019601610969565b610059565b906109bd916108c3565b565b90610a4e60a06003610a54946109e25f82016109dc5f8801610642565b906105f7565b6109fb600182016109f560208801610642565b906105f7565b610a1460028201610a0e60408801610646565b90610690565b610a2d60028201610a2760608801610646565b906106d3565b610a4660028201610a4060808801610722565b90610762565b019201610782565b906109b3565b565b90610a60916109bf565b565b610a8f9291610a74610a7b925f6105f7565b60016105f7565b610a8560f5610636565b6080526002610a56565b56fe60806040526004361015610013575b610c2f565b61001d5f3561008c565b80631b9fc7011461008757806343cdaad214610082578063554970111461007d5780639e30396c14610078578063c040622614610073578063c4c71aac1461006e5763df958cf60361000e57610bfa565b610b39565b610996565b61095c565b6107e3565b61079f565b6105a0565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f9103126100aa57565b61009c565b5190565b60209181520190565b60200190565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b61010361010c602093610111936100fa816100c2565b938480936100c6565b958691016100cf565b6100da565b0190565b5190565b60209181520190565b60200190565b600f0b90565b61013790610128565b9052565b9060208061015d936101535f8201515f86019061012e565b015191019061012e565b565b9061016c8160409361013b565b0190565b60200190565b9061019361018d61018684610115565b8093610119565b92610122565b905f5b8181106101a35750505090565b9091926101bc6101b6600192865161015f565b94610170565b9101919091610196565b5190565b60209181520190565b60200190565b63ffffffff1690565b6101eb906101d9565b9052565b906101fc816020936101e2565b0190565b60200190565b9061022361021d610216846101c6565b80936101ca565b926101d3565b905f5b8181106102335750505090565b90919261024c61024660019286516101ef565b94610200565b9101919091610226565b610299916040610288610276606084015f8601518582035f8701526100e4565b60208501518482036020860152610176565b920151906040818403910152610206565b90565b906102a691610256565b90565b60200190565b906102c36102bc836100af565b80926100b3565b90816102d4602083028401946100bc565b925f915b8383106102e757505050505090565b909192939460206103096103038385600195038752895161029c565b976102a9565b93019301919392906102d8565b5190565b60209181520190565b60200190565b5190565b60209181520190565b60200190565b90610346916100e4565b90565b60200190565b9061036361035c83610329565b809261032d565b908161037460208302840194610336565b925f915b83831061038757505050505090565b909192939460206103a96103a38385600195038752895161033c565b97610349565b9301930191939290610378565b6103e49160206103d3604083015f8501518482035f8601526100e4565b92015190602081840391015261034f565b90565b906103f1916103b6565b90565b60200190565b9061040e61040783610316565b809261031a565b908161041f60208302840194610323565b925f915b83831061043257505050505090565b9091929394602061045461044e838560019503875289516103e7565b976103f4565b9301930191939290610423565b5190565b60209181520190565b60200190565b6104a2916020610491604083015f8501518482035f8601526100e4565b9201519060208184039101526100e4565b90565b906104af91610474565b90565b60200190565b906104cc6104c583610461565b8092610465565b90816104dd6020830284019461046e565b925f915b8383106104f057505050505090565b9091929394602061051261050c838560019503875289516104a5565b976104b2565b93019301919392906104e1565b151590565b61052d9061051f565b9052565b906105859060608061057a610568610556608086015f8901518782035f8901526102af565b602088015186820360208801526103fa565b604087015185820360408701526104b8565b940151910190610524565b90565b61059d9160208201915f818403910152610531565b90565b346105d0576105b03660046100a0565b6105cc6105bb611519565b6105c3610092565b91829182610588565b0390f35b610098565b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b906001600283049216801561061c575b602083101461061757565b6105e8565b91607f169161060c565b5f5260205f2090565b905f9291805490610649610642836105fc565b80946100c6565b916001811690815f146106a05750600114610664575b505050565b6106719192939450610626565b915f925b81841061068857505001905f808061065f565b60018160209295939554848601520191019290610675565b92949550505060ff19168252151560200201905f808061065f565b906106c59161062f565b90565b634e487b7160e01b5f52604160045260245ffd5b906106e6906100da565b810190811067ffffffffffffffff82111761070057604052565b6106c8565b9061072561071e92610715610092565b938480926106bb565b03836106dc565b565b905f1061073a5761073790610705565b90565b6105d5565b61074a5f5f90610727565b90565b60209181520190565b61077561077e6020936107839361076c816100c2565b9384809361074d565b958691016100cf565b6100da565b0190565b61079c9160208201915f818403910152610756565b90565b346107cf576107af3660046100a0565b6107cb6107ba61073f565b6107c2610092565b91829182610787565b0390f35b610098565b6107e060015f90610727565b90565b34610813576107f33660046100a0565b61080f6107fe6107d4565b610806610092565b91829182610787565b0390f35b610098565b5f80fd5b90565b6108288161081c565b0361082f57565b5f80fd5b905035906108408261081f565b565b9060208282031261085b57610858915f01610833565b90565b61009c565b5190565b60209181520190565b60200190565b906108c7906060806108bc6108aa610898608086015f8901518782035f8901526102af565b602088015186820360208801526103fa565b604087015185820360408701526104b8565b940151910190610524565b90565b906108d491610873565b90565b60200190565b906108f16108ea83610860565b8092610864565b90816109026020830284019461086d565b925f915b83831061091557505050505090565b90919293946020610937610931838560019503875289516108ca565b976108d7565b9301930191939290610906565b6109599160208201915f8184039101526108dd565b90565b3461098c57610988610977610972366004610842565b61179a565b61097f610092565b91829182610944565b0390f35b610098565b5f0190565b346109c4576109a63660046100a0565b6109ae6144bb565b6109b6610092565b806109c081610991565b0390f35b610098565b5f1c90565b63ffffffff1690565b6109e36109e8916109c9565b6109ce565b90565b6109f590546109d7565b90565b60201c90565b610a0a610a0f916109f8565b6109ce565b90565b610a1c90546109fe565b90565b60401c90565b60ff1690565b610a37610a3c91610a1f565b610a25565b90565b610a499054610a2b565b90565b6002610a595f8201610705565b91610a6660018301610705565b91610a73600282016109eb565b91610a8b6002610a84818501610a12565b9301610a3f565b90565b610a97906101d9565b9052565b634e487b7160e01b5f52602160045260245ffd5b60021115610ab957565b610a9b565b90610ac882610aaf565b565b610ad390610abe565b90565b610adf90610aca565b9052565b90610b3794610b26610b1b608095610b0d610b30959b9a989b60a08801908882035f8a0152610756565b908682036020880152610756565b986040850190610a8e565b6060830190610a8e565b0190610ad6565b565b34610b6d57610b493660046100a0565b610b69610b54610a4c565b91610b60959395610092565b95869586610ae3565b0390f35b610098565b7f000000000000000000000000000000000000000000000000000000000000000090565b60018060a01b031690565b90565b610bb8610bb3610bbd92610b96565b610ba1565b610b96565b90565b610bc990610ba4565b90565b610bd590610bc0565b90565b610be190610bcc565b9052565b9190610bf8905f60208501940190610bd8565b565b34610c2a57610c0a3660046100a0565b610c26610c15610b72565b610c1d610092565b91829182610be5565b0390f35b610098565b5f80fd5b90610c46610c3f610092565b92836106dc565b565b610c526080610c33565b90565b606090565b606090565b606090565b5f90565b610c70610c48565b90602080808085610c7f610c55565b815201610c8a610c5a565b815201610c95610c5f565b815201610ca0610c64565b81525050565b610cae610c68565b90565b5490565b67ffffffffffffffff8111610ccd5760208091020190565b6106c8565b90610ce4610cdf83610cb5565b610c33565b918252565b5f5260205f2090565b52565b5490565b67ffffffffffffffff8111610d115760208091020190565b6106c8565b90610d28610d2383610cf9565b610c33565b918252565b5f5260205f2090565b600f0b90565b610d48610d4d916109c9565b610d36565b90565b610d5a9054610d3c565b90565b90610d6790610128565b9052565b60801c90565b610d7d610d8291610d6b565b610d36565b90565b610d8f9054610d71565b90565b610d9c6040610c33565b90565b90610dd5610dcc5f610daf610d92565b94610dc6610dbe838301610d50565b838801610d5d565b01610d85565b60208401610d5d565b565b610de090610d9f565b90565b90610ded82610cf5565b610df681610d16565b92610e046020850191610d2d565b5f915b838310610e145750505050565b600160208192610e2385610dd7565b815201920192019190610e07565b52565b5490565b5f5260205f2090565b610e4d610e5291610a1f565b6109ce565b90565b60601c90565b610e67610e6c91610e55565b6109ce565b90565b610e7b610e8091610d6b565b6109ce565b90565b60a01c90565b610e95610e9a91610e83565b6109ce565b90565b60c01c90565b610eaf610eb491610e9d565b6109ce565b90565b610ec3610ec89161008c565b6109ce565b90565b90600190610eeb610ee5610ede85610e34565b80936101ca565b93610e38565b5f92611055575b6001610eff575b50505090565b5490808310611033575b808310611011575b808310610fef575b808310610fcd575b808310610fab575b808310610f89575b808310610f67575b8210610f46575b80610ef9565b82610f5e60019394610f59602094610eb7565b6101e2565b0191015f610f40565b9192602081610f80600193610f7b86610ea3565b6101e2565b01930191610f39565b9192602081610fa2600193610f9d86610e89565b6101e2565b01930191610f31565b9192602081610fc4600193610fbf86610e6f565b6101e2565b01930191610f29565b9192602081610fe6600193610fe186610e5b565b6101e2565b01930191610f21565b919260208161100860019361100386610e41565b6101e2565b01930191610f19565b919260208161102a600193611025866109fe565b6101e2565b01930191610f11565b919260208161104c600193611047866109d7565b6101e2565b01930191610f09565b5b81600160080384011015610ef257926001602061110961110e600894838080808080808f549761108e816110898b6109d7565b6101e2565b016110a18161109c8a6109fe565b6101e2565b016110b4816110af89610e41565b6101e2565b016110c7816110c288610e5b565b6101e2565b016110da816110d587610e6f565b6101e2565b016110ed816110e886610e89565b6101e2565b01611100816110fb85610ea3565b6101e2565b01928391610eb7565b6101e2565b019401920191611056565b9061112391610ecb565b90565b9061114661113f92611136610092565b93848092611119565b03836106dc565b565b52565b6111556060610c33565b90565b906111a761119e600261116961114b565b946111806111785f8301610705565b5f8801610cf2565b61119861118f60018301610de3565b60208801610e31565b01611126565b60408401611148565b565b6111b290611158565b90565b906111bf82610cb1565b6111c881610cd2565b926111d66020850191610ce9565b5f915b8383106111e65750505050565b600360206001926111f6856111a9565b8152019201920191906111d9565b52565b5490565b67ffffffffffffffff81116112235760208091020190565b6106c8565b9061123a6112358361120b565b610c33565b918252565b5f5260205f2090565b5490565b67ffffffffffffffff81116112645760208091020190565b6106c8565b9061127b6112768361124c565b610c33565b918252565b5f5260205f2090565b61129290610705565b90565b9061129f82611248565b6112a881611269565b926112b66020850191611280565b5f915b8383106112c65750505050565b6001602081926112d585611289565b8152019201920191906112b9565b52565b6112f06040610c33565b90565b9061132a61132160016113046112e6565b9461131b6113135f8301610705565b5f8801610cf2565b01611295565b602084016112e3565b565b611335906112f3565b90565b9061134282611207565b61134b81611228565b92611359602085019161123f565b5f915b8383106113695750505050565b600260206001926113798561132c565b81520192019201919061135c565b52565b5490565b67ffffffffffffffff81116113a65760208091020190565b6106c8565b906113bd6113b88361138e565b610c33565b918252565b5f5260205f2090565b6113d56040610c33565b90565b9061140f61140660016113e96113cb565b946114006113f85f8301610705565b5f8801610cf2565b01610705565b60208401610cf2565b565b61141a906113d8565b90565b906114278261138a565b611430816113ab565b9261143e60208501916113c2565b5f915b83831061144e5750505050565b6002602060019261145e85611411565b815201920192019190611441565b52565b60ff1690565b611481611486916109c9565b61146f565b90565b6114939054611475565b90565b906114a09061051f565b9052565b9061150b61150260036114b5610c48565b946114cc6114c45f83016111b5565b5f8801611204565b6114e46114db60018301611338565b60208801611387565b6114fc6114f36002830161141d565b6040880161146c565b01611489565b60608401611496565b565b611516906114a4565b90565b611521610ca6565b5061152c600661150d565b90565b606090565b90565b61154b61154661155092611534565b610ba1565b61081c565b90565b60207f7665000000000000000000000000000000000000000000000000000000000000917f4e756d626572206f6620726573756c7473206d75737420626520706f736974695f8201520152565b6115ad602260409261074d565b6115b681611553565b0190565b6115cf9060208101905f8183039101526115a0565b90565b156115d957565b6115e1610092565b62461bcd60e51b8152806115f7600482016115ba565b0390fd5b90565b61160a61160f916109c9565b6115fb565b90565b61161c90546115fe565b90565b634e487b7160e01b5f52601160045260245ffd5b6116426116489193929361081c565b9261081c565b820391821161165357565b61161f565b90565b61166f61166a61167492611658565b610ba1565b61081c565b90565b61168661168c9193929361081c565b9261081c565b820180921161169757565b61161f565b67ffffffffffffffff81116116b45760208091020190565b6106c8565b906116cb6116c68361169c565b610c33565b918252565b6116d8610c68565b90565b5f5b8281106116e957505050565b6020906116f46116d0565b81840152016116dd565b9061172361170b836116b9565b92602080611719869361169c565b92019103906116db565b565b6001611731910161081c565b90565b61174861174361174d9261081c565b610ba1565b61081c565b90565b9061175a90611734565b5f5260205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b9061178482610860565b811015611795576020809102010190565b611766565b6117a261152f565b506117bf816117b96117b35f611537565b9161081c565b116115d2565b806117db6117d56117d0600a611612565b61081c565b9161081c565b115f1461188e57506117ed600a611612565b5b906118166118066117ff600a611612565b8490611633565b611810600161165b565b90611677565b61181f836116fe565b916118295f611537565b5b8061183d6118378761081c565b9161081c565b1015611887576118829061187b611860600b61185a878590611677565b90611750565b8661186b849261150d565b611875838361177a565b5261177a565b5150611725565b61182a565b5092505090565b6117ee565b60e01b90565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b67ffffffffffffffff81116118cb576118c76020916100da565b0190565b6106c8565b909291926118e56118e0826118ad565b610c33565b93818552602085019082840111611901576118ff926100cf565b565b6118a9565b9080601f8301121561192457816020611921935191016118d0565b90565b6118a1565b61193281610128565b0361193957565b5f80fd5b9050519061194a82611929565b565b91906040838203126119865761197f906119666040610c33565b93611973825f830161193d565b5f86015260200161193d565b6020830152565b611899565b909291926119a061199b82610cf9565b610c33565b9381855260406020860192028301928184116119df57915b8383106119c55750505050565b60206040916119d4848661194c565b8152019201916119b8565b6118a5565b9080601f83011215611a02578160206119ff9351910161198b565b90565b6118a1565b67ffffffffffffffff8111611a1f5760208091020190565b6106c8565b611a2d816101d9565b03611a3457565b5f80fd5b90505190611a4582611a24565b565b90929192611a5c611a5782611a07565b610c33565b9381855260208086019202830192818411611a9957915b838310611a805750505050565b60208091611a8e8486611a38565b815201920191611a73565b6118a5565b9080601f83011215611abc57816020611ab993519101611a47565b90565b6118a1565b919091606081840312611b5557611ad86060610c33565b925f82015167ffffffffffffffff8111611b505781611af8918401611906565b5f850152602082015167ffffffffffffffff8111611b4b5781611b1c9184016119e4565b6020850152604082015167ffffffffffffffff8111611b4657611b3f9201611a9e565b6040830152565b61189d565b61189d565b61189d565b611899565b929190611b6e611b6982610cb5565b610c33565b9381855260208086019202810191838311611bc55781905b838210611b94575050505050565b815167ffffffffffffffff8111611bc057602091611bb58784938701611ac1565b815201910190611b86565b6118a1565b6118a5565b9080601f83011215611be857816020611be593519101611b5a565b90565b6118a1565b929190611c01611bfc8261124c565b610c33565b9381855260208086019202810191838311611c585781905b838210611c27575050505050565b815167ffffffffffffffff8111611c5357602091611c488784938701611906565b815201910190611c19565b6118a1565b6118a5565b9080601f83011215611c7b57816020611c7893519101611bed565b90565b6118a1565b919091604081840312611cea57611c976040610c33565b925f82015167ffffffffffffffff8111611ce55781611cb7918401611906565b5f850152602082015167ffffffffffffffff8111611ce057611cd99201611c5d565b6020830152565b61189d565b61189d565b611899565b929190611d03611cfe8261120b565b610c33565b9381855260208086019202810191838311611d5a5781905b838210611d29575050505050565b815167ffffffffffffffff8111611d5557602091611d4a8784938701611c80565b815201910190611d1b565b6118a1565b6118a5565b9080601f83011215611d7d57816020611d7a93519101611cef565b90565b6118a1565b919091604081840312611dec57611d996040610c33565b925f82015167ffffffffffffffff8111611de75781611db9918401611906565b5f850152602082015167ffffffffffffffff8111611de257611ddb9201611906565b6020830152565b61189d565b61189d565b611899565b929190611e05611e008261138e565b610c33565b9381855260208086019202810191838311611e5c5781905b838210611e2b575050505050565b815167ffffffffffffffff8111611e5757602091611e4c8784938701611d82565b815201910190611e1d565b6118a1565b6118a5565b9080601f83011215611e7f57816020611e7c93519101611df1565b90565b6118a1565b611e8d8161051f565b03611e9457565b5f80fd5b90505190611ea582611e84565b565b919091608081840312611f4e57611ebe6080610c33565b925f82015167ffffffffffffffff8111611f495781611ede918401611bca565b5f850152602082015167ffffffffffffffff8111611f445781611f02918401611d5f565b602085015260408201519167ffffffffffffffff8311611f3f57611f2b82611f38948301611e61565b6040860152606001611e98565b6060830152565b61189d565b61189d565b61189d565b611899565b90602082820312611f83575f82015167ffffffffffffffff8111611f7e57611f7b9201611ea7565b90565b610818565b61009c565b905f9291805490611fa2611f9b836105fc565b809461074d565b916001811690815f14611ff95750600114611fbd575b505050565b611fca9192939450610626565b915f925b818410611fe157505001905f8080611fb8565b60018160209295939554848601520191019290611fce565b92949550505060ff19168252151560200201905f8080611fb8565b61201d90610aca565b9052565b5490565b60209181520190565b5f5260205f2090565b6005111561204157565b610a9b565b9061205082612037565b565b61205b90612046565b90565b61206790612052565b9052565b60ff1690565b61207d612082916109c9565b61206b565b90565b60081c90565b61209761209c91612085565b61206b565b90565b60101c90565b6120b16120b69161209f565b61206b565b90565b60181c90565b6120cb6120d0916120b9565b61206b565b90565b6120df6120e4916109f8565b61206b565b90565b60281c90565b6120f96120fe916120e7565b61206b565b90565b60301c90565b61211361211891612101565b61206b565b90565b60381c90565b61212d6121329161211b565b61206b565b90565b61214161214691610a1f565b61206b565b90565b60481c90565b61215b61216091612149565b61206b565b90565b60501c90565b61217561217a91612163565b61206b565b90565b60581c90565b61218f6121949161217d565b61206b565b90565b6121a36121a891610e55565b61206b565b90565b60681c90565b6121bd6121c2916121ab565b61206b565b90565b60701c90565b6121d76121dc916121c5565b61206b565b90565b60781c90565b6121f16121f6916121df565b61206b565b90565b61220561220a91610d6b565b61206b565b90565b60881c90565b61221f6122249161220d565b61206b565b90565b60901c90565b61223961223e91612227565b61206b565b90565b60981c90565b61225361225891612241565b61206b565b90565b61226761226c91610e83565b61206b565b90565b60a81c90565b6122816122869161226f565b61206b565b90565b60b01c90565b61229b6122a091612289565b61206b565b90565b60b81c90565b6122b56122ba916122a3565b61206b565b90565b6122c96122ce91610e9d565b61206b565b90565b60c81c90565b6122e36122e8916122d1565b61206b565b90565b60d01c90565b6122fd612302916122eb565b61206b565b90565b60d81c90565b61231761231c91612305565b61206b565b90565b61232b6123309161008c565b61206b565b90565b60e81c90565b61234561234a91612333565b61206b565b90565b60f01c90565b61235f6123649161234d565b61206b565b90565b60f81c90565b61237961237e91612367565b61206b565b90565b906001906123a161239b61239485612021565b8093612025565b9361202e565b5f926128fb575b60016123b5575b50505090565b54908083106128d9575b8083106128b7575b808310612895575b808310612873575b808310612851575b80831061282f575b80831061280d575b8083106127eb575b8083106127c9575b8083106127a7575b808310612785575b808310612763575b808310612741575b80831061271f575b8083106126fd575b8083106126db575b8083106126b9575b808310612697575b808310612675575b808310612653575b808310612631575b80831061260f575b8083106125ed575b8083106125cb575b8083106125a9575b808310612587575b808310612565575b808310612543575b808310612521575b8083106124ff575b8083106124dd575b82106124bc575b806123af565b826124d4600193946124cf60209461236d565b61205e565b0191015f6124b6565b91926020816124f66001936124f186612353565b61205e565b019301916124af565b919260208161251860019361251386612339565b61205e565b019301916124a7565b919260208161253a6001936125358661231f565b61205e565b0193019161249f565b919260208161255c6001936125578661230b565b61205e565b01930191612497565b919260208161257e600193612579866122f1565b61205e565b0193019161248f565b91926020816125a060019361259b866122d7565b61205e565b01930191612487565b91926020816125c26001936125bd866122bd565b61205e565b0193019161247f565b91926020816125e46001936125df866122a9565b61205e565b01930191612477565b91926020816126066001936126018661228f565b61205e565b0193019161246f565b919260208161262860019361262386612275565b61205e565b01930191612467565b919260208161264a6001936126458661225b565b61205e565b0193019161245f565b919260208161266c60019361266786612247565b61205e565b01930191612457565b919260208161268e6001936126898661222d565b61205e565b0193019161244f565b91926020816126b06001936126ab86612213565b61205e565b01930191612447565b91926020816126d26001936126cd866121f9565b61205e565b0193019161243f565b91926020816126f46001936126ef866121e5565b61205e565b01930191612437565b9192602081612716600193612711866121cb565b61205e565b0193019161242f565b9192602081612738600193612733866121b1565b61205e565b01930191612427565b919260208161275a60019361275586612197565b61205e565b0193019161241f565b919260208161277c60019361277786612183565b61205e565b01930191612417565b919260208161279e60019361279986612169565b61205e565b0193019161240f565b91926020816127c06001936127bb8661214f565b61205e565b01930191612407565b91926020816127e26001936127dd86612135565b61205e565b019301916123ff565b91926020816128046001936127ff86612121565b61205e565b019301916123f7565b919260208161282660019361282186612107565b61205e565b019301916123ef565b9192602081612848600193612843866120ed565b61205e565b019301916123e7565b919260208161286a600193612865866120d3565b61205e565b019301916123df565b919260208161288c600193612887866120bf565b61205e565b019301916123d7565b91926020816128ae6001936128a9866120a5565b61205e565b019301916123cf565b91926020816128d06001936128cb8661208b565b61205e565b019301916123c7565b91926020816128f26001936128ed86612071565b61205e565b019301916123bf565b5b816001602003840110156123a857928354908061291883612071565b906129229161205e565b6020018061292f8361208b565b906129399161205e565b60200180612946836120a5565b906129509161205e565b6020018061295d836120bf565b906129679161205e565b60200180612974836120d3565b9061297e9161205e565b6020018061298b836120ed565b906129959161205e565b602001806129a283612107565b906129ac9161205e565b602001806129b983612121565b906129c39161205e565b602001806129d083612135565b906129da9161205e565b602001806129e78361214f565b906129f19161205e565b602001806129fe83612169565b90612a089161205e565b60200180612a1583612183565b90612a1f9161205e565b60200180612a2c83612197565b90612a369161205e565b60200180612a43836121b1565b90612a4d9161205e565b60200180612a5a836121cb565b90612a649161205e565b60200180612a71836121e5565b90612a7b9161205e565b60200180612a88836121f9565b90612a929161205e565b60200180612a9f83612213565b90612aa99161205e565b60200180612ab68361222d565b90612ac09161205e565b60200180612acd83612247565b90612ad79161205e565b60200180612ae48361225b565b90612aee9161205e565b60200180612afb83612275565b90612b059161205e565b60200180612b128361228f565b90612b1c9161205e565b60200180612b29836122a9565b90612b339161205e565b60200180612b40836122bd565b90612b4a9161205e565b60200180612b57836122d7565b90612b619161205e565b60200180612b6e836122f1565b90612b789161205e565b60200180612b858361230b565b90612b8f9161205e565b60200180612b9c8361231f565b90612ba69161205e565b60200180612bb383612339565b90612bbd9161205e565b60200180612bca83612353565b90612bd49161205e565b602001612be1819261236d565b90612beb9161205e565b6020019260010191602001916128fc565b612c82916003612c2c612c1b60c084015f86018582035f87015261062f565b60018501848203602086015261062f565b92612c73612c696002830154612c4e612c44826109d7565b60408801906101e2565b612c64612c5a826109fe565b60608801906101e2565b610a2b565b6080850190612014565b019060a0818403910152612381565b90565b91612cb190612ca3612cbf959360608601908682035f880152611f88565b908482036020860152611f88565b916040818403910152612bfc565b90565b612cca610092565b3d5f823e3d90fd5b5190565b612ce5612ceb9193929361081c565b9261081c565b91612cf783820261081c565b928184041490151715612d0657565b61161f565b612d16906003612cd6565b90565b1c90565b90612d30905f1990602003600802612d19565b8154169055565b1b90565b91906008612d56910291612d505f1984612d37565b92612d37565b9181191691161790565b90565b9190612d79612d74612d8193611734565b612d60565b908354612d3b565b9055565b5f90565b612d9b91612d95612d85565b91612d63565b565b5b818110612da9575050565b80612db65f600193612d89565b01612d9e565b90612dcc905f1990600802612d19565b191690565b81612ddb91612dbc565b906002021790565b905f91612dfa612df282610626565b928354612dd1565b905555565b601f602091010490565b919290602082105f14612e6257601f8411600114612e3257612e2c929350612dd1565b90555b5b565b5090612e58612e5d936001612e4f612e4985610626565b92612dff565b82019101612d9d565b612de3565b612e2f565b50612e998293612e73600194610626565b612e92612e7f85612dff565b820192601f861680612ea4575b50612dff565b0190612d9d565b600202179055612e30565b612eb090888603612d1d565b5f612e8c565b929091680100000000000000008211612f16576020115f14612f0757602081105f14612eeb57612ee591612dd1565b90555b5b565b60019160ff1916612efb84610626565b55600202019055612ee8565b60019150600202019055612ee9565b6106c8565b908154612f27816105fc565b90818311612f50575b818310612f3e575b50505050565b612f4793612e09565b5f808080612f38565b612f5c83838387612eb6565b612f30565b5f612f6b91612f1b565b565b905f03612f7f57612f7d90612f61565b565b6105d5565b600190818003010490565b5f80910155565b905f03612fa857612fa690612f8f565b565b6105d5565b5b818110612fb9575050565b80612fc65f600193612f96565b01612fae565b9091828110612fdb575b505050565b612ff9612ff3612fed61300495612f84565b92612f84565b92610d2d565b918201910190612fad565b5f8080612fd6565b90680100000000000000008111613035578161302a61303393610cf5565b90828155612fcc565b565b6106c8565b5f6130449161300c565b565b905f03613058576130569061303a565b565b6105d5565b60089060018203010490565b5b818110613075575050565b806130825f600193612d89565b0161306a565b919091828210613098575b505050565b600460086130a86130d09561305d565b6130ba6130b48661305d565b94610e38565b93840193019306025f81116130d8575b50613069565b5f8080613093565b6130e59060018303612d1d565b5f6130ca565b90680100000000000000008111613114578161310961311293610e34565b90828155613088565b565b6106c8565b5f613123916130eb565b565b905f036131375761313590613119565b565b6105d5565b5f60026131629261314f83808301612f6d565b61315c8360018301613046565b01613125565b565b905f03613176576131749061313c565b565b6105d5565b5b818110613187575050565b806131945f600393613164565b0161317c565b90918281106131a9575b505050565b6131c76131c16131bb6131d295612d0b565b92612d0b565b92610ce9565b91820191019061317b565b5f80806131a4565b9068010000000000000000811161320357816131f861320193610cb1565b9082815561319a565b565b6106c8565b5190565b5190565b9190601f8111613220575b505050565b61322c61325193610626565b90602061323884612dff565b83019310613259575b61324a90612dff565b0190612d9d565b5f808061321b565b915061324a81929050613241565b90613271816100c2565b9067ffffffffffffffff8211613331576132958261328f85546105fc565b85613210565b602090601f83116001146132c9579180916132b8935f926132bd575b5050612dd1565b90555b565b90915001515f806132b1565b601f198316916132d885610626565b925f5b818110613319575091600293918560019694106132ff575b505050020190556132bb565b61330f910151601f841690612dbc565b90555f80806132f3565b919360206001819287870151815501950192016132db565b6106c8565b9061334091613267565b565b5190565b5190565b6133549051610128565b90565b5f1b90565b906133776fffffffffffffffffffffffffffffffff91613357565b9181191691161790565b61339561339061339a92610128565b610ba1565b610128565b90565b90565b906133b56133b06133bc92613381565b61339d565b825461335c565b9055565b60801b90565b906133e26fffffffffffffffffffffffffffffffff19916133c0565b9181191691161790565b906134016133fc61340892613381565b61339d565b82546133c6565b9055565b9061343660205f61343c9461342e82820161342884880161334a565b906133a0565b01920161334a565b906133ec565b565b906134489161340c565b565b61346f61346961345984610115565b93613464858561300c565b610122565b91610d2d565b5f915b83831061347f5750505050565b60016020826134976134918495613346565b8661343e565b01920192019190613472565b906134ad9161344a565b565b5190565b6134bd90516101d9565b90565b919060086134de9102916134d863ffffffff84612d37565b92612d37565b9181191691161790565b90565b906134f5816101c6565b9067ffffffffffffffff82116135da5761351b6135219161351684866130eb565b6101d3565b92610e38565b60088204915f5b83811061359157506008830290035f8111613544575b50505050565b925f935f5b81811061355e5750505001555f80808061353e565b909194602061358560019261357a6135758a6134b3565b6134e8565b9085600402906134c0565b96019101919091613549565b5f5f5b600881106135ab5750906001918185015501613528565b959060206135d16001926135c66135c1866134b3565b6134e8565b908a600402906134c0565b92019601613594565b6106c8565b906135e9916134eb565b565b9061362f604060026136359461360e5f82016136085f880161320c565b90613336565b6136276001820161362160208801613342565b906134a3565b0192016134af565b906135df565b565b90613641916135eb565b565b613668613662613652846100af565b9361365d85856131da565b6100bc565b91610ce9565b5f915b8383106136785750505050565b600360208261369161368b600195613208565b86613637565b0192019201919061366b565b906136a791613643565b565b5190565b6136b8906002612cd6565b90565b600190818003010490565b5b8181106136d2575050565b806136df5f600193612f6d565b016136c7565b90918281106136f4575b505050565b61371261370c61370661371d956136bb565b926136bb565b92611280565b9182019101906136c6565b5f80806136ef565b9068010000000000000000811161374e578161374361374c93611248565b908281556136e5565b565b6106c8565b5f61375d91613725565b565b905f036137715761376f90613753565b565b6105d5565b5f600161378f9261378983808301612f6d565b0161375f565b565b905f036137a3576137a190613776565b565b6105d5565b5b8181106137b4575050565b806137c15f600293613791565b016137a9565b90918281106137d6575b505050565b6137f46137ee6137e86137ff956136ad565b926136ad565b9261123f565b9182019101906137a8565b5f80806137d1565b90680100000000000000008111613830578161382561382e93611207565b908281556137c7565b565b6106c8565b5190565b5190565b61386261385c61384c84610329565b936138578585613725565b610336565b91611280565b5f915b8383106138725750505050565b600160208261388a613884849561320c565b86613336565b01920192019190613865565b906138a09161383d565b565b906138cd602060016138d3946138c55f82016138bf5f880161320c565b90613336565b019201613839565b90613896565b565b906138df916138a2565b565b6139066139006138f084610316565b936138fb8585613807565b610323565b9161123f565b5f915b8383106139165750505050565b600260208261392f613929600195613835565b866138d5565b01920192019190613909565b90613945916138e1565b565b5190565b613956906002612cd6565b90565b5f60016139729261396c83808301612f6d565b01612f6d565b565b905f036139865761398490613959565b565b6105d5565b5b818110613997575050565b806139a45f600293613974565b0161398c565b90918281106139b9575b505050565b6139d76139d16139cb6139e29561394b565b9261394b565b926113c2565b91820191019061398b565b5f80806139b4565b90680100000000000000008111613a135781613a08613a119361138a565b908281556139aa565b565b6106c8565b5190565b90613a4760206001613a4d94613a3f5f8201613a395f880161320c565b90613336565b01920161320c565b90613336565b565b90613a5991613a1c565b565b613a80613a7a613a6a84610461565b93613a7585856139ea565b61046e565b916113c2565b5f915b838310613a905750505050565b6002602082613aa9613aa3600195613a18565b86613a4f565b01920192019190613a83565b90613abf91613a5b565b565b613acb905161051f565b90565b90613ada60ff91613357565b9181191691161790565b613aed9061051f565b90565b90565b90613b08613b03613b0f92613ae4565b613af0565b8254613ace565b9055565b90613b7060606003613b7694613b365f8201613b305f8801612cd2565b9061369d565b613b4f60018201613b49602088016136a9565b9061393b565b613b6860028201613b6260408801613947565b90613ab5565b019201613ac1565b90613af3565b565b90613b8291613b13565b565b613b8d9061081c565b5f198114613b9b5760010190565b61161f565b90613bac5f1991613357565b9181191691161790565b90613bcb613bc6613bd292611734565b612d60565b8254613ba0565b9055565b613be090546105fc565b90565b90808214613cc257613bf481613bd6565b9067ffffffffffffffff8211613cbd57613c1882613c1285546105fc565b85613210565b5f90601f8311600114613c4b57918091613c3a935f92613c3f575b5050612dd1565b90555b565b90915001545f80613c33565b90613c5a601f19841692610626565b90613c6485610626565b925f5b818110613ca557509160029391856001969410613c8b575b50505002019055613c3d565b613c9b910154601f841690612dbc565b90555f8080613c7f565b91936001806020928787015481550195019201613c67565b6106c8565b5050565b90613cd091613be3565b565b90808203613cdf575b5050565b613d075f8084613cff82613d0d9701613cf9848801610d50565b906133a0565b019201610d85565b906133ec565b5f80613cdb565b90613d1e91613cd2565b565b818114613d7757613d4c613d46613d3684610cf5565b93613d41858561300c565b610d2d565b91610d2d565b5f915b838310613d5c5750505050565b60018082613d6b829486613d14565b01920192019190613d4f565b5050565b90613d8591613d20565b565b90565b90613d9a905f1990600802612d37565b191690565b90808214613e4557613db081610e34565b9067ffffffffffffffff8211613e4057613dd6613ddc91613dd184866130eb565b610e38565b92610e38565b60088204918354905f5b848110613e2257506008840290035f8111613e03575b5050505050565b6001916004613e13920290613d8a565b93505001555f80808080613dfc565b94916001613e308192613d87565b9301958654938186015501613de6565b6106c8565b5050565b90613e5391613d9f565b565b90808203613e62575b5050565b60028083613e785f613e9296015f860190613cc6565b613e89600182016001860190613d7b565b01910190613e49565b5f80613e5e565b90613ea391613e55565b565b818114613efd57613ed1613ecb613ebb84610cb1565b93613ec685856131da565b610ce9565b91610ce9565b5f915b838310613ee15750505050565b60038082613ef160019486613e99565b01920192019190613ed4565b5050565b90613f0b91613ea5565b565b818114613f6457613f39613f33613f2384611248565b93613f2e8585613725565b611280565b91611280565b5f915b838310613f495750505050565b60018082613f58829486613cc6565b01920192019190613f3c565b5050565b90613f7291613f0d565b565b90808203613f81575b5050565b60018083613f975f613fa096015f860190613cc6565b01910190613f68565b5f80613f7d565b90613fb191613f74565b565b81811461400b57613fdf613fd9613fc984611207565b93613fd48585613807565b61123f565b9161123f565b5f915b838310613fef5750505050565b60028082613fff60019486613fa7565b01920192019190613fe2565b5050565b9061401991613fb3565b565b90808203614028575b5050565b6001808361403e5f61404796015f860190613cc6565b01910190613cc6565b5f80614024565b906140589161401b565b565b8181146140b2576140866140806140708461138a565b9361407b85856139ea565b6113c2565b916113c2565b5f915b8383106140965750505050565b600280826140a66001948661404e565b01920192019190614089565b5050565b906140c09161405a565b565b908082036140cf575b5050565b614112600380846140e85f61411897015f870190613f01565b6140f960018201600187019061400f565b61410a6002820160028701906140b6565b019201611489565b90613af3565b5f806140cb565b90614129916140c2565b565b61413490610bc0565b90565b90602061415e5f61416694015461415961415082610d3c565b5f86019061012e565b610d71565b91019061012e565b565b9061417581604093614137565b0190565b60010190565b9061419c61419661418f84610cf5565b8093610119565b92610d2d565b905f5b8181106141ac5750505090565b9091926141c46141be60019286614168565b94614179565b910191909161419f565b61420e9160026141fe6141ed606084015f86018582035f87015261062f565b60018501848203602086015261417f565b9201906040818403910152610ecb565b90565b9061421b916141ce565b90565b60030190565b9061423861423183610cb1565b80926100b3565b908161424960208302840194610ce9565b925f915b83831061425c57505050505090565b9091929394602061427d614277838560019503875289614211565b9761421e565b930193019193929061424d565b60010190565b906142a461429d83611248565b809261032d565b90816142b560208302840194611280565b925f915b8383106142c857505050505090565b909192939460206142e96142e38385600195038752896106bb565b9761428a565b93019301919392906142b9565b614322916001614312604083015f85018482035f86015261062f565b9201906020818403910152614290565b90565b9061432f916142f6565b90565b60020190565b9061434c61434583611207565b809261031a565b908161435d6020830284019461123f565b925f915b83831061437057505050505090565b9091929394602061439161438b838560019503875289614325565b97614332565b9301930191939290614361565b6143ca9160016143ba604083015f85018482035f86015261062f565b920190602081840391015261062f565b90565b906143d79161439e565b90565b60020190565b906143f46143ed8361138a565b8092610465565b9081614405602083028401946113c2565b925f915b83831061441857505050505090565b909192939460206144396144338385600195038752896143cd565b976143da565b9301930191939290614409565b906144a0906060614498600361449061447f61446e608087015f8a018882035f8a0152614224565b600189018782036020890152614338565b6002880186820360408801526143e0565b950154611475565b910190610524565b90565b6144b89160208201915f818403910152614446565b90565b6144e47f0000000000000000000000000000000000000000000000000000000000000000610bcc565b5f63a192a0f991819061450d836001956145186002614501610092565b98899788968795611893565b855260048501612c85565b03925af180156145d157614535915f916145af575b506006613b78565b6145676006614562600b61455161454c600a611612565b613b84565b61455c81600a613bb6565b90611750565b61411f565b336006906145aa6145987f5a1ed425a160d1bc929890b991acc0e3d25a6f5db1ac65c07ee4c917708f76d49261412b565b926145a1610092565b918291826144a3565b0390a2565b6145cb91503d805f833e6145c381836106dc565b810190611f53565b5f61452d565b612cc256fea26469706673582212205bdf48c709477ad1d504988b5ab70fe01da3ad2825229213f67d3fbd3d03afef64736f6c634300081c0033
|
opengradient/cli.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# type: ignore
|
|
2
|
+
|
|
1
3
|
import ast
|
|
2
4
|
import json
|
|
3
5
|
import logging
|
|
@@ -320,21 +322,23 @@ def infer(ctx, model_cid: str, inference_mode: str, input_data, input_file: Path
|
|
|
320
322
|
model_input = json.load(file)
|
|
321
323
|
|
|
322
324
|
click.echo(f'Running {inference_mode} inference for model "{model_cid}"')
|
|
323
|
-
|
|
325
|
+
inference_result = client.infer(model_cid=model_cid, inference_mode=InferenceModes[inference_mode], model_input=model_input)
|
|
324
326
|
|
|
325
327
|
click.echo() # Add a newline for better spacing
|
|
326
328
|
click.secho("✅ Transaction successful", fg="green", bold=True)
|
|
327
329
|
click.echo("──────────────────────────────────────")
|
|
328
330
|
click.echo("Transaction hash: ", nl=False)
|
|
329
|
-
click.secho(
|
|
331
|
+
click.secho(inference_result.transaction_hash, fg="cyan", bold=True)
|
|
330
332
|
|
|
331
|
-
block_explorer_link = f"{DEFAULT_BLOCKCHAIN_EXPLORER}0x{
|
|
333
|
+
block_explorer_link = f"{DEFAULT_BLOCKCHAIN_EXPLORER}0x{inference_result.transaction_hash}"
|
|
332
334
|
click.echo("Block explorer link: ", nl=False)
|
|
333
335
|
click.secho(block_explorer_link, fg="blue", underline=True)
|
|
334
336
|
click.echo()
|
|
335
337
|
|
|
336
338
|
click.secho("Inference result:", fg="green")
|
|
337
|
-
formatted_output = json.dumps(
|
|
339
|
+
formatted_output = json.dumps(
|
|
340
|
+
inference_result.model_output, indent=2, default=lambda x: x.tolist() if hasattr(x, "tolist") else str(x)
|
|
341
|
+
)
|
|
338
342
|
click.echo(formatted_output)
|
|
339
343
|
except json.JSONDecodeError as e:
|
|
340
344
|
click.echo(f"Error decoding JSON: {e}", err=True)
|