Instructions to use lvladikov/Krea2-Turbo-Distill-2step-LoRA with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use lvladikov/Krea2-Turbo-Distill-2step-LoRA with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("krea/Krea-2-Turbo", dtype=torch.bfloat16, device_map="cuda") pipe.load_lora_weights("lvladikov/Krea2-Turbo-Distill-2step-LoRA") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Inference
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Draw Things
- DiffusionBee
Delete krea2_raw_7step_lora_experiment_t2i.json
Browse files
krea2_raw_7step_lora_experiment_t2i.json
DELETED
|
@@ -1,513 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"id": "00000000-0000-0000-0000-000004ea24e7",
|
| 3 |
-
"revision": 0,
|
| 4 |
-
"last_node_id": 11,
|
| 5 |
-
"last_link_id": 10,
|
| 6 |
-
"nodes": [
|
| 7 |
-
{
|
| 8 |
-
"id": 1,
|
| 9 |
-
"type": "UNETLoader",
|
| 10 |
-
"pos": [
|
| 11 |
-
40,
|
| 12 |
-
60
|
| 13 |
-
],
|
| 14 |
-
"size": [
|
| 15 |
-
370,
|
| 16 |
-
82
|
| 17 |
-
],
|
| 18 |
-
"flags": {},
|
| 19 |
-
"order": 0,
|
| 20 |
-
"mode": 0,
|
| 21 |
-
"inputs": [],
|
| 22 |
-
"outputs": [
|
| 23 |
-
{
|
| 24 |
-
"name": "MODEL",
|
| 25 |
-
"type": "MODEL",
|
| 26 |
-
"links": [
|
| 27 |
-
1
|
| 28 |
-
],
|
| 29 |
-
"slot_index": 0
|
| 30 |
-
}
|
| 31 |
-
],
|
| 32 |
-
"properties": {
|
| 33 |
-
"Node name for S&R": "UNETLoader",
|
| 34 |
-
"cnr_id": "comfy-core"
|
| 35 |
-
},
|
| 36 |
-
"widgets_values": [
|
| 37 |
-
"krea2_raw_bf16.safetensors",
|
| 38 |
-
"default"
|
| 39 |
-
]
|
| 40 |
-
},
|
| 41 |
-
{
|
| 42 |
-
"id": 2,
|
| 43 |
-
"type": "LoraLoaderModelOnly",
|
| 44 |
-
"pos": [
|
| 45 |
-
40,
|
| 46 |
-
190
|
| 47 |
-
],
|
| 48 |
-
"size": [
|
| 49 |
-
370,
|
| 50 |
-
82
|
| 51 |
-
],
|
| 52 |
-
"flags": {},
|
| 53 |
-
"order": 1,
|
| 54 |
-
"mode": 0,
|
| 55 |
-
"inputs": [
|
| 56 |
-
{
|
| 57 |
-
"name": "model",
|
| 58 |
-
"type": "MODEL",
|
| 59 |
-
"link": 1
|
| 60 |
-
}
|
| 61 |
-
],
|
| 62 |
-
"outputs": [
|
| 63 |
-
{
|
| 64 |
-
"name": "MODEL",
|
| 65 |
-
"type": "MODEL",
|
| 66 |
-
"links": [
|
| 67 |
-
2
|
| 68 |
-
],
|
| 69 |
-
"slot_index": 0
|
| 70 |
-
}
|
| 71 |
-
],
|
| 72 |
-
"properties": {
|
| 73 |
-
"Node name for S&R": "LoraLoaderModelOnly",
|
| 74 |
-
"cnr_id": "comfy-core"
|
| 75 |
-
},
|
| 76 |
-
"widgets_values": [
|
| 77 |
-
"krea2_turbo_2step_rank_64_lora_comfyui.safetensors",
|
| 78 |
-
1.0
|
| 79 |
-
]
|
| 80 |
-
},
|
| 81 |
-
{
|
| 82 |
-
"id": 3,
|
| 83 |
-
"type": "CLIPLoader",
|
| 84 |
-
"pos": [
|
| 85 |
-
40,
|
| 86 |
-
320
|
| 87 |
-
],
|
| 88 |
-
"size": [
|
| 89 |
-
370,
|
| 90 |
-
106
|
| 91 |
-
],
|
| 92 |
-
"flags": {},
|
| 93 |
-
"order": 2,
|
| 94 |
-
"mode": 0,
|
| 95 |
-
"inputs": [],
|
| 96 |
-
"outputs": [
|
| 97 |
-
{
|
| 98 |
-
"name": "CLIP",
|
| 99 |
-
"type": "CLIP",
|
| 100 |
-
"links": [
|
| 101 |
-
3,
|
| 102 |
-
5
|
| 103 |
-
],
|
| 104 |
-
"slot_index": 0
|
| 105 |
-
}
|
| 106 |
-
],
|
| 107 |
-
"properties": {
|
| 108 |
-
"Node name for S&R": "CLIPLoader",
|
| 109 |
-
"cnr_id": "comfy-core"
|
| 110 |
-
},
|
| 111 |
-
"widgets_values": [
|
| 112 |
-
"qwen3vl_4b_bf16.safetensors",
|
| 113 |
-
"krea2",
|
| 114 |
-
"default"
|
| 115 |
-
]
|
| 116 |
-
},
|
| 117 |
-
{
|
| 118 |
-
"id": 8,
|
| 119 |
-
"type": "VAELoader",
|
| 120 |
-
"pos": [
|
| 121 |
-
40,
|
| 122 |
-
470
|
| 123 |
-
],
|
| 124 |
-
"size": [
|
| 125 |
-
370,
|
| 126 |
-
58
|
| 127 |
-
],
|
| 128 |
-
"flags": {},
|
| 129 |
-
"order": 3,
|
| 130 |
-
"mode": 0,
|
| 131 |
-
"inputs": [],
|
| 132 |
-
"outputs": [
|
| 133 |
-
{
|
| 134 |
-
"name": "VAE",
|
| 135 |
-
"type": "VAE",
|
| 136 |
-
"links": [
|
| 137 |
-
9
|
| 138 |
-
],
|
| 139 |
-
"slot_index": 0
|
| 140 |
-
}
|
| 141 |
-
],
|
| 142 |
-
"properties": {
|
| 143 |
-
"Node name for S&R": "VAELoader",
|
| 144 |
-
"cnr_id": "comfy-core"
|
| 145 |
-
},
|
| 146 |
-
"widgets_values": [
|
| 147 |
-
"qwen_image_vae.safetensors"
|
| 148 |
-
]
|
| 149 |
-
},
|
| 150 |
-
{
|
| 151 |
-
"id": 4,
|
| 152 |
-
"type": "CLIPTextEncode",
|
| 153 |
-
"pos": [
|
| 154 |
-
450,
|
| 155 |
-
60
|
| 156 |
-
],
|
| 157 |
-
"size": [
|
| 158 |
-
430,
|
| 159 |
-
200
|
| 160 |
-
],
|
| 161 |
-
"flags": {},
|
| 162 |
-
"order": 4,
|
| 163 |
-
"mode": 0,
|
| 164 |
-
"inputs": [
|
| 165 |
-
{
|
| 166 |
-
"name": "clip",
|
| 167 |
-
"type": "CLIP",
|
| 168 |
-
"link": 3
|
| 169 |
-
}
|
| 170 |
-
],
|
| 171 |
-
"outputs": [
|
| 172 |
-
{
|
| 173 |
-
"name": "CONDITIONING",
|
| 174 |
-
"type": "CONDITIONING",
|
| 175 |
-
"links": [
|
| 176 |
-
4
|
| 177 |
-
],
|
| 178 |
-
"slot_index": 0
|
| 179 |
-
}
|
| 180 |
-
],
|
| 181 |
-
"properties": {
|
| 182 |
-
"Node name for S&R": "CLIPTextEncode",
|
| 183 |
-
"cnr_id": "comfy-core"
|
| 184 |
-
},
|
| 185 |
-
"widgets_values": [
|
| 186 |
-
"Portrait of a young woman with freckles and windswept auburn hair, soft window light, shallow depth of field, photograph, sharp detail"
|
| 187 |
-
]
|
| 188 |
-
},
|
| 189 |
-
{
|
| 190 |
-
"id": 5,
|
| 191 |
-
"type": "CLIPTextEncode",
|
| 192 |
-
"pos": [
|
| 193 |
-
450,
|
| 194 |
-
290
|
| 195 |
-
],
|
| 196 |
-
"size": [
|
| 197 |
-
430,
|
| 198 |
-
80
|
| 199 |
-
],
|
| 200 |
-
"flags": {},
|
| 201 |
-
"order": 5,
|
| 202 |
-
"mode": 0,
|
| 203 |
-
"inputs": [
|
| 204 |
-
{
|
| 205 |
-
"name": "clip",
|
| 206 |
-
"type": "CLIP",
|
| 207 |
-
"link": 5
|
| 208 |
-
}
|
| 209 |
-
],
|
| 210 |
-
"outputs": [
|
| 211 |
-
{
|
| 212 |
-
"name": "CONDITIONING",
|
| 213 |
-
"type": "CONDITIONING",
|
| 214 |
-
"links": [
|
| 215 |
-
6
|
| 216 |
-
],
|
| 217 |
-
"slot_index": 0
|
| 218 |
-
}
|
| 219 |
-
],
|
| 220 |
-
"properties": {
|
| 221 |
-
"Node name for S&R": "CLIPTextEncode",
|
| 222 |
-
"cnr_id": "comfy-core"
|
| 223 |
-
},
|
| 224 |
-
"widgets_values": [
|
| 225 |
-
""
|
| 226 |
-
]
|
| 227 |
-
},
|
| 228 |
-
{
|
| 229 |
-
"id": 6,
|
| 230 |
-
"type": "EmptyLatentImage",
|
| 231 |
-
"pos": [
|
| 232 |
-
450,
|
| 233 |
-
400
|
| 234 |
-
],
|
| 235 |
-
"size": [
|
| 236 |
-
430,
|
| 237 |
-
106
|
| 238 |
-
],
|
| 239 |
-
"flags": {},
|
| 240 |
-
"order": 6,
|
| 241 |
-
"mode": 0,
|
| 242 |
-
"inputs": [],
|
| 243 |
-
"outputs": [
|
| 244 |
-
{
|
| 245 |
-
"name": "LATENT",
|
| 246 |
-
"type": "LATENT",
|
| 247 |
-
"links": [
|
| 248 |
-
7
|
| 249 |
-
],
|
| 250 |
-
"slot_index": 0
|
| 251 |
-
}
|
| 252 |
-
],
|
| 253 |
-
"properties": {
|
| 254 |
-
"Node name for S&R": "EmptyLatentImage",
|
| 255 |
-
"cnr_id": "comfy-core"
|
| 256 |
-
},
|
| 257 |
-
"widgets_values": [
|
| 258 |
-
1024,
|
| 259 |
-
768,
|
| 260 |
-
1
|
| 261 |
-
]
|
| 262 |
-
},
|
| 263 |
-
{
|
| 264 |
-
"id": 7,
|
| 265 |
-
"type": "KSampler",
|
| 266 |
-
"pos": [
|
| 267 |
-
930,
|
| 268 |
-
60
|
| 269 |
-
],
|
| 270 |
-
"size": [
|
| 271 |
-
330,
|
| 272 |
-
262
|
| 273 |
-
],
|
| 274 |
-
"flags": {},
|
| 275 |
-
"order": 7,
|
| 276 |
-
"mode": 0,
|
| 277 |
-
"inputs": [
|
| 278 |
-
{
|
| 279 |
-
"name": "model",
|
| 280 |
-
"type": "MODEL",
|
| 281 |
-
"link": 2
|
| 282 |
-
},
|
| 283 |
-
{
|
| 284 |
-
"name": "positive",
|
| 285 |
-
"type": "CONDITIONING",
|
| 286 |
-
"link": 4
|
| 287 |
-
},
|
| 288 |
-
{
|
| 289 |
-
"name": "negative",
|
| 290 |
-
"type": "CONDITIONING",
|
| 291 |
-
"link": 6
|
| 292 |
-
},
|
| 293 |
-
{
|
| 294 |
-
"name": "latent_image",
|
| 295 |
-
"type": "LATENT",
|
| 296 |
-
"link": 7
|
| 297 |
-
}
|
| 298 |
-
],
|
| 299 |
-
"outputs": [
|
| 300 |
-
{
|
| 301 |
-
"name": "LATENT",
|
| 302 |
-
"type": "LATENT",
|
| 303 |
-
"links": [
|
| 304 |
-
8
|
| 305 |
-
],
|
| 306 |
-
"slot_index": 0
|
| 307 |
-
}
|
| 308 |
-
],
|
| 309 |
-
"properties": {
|
| 310 |
-
"Node name for S&R": "KSampler",
|
| 311 |
-
"cnr_id": "comfy-core"
|
| 312 |
-
},
|
| 313 |
-
"widgets_values": [
|
| 314 |
-
4242,
|
| 315 |
-
"fixed",
|
| 316 |
-
7,
|
| 317 |
-
2.0,
|
| 318 |
-
"euler",
|
| 319 |
-
"simple",
|
| 320 |
-
1
|
| 321 |
-
]
|
| 322 |
-
},
|
| 323 |
-
{
|
| 324 |
-
"id": 9,
|
| 325 |
-
"type": "VAEDecode",
|
| 326 |
-
"pos": [
|
| 327 |
-
1300,
|
| 328 |
-
60
|
| 329 |
-
],
|
| 330 |
-
"size": [
|
| 331 |
-
210,
|
| 332 |
-
46
|
| 333 |
-
],
|
| 334 |
-
"flags": {},
|
| 335 |
-
"order": 8,
|
| 336 |
-
"mode": 0,
|
| 337 |
-
"inputs": [
|
| 338 |
-
{
|
| 339 |
-
"name": "samples",
|
| 340 |
-
"type": "LATENT",
|
| 341 |
-
"link": 8
|
| 342 |
-
},
|
| 343 |
-
{
|
| 344 |
-
"name": "vae",
|
| 345 |
-
"type": "VAE",
|
| 346 |
-
"link": 9
|
| 347 |
-
}
|
| 348 |
-
],
|
| 349 |
-
"outputs": [
|
| 350 |
-
{
|
| 351 |
-
"name": "IMAGE",
|
| 352 |
-
"type": "IMAGE",
|
| 353 |
-
"links": [
|
| 354 |
-
10
|
| 355 |
-
],
|
| 356 |
-
"slot_index": 0
|
| 357 |
-
}
|
| 358 |
-
],
|
| 359 |
-
"properties": {
|
| 360 |
-
"Node name for S&R": "VAEDecode",
|
| 361 |
-
"cnr_id": "comfy-core"
|
| 362 |
-
},
|
| 363 |
-
"widgets_values": []
|
| 364 |
-
},
|
| 365 |
-
{
|
| 366 |
-
"id": 10,
|
| 367 |
-
"type": "SaveImage",
|
| 368 |
-
"pos": [
|
| 369 |
-
1300,
|
| 370 |
-
150
|
| 371 |
-
],
|
| 372 |
-
"size": [
|
| 373 |
-
420,
|
| 374 |
-
460
|
| 375 |
-
],
|
| 376 |
-
"flags": {},
|
| 377 |
-
"order": 9,
|
| 378 |
-
"mode": 0,
|
| 379 |
-
"inputs": [
|
| 380 |
-
{
|
| 381 |
-
"name": "images",
|
| 382 |
-
"type": "IMAGE",
|
| 383 |
-
"link": 10
|
| 384 |
-
}
|
| 385 |
-
],
|
| 386 |
-
"outputs": [],
|
| 387 |
-
"properties": {
|
| 388 |
-
"Node name for S&R": "SaveImage",
|
| 389 |
-
"cnr_id": "comfy-core"
|
| 390 |
-
},
|
| 391 |
-
"widgets_values": [
|
| 392 |
-
"krea2_raw_7step_2step_lora_experiment"
|
| 393 |
-
]
|
| 394 |
-
},
|
| 395 |
-
{
|
| 396 |
-
"id": 11,
|
| 397 |
-
"type": "MarkdownNote",
|
| 398 |
-
"pos": [
|
| 399 |
-
930,
|
| 400 |
-
380
|
| 401 |
-
],
|
| 402 |
-
"size": [
|
| 403 |
-
560,
|
| 404 |
-
400
|
| 405 |
-
],
|
| 406 |
-
"flags": {},
|
| 407 |
-
"order": 10,
|
| 408 |
-
"mode": 0,
|
| 409 |
-
"inputs": [],
|
| 410 |
-
"outputs": [],
|
| 411 |
-
"properties": {},
|
| 412 |
-
"widgets_values": [
|
| 413 |
-
"## Krea 2 Raw at 7 steps with the 2-step LoRA \u2014 an experiment\n\n**The LoRA is trained on Krea 2 Turbo, for Krea 2 Turbo, at 2 steps.** It loads on Krea 2 Raw only because the two models share one architecture. This workflow reproduces the experiment in `assets/resolution_sweeps/raw-LoRA-7steps-experiment/`: Raw + the LoRA at **7 steps** \u2014 a quarter of Raw's usual 28 \u2014 with light guidance. Not every prompt works well at 7 steps; for those, a few more steps may help.\n\n### Files\n| file | put it in |\n| --- | --- |\n| `krea2_raw_bf16.safetensors` | `models/diffusion_models/` |\n| `qwen3vl_4b_bf16.safetensors` | `models/text_encoders/` |\n| `qwen_image_vae.safetensors` | `models/vae/` |\n| `krea2_turbo_2step_rank_64_lora_comfyui.safetensors` | `models/loras/` |\n\nThe first three are from [Comfy-Org/Krea-2](https://huggingface.co/Comfy-Org/Krea-2); the LoRA is the same `_comfyui` file as in the root of this repository. Smaller Raw builds there (`krea2_raw_int8_convrot`, `krea2_raw_fp8_scaled`) work the same way \u2014 set the name in **Load Diffusion Model**; `fp8_scaled` is NVIDIA-only.\n\n### Settings that matter\n- **steps 7**, **cfg 2.0** (light guidance: a heavy cfg such as 5.5 crushes most images at 7 steps, and cfg 1.0 turns guidance off), sampler **euler**, scheduler **simple**\n- LoRA strength **1.0**\n- The negative is an **empty** CLIP Text Encode \u2014 at cfg 2.0 it is evaluated\n- 1024x768, seed 4242. Seeds do not carry over between ComfyUI and other runtimes, so the pictures will not match the folder's images exactly\n\nFor the settings the LoRA is actually made for \u2014 Krea 2 Turbo, 2 steps, cfg 1.0 \u2014 use `krea2_turbo_2step_lora_t2i.json`, next to this one in the root of the repository."
|
| 414 |
-
],
|
| 415 |
-
"color": "#432",
|
| 416 |
-
"bgcolor": "#653"
|
| 417 |
-
}
|
| 418 |
-
],
|
| 419 |
-
"links": [
|
| 420 |
-
[
|
| 421 |
-
1,
|
| 422 |
-
1,
|
| 423 |
-
0,
|
| 424 |
-
2,
|
| 425 |
-
0,
|
| 426 |
-
"MODEL"
|
| 427 |
-
],
|
| 428 |
-
[
|
| 429 |
-
2,
|
| 430 |
-
2,
|
| 431 |
-
0,
|
| 432 |
-
7,
|
| 433 |
-
0,
|
| 434 |
-
"MODEL"
|
| 435 |
-
],
|
| 436 |
-
[
|
| 437 |
-
3,
|
| 438 |
-
3,
|
| 439 |
-
0,
|
| 440 |
-
4,
|
| 441 |
-
0,
|
| 442 |
-
"CLIP"
|
| 443 |
-
],
|
| 444 |
-
[
|
| 445 |
-
4,
|
| 446 |
-
4,
|
| 447 |
-
0,
|
| 448 |
-
7,
|
| 449 |
-
1,
|
| 450 |
-
"CONDITIONING"
|
| 451 |
-
],
|
| 452 |
-
[
|
| 453 |
-
5,
|
| 454 |
-
3,
|
| 455 |
-
0,
|
| 456 |
-
5,
|
| 457 |
-
0,
|
| 458 |
-
"CLIP"
|
| 459 |
-
],
|
| 460 |
-
[
|
| 461 |
-
6,
|
| 462 |
-
5,
|
| 463 |
-
0,
|
| 464 |
-
7,
|
| 465 |
-
2,
|
| 466 |
-
"CONDITIONING"
|
| 467 |
-
],
|
| 468 |
-
[
|
| 469 |
-
7,
|
| 470 |
-
6,
|
| 471 |
-
0,
|
| 472 |
-
7,
|
| 473 |
-
3,
|
| 474 |
-
"LATENT"
|
| 475 |
-
],
|
| 476 |
-
[
|
| 477 |
-
8,
|
| 478 |
-
7,
|
| 479 |
-
0,
|
| 480 |
-
9,
|
| 481 |
-
0,
|
| 482 |
-
"LATENT"
|
| 483 |
-
],
|
| 484 |
-
[
|
| 485 |
-
9,
|
| 486 |
-
8,
|
| 487 |
-
0,
|
| 488 |
-
9,
|
| 489 |
-
1,
|
| 490 |
-
"VAE"
|
| 491 |
-
],
|
| 492 |
-
[
|
| 493 |
-
10,
|
| 494 |
-
9,
|
| 495 |
-
0,
|
| 496 |
-
10,
|
| 497 |
-
0,
|
| 498 |
-
"IMAGE"
|
| 499 |
-
]
|
| 500 |
-
],
|
| 501 |
-
"groups": [],
|
| 502 |
-
"config": {},
|
| 503 |
-
"extra": {
|
| 504 |
-
"ds": {
|
| 505 |
-
"scale": 0.85,
|
| 506 |
-
"offset": [
|
| 507 |
-
0,
|
| 508 |
-
0
|
| 509 |
-
]
|
| 510 |
-
}
|
| 511 |
-
},
|
| 512 |
-
"version": 0.4
|
| 513 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|