submission 658361
bhagawan-yantrion · python · License unknown
Use it
Vendorable · source mirrored · license unknownView source →
No package. Vendor the mirrored source: 480 lines, June 9 Researcher Reciprocity License v1.0.
submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mxfp4-mm-658361?include=source"interfacepython
Compatibility
measured onAMD Instinct MI355X
declared hardwareAMD Instinct MI355X
architecturesgfx950
dtypesbf16, mxfp4
Benchmark evidence
1 measurement across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:e717f6f6f17f59e5cdeb980bd794a6c761515d42b8e19e112376ace7f1cc1d10
license declaredunknown
license concludedunknown
authorsbhagawan-yantrion
imported2026-08-15
Techniques
Extracted from the mirrored source by pattern, never inferred. Each row cites its line.
fp4
MXFP4-MM Hybrid: dispatch by K size.Kernel source
submission.py480 lines
#!POPCORN leaderboard amd-mxfp4-mm
#!POPCORN gpu MI355X
"""
MXFP4-MM Hybrid: dispatch by K size.
K <= 1024: fused quant+GEMM HIP kernel (1 launch, ~9 us)
K > 1024: HIP quant+shuffle (1 launch) + ASM gemm_a4w4 (1 launch, ~14-26 us)
"""
import os, ctypes, base64, tempfile
import torch
import aiter
from aiter import dtypes
from aiter.ops.triton.quant import dynamic_mxfp4_quant
from aiter.utility.fp4_utils import e8m0_shuffle
from task import input_t, output_t
# ---- Embedded .so (both kernels) ----
_SO_B64 = (
"f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAAAAAAAAAAABAAAAAAAAAADBkAAAAAAAAAAAAAEAAOAAJAEAAHgAcAAYAAAAEAAAAQAAA"
"AAAAAABAAAAAAAAAAEAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AACkUAAAAAAAAKRQAAAAAAAAABAAAAAAAAABAAAABQAAALBQAAAAAAAAsGAAAAAAAACwYAAAAAAAAHAHAAAAAAAAcAcAAAAAAAAA"
"EAAAAAAAAAEAAAAGAAAAIFgAAAAAAAAgeAAAAAAAACB4AAAAAAAAKAIAAAAAAADgBwAAAAAAAAAQAAAAAAAAAQAAAAYAAABIWgAA"
"AAAAAEiKAAAAAAAASIoAAAAAAACQAAAAAAAAAOkAAAAAAAAAABAAAAAAAAACAAAABgAAAEhYAAAAAAAASHgAAAAAAABIeAAAAAAA"
"ANABAAAAAAAA0AEAAAAAAAAIAAAAAAAAAFLldGQEAAAAIFgAAAAAAAAgeAAAAAAAACB4AAAAAAAAKAIAAAAAAADgBwAAAAAAAAEA"
"AAAAAAAAUOV0ZAQAAACoTgAAAAAAAKhOAAAAAAAAqE4AAAAAAABUAAAAAAAAAFQAAAAAAAAABAAAAAAAAABR5XRkBgAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAgAAAA"
"AAAAAAAAAAAAAAAAAAAAABAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAiAAAAAAAAAAAAAAAAAAAAAAAAADUAAAAiAAAAAAAA"
"AAAAAAAAAAAAAAAAAHQAAAASAAAAAAAAAAAAAAAAAAAAAAAAAKYAAAASAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAASAAAAAAAAAAAA"
"AAAAAAAAAAAAACgBAAASAAAAAAAAAAAAAAAAAAAAAAAAAFMBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGoBAAASAAAAAAAAAAAAAAAA"
"AAAAAAAAAIABAAASAAAAAAAAAAAAAAAAAAAAAAAAALUBAAASAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAASAAwAQGEAAAAAAAD0AAAA"
"AAAAAI4AAAARABIAOHgAAAAAAAAIAAAAAAAAALYAAAASAAwAQGIAAAAAAADjAAAAAAAAAOAAAAARABIAQHgAAAAAAAAIAAAAAAAA"
"APsAAAASAAwAMGMAAAAAAACfAQAAAAAAADgBAAASAAwA0GQAAAAAAACAAQAAAAAAAJkBAAARABkAMIsAAAAAAAABAAAAAAAAAAAA"
"AQACAAMAAgAEAAQABAAEAAQABAAEAAMAAQABAAEAAQABAAEAAQABAAEAwgEAADAAAAAQAAAAAQABANsBAAAwAAAAEAAAAAEAAQDx"
"AQAAMAAAAAAAAAByJwYPAAAEANMBAAAAAAAAUCZ5CwAAAgDpAQAAAAAAAHUaaQkAAAMA+wEAAAAAAAABAAAADQAAAAIAAAAaAAAA"
"AAABB0AgIAAABASICIAAAA0AAAAY6tJq7pxrShjCj5uQGTnW2h0lfEoNMI61h9G0AF9fZ21vbl9zdGFydF9fAF9fcmVnaXN0ZXJf"
"ZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2RldmljZV9zdHViX19mdXNlZF9teGZw"
"NF9nZW1tX2tlcm5lbABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAGhpcExhdW5jaEtl"
"cm5lbABfX2RldmljZV9zdHViX19mdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABs"
"YXVuY2hfZnVzZWRfZ2VtbQBfX2hpcFB1c2hDYWxsQ29uZmlndXJhdGlvbgBoaXBHZXRMYXN0RXJyb3IAbGF1bmNoX2Z1c2VkX3F1"
"YW50X3NodWZmbGUAX19oaXBSZWdpc3RlckZhdEJpbmFyeQBfX2hpcFJlZ2lzdGVyRnVuY3Rpb24AX19oaXBVbnJlZ2lzdGVyRmF0"
"QmluYXJ5AF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfX2N4YV9hdGV4aXQAbGliYW1kaGlwNjQuc28uNwBoaXBfNC4yAGxp"
"YmdjY19zLnNvLjEAR0NDXzMuMABsaWJjLnNvLjYAR0xJQkNfMi4yLjUAL29wdC9yb2NtLTcuMS4wL2xpYgBsaWJzdGRjKysuc28u"
"NgBsaWJtLnNvLjYAAAAAACB4AAAAAAAACAAAAAAAAACwYAAAAAAAACh4AAAAAAAACAAAAAAAAABQZgAAAAAAADB4AAAAAAAACAAA"
"AAAAAADwYAAAAAAAAEiKAAAAAAAACAAAAAAAAABIigAAAAAAAFiKAAAAAAAACAAAAAAAAAAAEAAAAAAAABh6AAAAAAAABgAAAAEA"
"AAAAAAAAAAAAACB6AAAAAAAABgAAAAIAAAAAAAAAAAAAACh6AAAAAAAABgAAAAMAAAAAAAAAAAAAADB6AAAAAAAABgAAAAQAAAAA"
"AAAAAAAAADh4AAAAAAAAAQAAAA0AAAAAAAAAAAAAADh6AAAAAAAABgAAAA4AAAAAAAAAAAAAAEB4AAAAAAAAAQAAAA8AAAAAAAAA"
"AAAAAEB6AAAAAAAABgAAABAAAAAAAAAAAAAAAICKAAAAAAAABwAAAAIAAAAAAAAAAAAAAIiKAAAAAAAABwAAAAMAAAAAAAAAAAAA"
"AJCKAAAAAAAABwAAAAQAAAAAAAAAAAAAAJiKAAAAAAAABwAAAAUAAAAAAAAAAAAAAKCKAAAAAAAABwAAAAYAAAAAAAAAAAAAAKiK"
"AAAAAAAABwAAAAcAAAAAAAAAAAAAALCKAAAAAAAABwAAAAgAAAAAAAAAAAAAALiKAAAAAAAABwAAAAkAAAAAAAAAAAAAAMCKAAAA"
"AAAABwAAAAoAAAAAAAAAAAAAAMiKAAAAAAAABwAAAAsAAAAAAAAAAAAAANCKAAAAAAAABwAAAAwAAAAAAAAAAAAAAGZ1c2VkX3F1"
"YW50X3NodWZmbGVfa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fQ0xBTkdfT0ZGTE9BRF9CVU5ETEVfXwIAAAAA"
"AAAAABAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAaG9zdC14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtABAAAAAAAACoLgAAAAAAAB8A"
"AAAAAAAAaGlwdjQtYW1kZ2NuLWFtZC1hbWRoc2EtLWdmeDk1MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAB/RUxGAgEBQAQAAAAAAAAAAwDgAAEAAAAAAAAAAAAAAEAAAAAAAAAAqCoAAAAAAABPBQAAQAA4AAkA"
"QAAQAA4ABgAAAAQAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAD4AQAAAAAAAPgBAAAAAAAACAAAAAAAAAABAAAABAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAIAOAAAAAAAAgA4AAAAAAAAAEAAAAAAAAAEAAAAFAAAAAA8AAAAAAAAAHwAAAAAAAAAfAAAAAAAA"
"QBQAAAAAAABAFAAAAAAAAAAQAAAAAAAAAQAAAAYAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABwAAAAAAAAAMAMAAAAAAAAABAA"
"AAAAAAABAAAABgAAALAjAAAAAAAAsFMAAAAAAACwUwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAIAAAAGAAAAQCMAAAAA"
"AABAQwAAAAAAAEBDAAAAAAAAcAAAAAAAAABwAAAAAAAAAAgAAAAAAAAAUuV0ZAQAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABw"
"AAAAAAAAAMAMAAAAAAAAAQAAAAAAAABR5XRkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAQAAAAEAAAAOAIAAAAAAAA4AgAAAAAAADgCAAAAAAAAOAoAAAAAAAA4CgAAAAAAAAQAAAAAAAAABwAAACEKAAAgAAAAQU1E"
"R1BVAACDrmFtZGhzYS5rZXJuZWxzkt4AEqsuYWdwcl9jb3VudAClLmFyZ3Oaha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFk"
"ZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vz"
"c6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVy"
"ha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQQpS5zaXplCKsudmFsdWVfa2lu"
"ZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0GKUu"
"c2l6ZQirLnZhbHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldCClLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zm"
"c2V0JKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQopS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9m"
"ZnNldCylLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0MKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5v"
"ZmZzZXQ0pS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZbkuZ3JvdXBfc2VnbWVudF9maXhlZF9zaXplzRAAti5rZXJuYXJnX3Nl"
"Z21lbnRfYWxpZ24ItS5rZXJuYXJnX3NlZ21lbnRfc2l6ZTipLmxhbmd1YWdlqE9wZW5DTCBDsS5sYW5ndWFnZV92ZXJzaW9ukgIA"
"uC5tYXhfZmxhdF93b3JrZ3JvdXBfc2l6Zc0BAKUubmFtZbdmdXNlZF9teGZwNF9nZW1tX2tlcm5lbLsucHJpdmF0ZV9zZWdtZW50"
"X2ZpeGVkX3NpemUAqy5zZ3ByX2NvdW50JLEuc2dwcl9zcGlsbF9jb3VudACnLnN5bWJvbLpmdXNlZF9teGZwNF9nZW1tX2tlcm5l"
"bC5rZLgudW5pZm9ybV93b3JrX2dyb3VwX3NpemUBsy51c2VzX2R5bmFtaWNfc3RhY2vCqy52Z3ByX2NvdW50P7Eudmdwcl9zcGls"
"bF9jb3VudACvLndhdmVmcm9udF9zaXplQN4AEqsuYWdwcl9jb3VudAClLmFyZ3PcABaFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25s"
"ea4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldAClLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKFri5hY3R1YWxf"
"YWNjZXNzqndyaXRlX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxf"
"YnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0EKUuc2l6ZQirLnZh"
"bHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldBilLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0HKUuc2l6"
"ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQgpS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNp"
"emUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5z"
"aXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldDClLnNpemUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF94"
"g6cub2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Jsb2NrX2NvdW50X3mDpy5vZmZzZXQ4pS5zaXplBKsudmFsdWVf"
"a2luZLRoaWRkZW5fYmxvY2tfY291bnRfeoOnLm9mZnNldDylLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91cF9zaXplX3iD"
"py5vZmZzZXQ+pS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV95g6cub2Zmc2V0QKUuc2l6ZQKrLnZhbHVlX2tp"
"bmSzaGlkZGVuX2dyb3VwX3NpemVfeoOnLm9mZnNldEKlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeIOnLm9m"
"ZnNldESlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeYOnLm9mZnNldEalLnNpemUCqy52YWx1ZV9raW5ksmhp"
"ZGRlbl9yZW1haW5kZXJfeoOnLm9mZnNldFilLnNpemUIqy52YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3iDpy5vZmZz"
"ZXRgpS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF95g6cub2Zmc2V0aKUuc2l6ZQirLnZhbHVlX2tpbmS2"
"aGlkZGVuX2dsb2JhbF9vZmZzZXRfeoOnLm9mZnNldHClLnNpemUCqy52YWx1ZV9raW5ksGhpZGRlbl9ncmlkX2RpbXO5Lmdyb3Vw"
"X3NlZ21lbnRfZml4ZWRfc2l6ZQC2Lmtlcm5hcmdfc2VnbWVudF9hbGlnbgi1Lmtlcm5hcmdfc2VnbWVudF9zaXplzQEwqS5sYW5n"
"dWFnZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQClLm5hbWW6ZnVzZWRf"
"cXVhbnRfc2h1ZmZsZV9rZXJuZWy7LnByaXZhdGVfc2VnbWVudF9maXhlZF9zaXplAKsuc2dwcl9jb3VudBOxLnNncHJfc3BpbGxf"
"Y291bnQApy5zeW1ib2y9ZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2S4LnVuaWZvcm1fd29ya19ncm91cF9zaXplAbMudXNl"
"c19keW5hbWljX3N0YWNrwqsudmdwcl9jb3VudDOxLnZncHJfc3BpbGxfY291bnQAry53YXZlZnJvbnRfc2l6ZUCtYW1kaHNhLnRh"
"cmdldLlhbWRnY24tYW1kLWFtZGhzYS0tZ2Z4OTUwrmFtZGhzYS52ZXJzaW9ukgECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AQAAABIDBwAAHwAAAAAAAEwKAAAAAAAAGQAAABEDBgAADgAAAAAAAEAAAAAAAAAANAAAABIDBwAAKgAAAAAAADQFAAAAAAAATwAA"
"ABEDBgBADgAAAAAAAEAAAAAAAAAAbQAAABEACgCwUwAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAGgAAAAgABQIAsCAAAQAAAO6c"
"a0ps/JkMkBk51mxBnmW1h9G0BgAAAAYAAAAEAAAABQAAAAMAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA"
"ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwua2QAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJu"
"ZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2QAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AAAAAAAAAAAAAAAAAAAA"
"AAAQAAAAAAAAOAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAcBrwCEAAAACAAAAAAAAAAAAAAAAAAAADAB"
"AAAAAAAAwBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACGAK8AhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgrAIAAAAIIABCCwBAQmjwAOJn/AjL8JvwOBA58EkASaBI8DBAOBA4YD"
"kAMMAn6AA4SBAUcCfgAAgL//AgIK/v9/TwEPAn4AAIC/AQUKfgQFBJIFBASWBQQFgQIFBJYEAwWSAgWFgQSBBoEFA4eBBQMJvwYE"
"BIUHBQWFBIEGgQUDCb8GBASFBAMDkgIDgoEBAADSAgwJBAqAAr8BD1AoAwCFvwEPDCiAAYK+AQCCv8EBgr6AAQbAGAAAAASEFo4p"
"AMjRAAkJAoAAl75+AuqJgAIKfoACCH6AAgZ+gAIEfggCh7+AAAbAMAAAAAAECsAAAAAAAAMGwBAAAACEAAgggwAEJP8EVCZ4AAAA"
"FggEaAgEiH0CAIXSAhcAAJ8EBiJ/wIy/FgAI0gIDQQCBVAQkKwAA0gQRCQQCAIXSKAUAAJ8EBiIYAAjSEgAJBIYIBCSGAAYg/wQE"
"JsAAAAAAAADSAAUNBP8CAibg////AAAB0gB7CQQKnwCPAALo0QEHAAQKAACBhlICJIACBH4AgRiQhVJYJAAAxNAJUAIACoULjwEA"
"ANIHEQUEGgAI0hYBCQIcAAjSFgERAh4ACNIWARkCIAAI0hYBIQIiAAjSFgEpAiQACNIWATECasGOiIACTn7/AJm+AACAAIP/GrD/"
"AJu+AAUMDP8AnL4AAP8AKQNafoAAnb4CAwZ+AgMIfgIDCn4sAIK/fgL+h4gmFiQLAO3RCyVuAJAoJCQLAAHSEjksBBIAANIVMS0E"
"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"
"nxASIn/AjL8IAAjSCAMZAACAbNwIAX8AfgD+h4EAAigAAMTQCAICAABqgoYCIIC+DQCIvwIAyNEDIQUC/38CsAcA/9EDBQoAAgLo"
"0QETGASfBAYif8CMvwIACNICAxkAAIBs3AIHfwB+AP6HggACKAAAxNAIAgIAAGqChgIggL4NAIi/AgDI0QQhBQL/fwKwBAD/0QQF"
"CgACAujRARMYBJ8EBiJ/wIy/AgAI0gIDGQAAgGzcAgR/AH4A/oeDAAAoAADE0AgAAgAAaoCGACCCvg0AiL8BAMjRBSEFAv9/ALAC"
"AP/RBQMCAAAA6NEAExgEnwACIn/AjL8AAAjSAAMZAACAbNwAAn8AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAB"
"BsAYAAAAwAACwDwAAAB/wIy/BZ8GkAabBo8FBgWBBYUMkAwwhb4FDAJ+A/8Dhv//AAACAwKSAgAAaAFHAn6ABYKBgAAEagAFBBr/"
"AgIK/v9/TwEPAn4MAAYqnwYGIgQAhdICAgIABACG0gEJAgABCQJoAQCG0gIDAgAEAIXSAQsAAAIJBGqBAgpoBQSWfQUECGwAAIC/"
"AQsCAAIJBACBAghoBQSWfQEAgL8BCQIAAQcCKgEHJGoEJIh9aiCCvhsBiL8AAQrAJAAAAAACCsAAAAAAgAAGwBAAAAABAIXSEhkA"
"AAADJmp/wIy/AACF0hILAACFJiAknwACIgAACNIAAyEAnyAiIhQACNIQAwEEAIBc3BQAfwQQgFzcFAB/DCCAXNwUAH8AMIBc3BQA"
"fwhzD4y/kAg2JP8IRiYAAP//kApIJP8KOCYAAP//GwXT0RsBjQSQDEok/ww6JgAA//8bBtPRG0lyBJAOTCT/DjwmAAD//xsG09Eb"
"S3YEcg+Mv5AYTiT/GD4mAAD//xsG09EbTXoEkBpQJP8aQCYAAP//GwbT0RtPfgSQHFIk/xxCJgAA//8bBtPRG1GCBJAeVCT/HkQm"
"AAD//xsG09EbU4YEcQ+Mv5AAViT/ACImAAD//xsG09EbVYoEkAJYJP8CKCYAAP//GwbT0RtXRgSQBFok/wQqJgAA//8bBtPRG1lS"
"BJAGXCT/BiwmAAD//xsG09EbW1YEcA+Mv5AQXiT/EC4mAAD//xsG09EbXVoEkBJgJP8SMCYAAP//GwbT0RtfXgSQFGIk/xQyJgAA"
"//8bBtPRG2FiBJAWZCT/FjQmAAD//xsG09EbY2YEJAbT0RtlagSASJp8gAI2fmoggL4aAIi//0g2aAAAIAD/NjYmAACA//8Ahb4A"
"AIAABTaIfIP/BbAAAIC/JAAA0YBAqQEbAIjSG0kCABtDNn7/Akh+AAAAQoBISAAbSTYEGz82fhsRNn7/Akh+gQAAABsA19EbC5AE"
"/zY2TH0AAAB+AP6HlwJIfvkICCgjBgYE+QoKKBwGBgT5NlAkJAYGAAQATdIEUQIABQBN0gVRAgD/AACw+QwMKB0GBgT5Dg4oHgYG"
"BIgKClQGAE3SBlECAAcATdIHUQIABAUz0gQLApiIDgpU+RgYKB8GBgT5GhooIAYGBPkcHCghBgYE+R4eKCIGBgQFBTPSBgsCmCQA"
"hdISDQAADABN0gxRAgANAE3SDVECAA4ATdIOUQIADwBN0g9RAgCQCgokiB4MVJ9ISiKEJkwk+QoIKAQGBAaIGgpUBgUz0g4NApgk"
"AAjSCgCRBJ9MTiIFBTPSDAsCmJAMDCQkAAjSJAGZBPkMCigFBgQG+QAAKBEGBgT5AgIoFAYGBACAdNwkBH8AAABN0gBRAgABAE3S"
"AVECAPkEBCgVBgYE+QYGKBYGBgSIAgJUAgBN0gJRAgADAE3SA1ECAAAFM9IAAwKYiAYCVPkQCCgXBgYE+RIKKBgGBgT5FAwoGQYG"
"BPkWDigaBgYEAQUz0gIDApgEAE3SBFECAAUATdIFUQIABgBN0gZRAgAHAE3SB1ECAJACAiSIDgRU+QIAKAAGBAaICgJUAgUz0gYF"
"ApgBBTPSBAMCmJAEBCT5BAIoAQYEBgiAdNwkAH8AhiYAJP8ABibAAAAAgiQAJLwAACaEJAog/yQCJuD///8AAAHSBQMBBP8gBCYA"
"////AADo0QEJAASBJgggAAD/0QAFDgQAAAHSBAUBBJ8AAiIAAAjSAgABBACAYNwAG38AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
"AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
"AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
"AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8GAAAAAAAAAHAMAAAAAAAACwAAAAAAAAAYAAAAAAAAAAUA"
"AAAAAAAAaA0AAAAAAAAKAAAAAAAAAIkAAAAAAAAA9f7/bwAAAAAADQAAAAAAAAQAAAAAAAAAMA0AAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xsdm0t"
"cHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBB"
"TUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1"
"Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2"
"ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAqAAAA"
"AADx/z8AAAAAAAAAAAAAAAAAAABLAAAAAADx/wAAAAAAAAAAAAAAAAAAAABsAAAAAADx/x4AAAAAAAAAAAAAAAAAAACSAAAAAADx"
"/wEAAAAAAAAAAAAAAAAAAACzAAAAAADx/wAAAAAAAAAAAAAAAAAAAADdAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAJAQAAAADx/wAA"
"AAAAAAAAAAAAAAAAAAAvAQAAAADx/wAAAAAAAAAAAAAAAAAAAABbAQAAAADx/zMAAAAAAAAAAAAAAAAAAAB/AQAAAADx/wAAAAAA"
"AAAAAAAAAAAAAACjAQAAAADx/w0AAAAAAAAAAAAAAAAAAADMAQAAAADx/wEAAAAAAAAAAAAAAAAAAADwAQAAAADx/wAAAAAAAAAA"
"AAAAAAAAAAAdAgAAAADx/wAAAAAAAAAAAAAAAAAAAABMAgAAAADx/wAAAAAAAAAAAAAAAAAAAAD9AgAAAAIIAEBDAAAAAAAAAAAA"
"AAAAAAB1AgAAEgMHAAAfAAAAAAAATAoAAAAAAACNAgAAEQMGAAAOAAAAAAAAQAAAAAAAAACoAgAAEgMHAAAqAAAAAAAANAUAAAAA"
"AADDAgAAEQMGAEAOAAAAAAAAQAAAAAAAAADhAgAAEQAKALBTAAAAAAAAAQAAAAAAAAAALm5vdGUALmR5bnN5bQAuZ251Lmhhc2gA"
"Lmhhc2gALmR5bnN0cgAucm9kYXRhAC50ZXh0AC5keW5hbWljAC5yZWxyb19wYWRkaW5nAC5ic3MALkFNREdQVS5ncHJfbWF4aW11"
"bXMALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwucHJpdmF0ZV9zZWdf"
"c2l6ZQBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fdmdwcgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fYWdwcgBmdXNl"
"ZF9teGZwNF9nZW1tX2tlcm5lbC5udW1iZXJlZF9zZ3ByAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLnVzZXNfdmNjAGZ1c2VkX214"
"ZnA0X2dlbW1fa2VybmVsLnVzZXNfZmxhdF9zY3JhdGNoAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmhhc19keW5fc2l6ZWRfc3Rh"
"Y2sAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwuaGFzX3JlY3Vyc2lvbgBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5wcml2YXRl"
"X3NlZ19zaXplAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bV92Z3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51"
"bV9hZ3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bWJlcmVkX3NncHIAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwu"
"dXNlc192Y2MAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwudXNlc19mbGF0X3NjcmF0Y2gAZnVzZWRfcXVhbnRfc2h1ZmZsZV9r"
"ZXJuZWwuaGFzX2R5bl9zaXplZF9zdGFjawBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5oYXNfcmVjdXJzaW9uAGZ1c2VkX214"
"ZnA0X2dlbW1fa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmtkAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGZ1c2Vk"
"X3F1YW50X3NodWZmbGVfa2VybmVsLmtkAF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfRFlOQU1JQwAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAACAAAAAAAAADgCAAAAAAAA"
"OAIAAAAAAAA4CgAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAcAAAALAAAAAgAAAAAAAABwDAAAAAAAAHAMAAAAAAAAkAAA"
"AAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAPAAAA9v//bwIAAAAAAAAAAA0AAAAAAAAADQAAAAAAADAAAAAAAAAAAgAAAAAA"
"AAAIAAAAAAAAAAAAAAAAAAAAGQAAAAUAAAACAAAAAAAAADANAAAAAAAAMA0AAAAAAAA4AAAAAAAAAAIAAAAAAAAABAAAAAAAAAAE"
"AAAAAAAAAB8AAAADAAAAAgAAAAAAAABoDQAAAAAAAGgNAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAnAAAA"
"AQAAAAIAAAAAAAAAAA4AAAAAAAAADgAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAALwAAAAEAAAAGAAAAAAAA"
"AAAfAAAAAAAAAA8AAAAAAABAFAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAADUAAAAGAAAAAwAAAAAAAABAQwAAAAAAAEAj"
"AAAAAAAAcAAAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAA+AAAACAAAAAMAAAAAAAAAsEMAAAAAAACwIwAAAAAAAFAMAAAA"
"AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAATQAAAAgAAAADAAAAAAAAALBTAAAAAAAAsCMAAAAAAAABAAAAAAAAAAAAAAAAAAAA"
"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"
"AABoBwAAAOlw/////yXKIgAAaAgAAADpYP////8lwiIAAGgJAAAA6VD/////JboiAABoCgAAAOlA////AAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAABwIAAAAAAAABAAAAAAAAAMIBAAAAAAAAAQAAAAAAAAAbAgAAAAAAAAEA"
"AAAAAAAAKgIAAAAAAAABAAAAAAAAANsBAAAAAAAAAQAAAAAAAADxAQAAAAAAAAcAAAAAAAAAGAcAAAAAAAAIAAAAAAAAADgBAAAA"
"AAAACQAAAAAAAAAYAAAAAAAAAPn//28AAAAABQAAAAAAAAAXAAAAAAAAAFAIAAAAAAAAAgAAAAAAAAAIAQAAAAAAAAMAAAAAAAAA"
"aIoAAAAAAAAUAAAAAAAAAAcAAAAAAAAABgAAAAAAAAA4AgAAAAAAAAsAAAAAAAAAGAAAAAAAAAAFAAAAAAAAAOAEAAAAAAAACgAA"
"AAAAAAA0AgAAAAAAAPX+/28AAAAAoAQAAAAAAAAZAAAAAAAAACB4AAAAAAAAGwAAAAAAAAAQAAAAAAAAABoAAAAAAAAAMHgAAAAA"
"AAAcAAAAAAAAAAgAAAAAAAAADAAAAAAAAAA0ZwAAAAAAAA0AAAAAAAAAUGcAAAAAAADw//9vAAAAABgEAAAAAAAA/v//bwAAAABA"
"BAAAAAAAAP///28AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAABIeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2ZwAAAAAA"
"AIZnAAAAAAAAlmcAAAAAAACmZwAAAAAAALZnAAAAAAAAxmcAAAAAAADWZwAAAAAAAOZnAAAAAAAA9mcAAAAAAAAGaAAAAAAAABZo"
"AAAAAAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xs"
"dm0tcHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2Vy"
"OiBBTUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9k"
"ZWJ1Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0Yzhj"
"MTQ2ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABADx/wAAAAAAAAAAAAAAAAAAAAAM"
"AAAAAgAMALBgAAAAAAAAOAAAAAAAAAAWAAAAAQAZANiKAAAAAAAAAQAAAAAAAAAuAAAAAQALAABPAAAAAAAAAAAAAAAAAABAAAAA"
"AQAZAOCKAAAAAAAAQAAAAAAAAABTAAAAAgAMAPBgAAAAAAAASgAAAAAAAABdAAAAAQAZACCLAAAAAAAAAQAAAAAAAABzAAAAAQAQ"
"ACB4AAAAAAAACAAAAAAAAAB6AAAAAQARADB4AAAAAAAACAAAAAAAAABOAQAAAQIWAEiKAAAAAAAACAAAAAAAAACBAAAABADx/wAA"
"AAAAAAAAAAAAAAAAAACRAAAAAgAMAFBmAAAAAAAAlAAAAAAAAACjAAAAAQAZACiLAAAAAAAACAAAAAAAAADIAAAAAQAXAFCKAAAA"
"AAAAGAAAAAAAAADdAAAAAgAMAPBmAAAAAAAAIgAAAAAAAADvAAAABADx/wAAAAAAAAAAAAAAAAAAAADvAgAAAQILAABPAAAAAAAA"
"BAAAAAAAAAAHAQAAAgINADRnAAAAAAAAAAAAAAAAAAAjAQAAAgIOAFBnAAAAAAAAAAAAAAAAAAANAQAAAAIYAGiKAAAAAAAAAAAA"
"AAAAAAAFAwAAAAITAEh4AAAAAAAAAAAAAAAAAACmAgAAAgIMACBnAAAAAAAAEgAAAAAAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAA"
"AAApAQAAIgAAAAAAAAAAAAAAAAAAAAAAAAA/AQAAIgAAAAAAAAAAAAAAAAAAAAAAAABbAQAAIgAAAAAAAAAAAAAAAAAAAAAAAABz"
"AQAAEgAMAEBhAAAAAAAA9AAAAAAAAACaAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAC0AQAAEQASADh4AAAAAAAACAAAAAAAAADMAQAA"
"EgAAAAAAAAAAAAAAAAAAAAAAAADcAQAAEgAMAEBiAAAAAAAA4wAAAAAAAAAGAgAAEQASAEB4AAAAAAAACAAAAAAAAAAhAgAAEgAM"
"ADBjAAAAAAAAnwEAAAAAAAAzAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABOAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABeAgAAEgAMANBk"
"AAAAAAAAgAEAAAAAAAB5AgAAEgAAAAAAAAAAAAAAAAAAAAAAAACQAgAAEgAAAAAAAAAAAAAAAAAAAAAAAACtAgAAEgAAAAAAAAAA"
"AAAAAAAAAAAAAADGAgAAEQAZADCLAAAAAAAAAQAAAAAAAADiAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAALmR5bnN5bQAuZ251LnZl"
"cnNpb24ALmdudS52ZXJzaW9uX3IALmdudS5oYXNoAC5keW5zdHIALnJlbGEuZHluAC5yZWxhLnBsdAAucm9kYXRhAC5oaXBfZmF0"
"YmluAC5laF9mcmFtZV9oZHIALmVoX2ZyYW1lAC50ZXh0AC5pbml0AC5maW5pAC5wbHQALmluaXRfYXJyYXkALmZpbmlfYXJyYXkA"
"LmRhdGEucmVsLnJvAC5keW5hbWljAC5nb3QALnJlbHJvX3BhZGRpbmcALmRhdGEALmhpcEZhdEJpblNlZ21lbnQALmdvdC5wbHQA"
"LmJzcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABjcnRiZWdpbi5jAF9fZG9faW5pdABfX2RvX2luaXQuX19p"
"bml0aWFsaXplZABfX0VIX0ZSQU1FX0xJU1RfXwBfX2RvX2luaXQuX19vYmplY3QAX19kb19maW5pAF9fZG9fZmluaS5fX2ZpbmFs"
"aXplZABfX2luaXQAX19maW5pAG14ZnA0X2Z1c2VkLmhpcABfX2hpcF9tb2R1bGVfY3RvcgBfX2hpcF9ncHViaW5faGFuZGxlXzUw"
"MjNkZjQzZmFjOGRhNTcAX19oaXBfZmF0YmluX3dyYXBwZXIAX19oaXBfbW9kdWxlX2R0b3IAY3J0ZW5kLmMAX19nbW9uX3N0YXJ0"
"X18AX2luaXQAX0dMT0JBTF9PRkZTRVRfVEFCTEVfAF9maW5pAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBf"
"X2Rzb19oYW5kbGUAX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8AX19kZXZpY2Vfc3R1Yl9fZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwA"
"X19oaXBQb3BDYWxsQ29uZmlndXJhdGlvbgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbABoaXBMYXVuY2hLZXJuZWwAX19kZXZpY2Vf"
"c3R1Yl9fZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAbGF1bmNoX2Z1c2VkX2dl"
"bW0AX19oaXBQdXNoQ2FsbENvbmZpZ3VyYXRpb24AaGlwR2V0TGFzdEVycm9yAGxhdW5jaF9mdXNlZF9xdWFudF9zaHVmZmxlAF9f"
"aGlwUmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkA"
"X19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAAAIAAAAA"
"AAAAOAIAAAAAAAA4AgAAAAAAAOABAAAAAAAABQAAAAEAAAAIAAAAAAAAABgAAAAAAAAACQAAAP///28CAAAAAAAAABgEAAAAAAAA"
"GAQAAAAAAAAoAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAAAAABYAAAD+//9vAgAAAAAAAABABAAAAAAAAEAEAAAAAAAAYAAA"
"AAAAAAAFAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAlAAAA9v//bwIAAAAAAAAAoAQAAAAAAACgBAAAAAAAAEAAAAAAAAAAAQAAAAAA"
"AAAIAAAAAAAAAAAAAAAAAAAALwAAAAMAAAACAAAAAAAAAOAEAAAAAAAA4AQAAAAAAAA0AgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"
"AAAAAAAAADcAAAAEAAAAAgAAAAAAAAAYBwAAAAAAABgHAAAAAAAAOAEAAAAAAAABAAAAAAAAAAgAAAAAAAAAGAAAAAAAAABBAAAA"
"BAAAAEIAAAAAAAAAUAgAAAAAAABQCAAAAAAAAAgBAAAAAAAAAQAAABgAAAAIAAAAAAAAABgAAAAAAAAASwAAAAEAAAAyAAAAAAAA"
"AFgJAAAAAAAAWAkAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAFMAAAABAAAAAgAAAAAAAAAAEAAAAAAAAAAQ"
"AAAAAAAAqD4AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABfAAAAAQAAAAIAAAAAAAAAqE4AAAAAAACoTgAAAAAAAFQAAAAA"
"AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAbQAAAAEAAAACAAAAAAAAAABPAAAAAAAAAE8AAAAAAACkAQAAAAAAAAAAAAAAAAAA"
"CAAAAAAAAAAAAAAAAAAAAHcAAAABAAAABgAAAAAAAACwYAAAAAAAALBQAAAAAAAAhAYAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA"
"AAAAAAB9AAAAAQAAAAYAAAAAAAAANGcAAAAAAAA0VwAAAAAAABsAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAgwAAAAEA"
"AAAGAAAAAAAAAFBnAAAAAAAAUFcAAAAAAAANAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIkAAAABAAAABgAAAAAAAABg"
"ZwAAAAAAAGBXAAAAAAAAwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACOAAAADgAAAAMAAAAAAAAAIHgAAAAAAAAgWAAA"
"AAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAmgAAAA8AAAADAAAAAAAAADB4AAAAAAAAMFgAAAAAAAAIAAAAAAAA"
"AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAKYAAAABAAAAAwAAAAAAAAA4eAAAAAAAADhYAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAgA"
"AAAAAAAAAAAAAAAAAACzAAAABgAAAAMAAAAAAAAASHgAAAAAAABIWAAAAAAAANABAAAAAAAABQAAAAAAAAAIAAAAAAAAABAAAAAA"
"AAAAvAAAAAEAAAADAAAAAAAAABh6AAAAAAAAGFoAAAAAAAAwAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAMEAAAAIAAAA"
"AwAAAAAAAABIegAAAAAAAEhaAAAAAAAAuAUAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADQAAAAAQAAAAMAAAAAAAAASIoA"
"AAAAAABIWgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAA1gAAAAEAAAADAAAAAAAAAFCKAAAAAAAAUFoAAAAA"
"AAAYAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAOgAAAABAAAAAwAAAAAAAABoigAAAAAAAGhaAAAAAAAAcAAAAAAAAAAA"
"AAAAAAAAAAgAAAAAAAAAAAAAAAAAAADxAAAACAAAAAMAAAAAAAAA2IoAAAAAAADYWgAAAAAAAFkAAAAAAAAAAAAAAAAAAAAIAAAA"
"AAAAAAAAAAAAAAAA9gAAAAEAAAAwAAAAAAAAAAAAAAAAAAAA2FoAAAAAAAA5AQAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAA"
"AP8AAAACAAAAAAAAAAAAAAAAAAAAAAAAABhcAAAAAAAA8AMAAAAAAAAdAAAAFwAAAAgAAAAAAAAAGAAAAAAAAAAHAQAAAwAAAAAA"
"AAAAAAAAAAAAAAAAAAAIYAAAAAAAABkBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQEAAAMAAAAAAAAAAAAAAAAAAAAA"
"AAAAIWEAAAAAAAAOAwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=="
)
# ---- Load library ----
def _load():
try:
so = base64.b64decode(_SO_B64)
td = tempfile.mkdtemp()
p = os.path.join(td, "k.so")
with open(p, 'wb') as f: f.write(so)
lib = ctypes.cdll.LoadLibrary(p)
# Fused GEMM
lib.launch_fused_gemm.restype = ctypes.c_int
lib.launch_fused_gemm.argtypes = [
ctypes.c_void_p]*4 + [ctypes.c_int]*6 + [ctypes.c_void_p]
# Fused quant+shuffle
lib.launch_fused_quant_shuffle.restype = ctypes.c_int
lib.launch_fused_quant_shuffle.argtypes = [
ctypes.c_void_p]*3 + [ctypes.c_int]*6 + [ctypes.c_void_p]
return lib
except: return None
_lib = _load()
# ---- Caches ----
_out_cache = {}
_qs_cache = {}
def _fused_gemm(A, B_q, B_sc, m, n, k):
"""Single launch: quant A + GEMM → C. Best for small K."""
B_q_u8 = B_q.view(torch.uint8)
B_sc_u8 = B_sc.contiguous().view(torch.uint8)
ks_pad = ((k//32+7)//8)*8
key = (m,n)
if key not in _out_cache:
_out_cache[key] = torch.empty((m,n), dtype=torch.bfloat16, device='cuda')
C = _out_cache[key]
_lib.launch_fused_gemm(
ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(B_q_u8.data_ptr()),
ctypes.c_void_p(B_sc_u8.data_ptr()), ctypes.c_void_p(C.data_ptr()),
ctypes.c_int(m), ctypes.c_int(n), ctypes.c_int(k),
ctypes.c_int(A.stride(0)), ctypes.c_int(B_q_u8.stride(0)),
ctypes.c_int(ks_pad), ctypes.c_void_p(0))
return C
def _hip_quant_shuffle(A, m, k):
"""HIP quant+shuffle → (A_q, A_scale_sh). For large K path."""
ks = k//32
m_pad = ((m+255)//256)*256
ks_pad = ((ks+7)//8)*8
key = (m_pad, k, ks_pad)
if key not in _qs_cache:
_qs_cache[key] = {
'Aq': torch.zeros(m_pad, k//2, dtype=torch.uint8, device='cuda'),
'As': torch.zeros(m_pad*ks_pad, dtype=torch.uint8, device='cuda'),
}
c = _qs_cache[key]
_lib.launch_fused_quant_shuffle(
ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(c['Aq'].data_ptr()),
ctypes.c_void_p(c['As'].data_ptr()),
ctypes.c_int(m), ctypes.c_int(k), ctypes.c_int(m_pad), ctypes.c_int(ks_pad),
ctypes.c_int(A.stride(0)), ctypes.c_int(c['Aq'].stride(0)),
ctypes.c_void_p(0))
return c['Aq'][:m].view(dtypes.fp4x2), c['As'].view(m_pad, ks_pad).view(dtypes.fp8_e8m0)
# ---- Fallback ----
_a_cache = None
def _fallback_quant(A):
global _a_cache
if _a_cache is not None and _a_cache[0] is A:
return _a_cache[1], _a_cache[2]
Aq, As = dynamic_mxfp4_quant(A)
Ash = e8m0_shuffle(As)
r = (Aq.view(dtypes.fp4x2), Ash.view(dtypes.fp8_e8m0))
_a_cache = (A, r[0], r[1])
return r
# ---- Entry ----
def custom_kernel(data: input_t) -> output_t:
A, B, B_q, B_shuffle, B_scale_sh = data
m, k = A.shape
n = B_q.shape[0]
if _lib is not None and k <= 1024:
# Small K: fused single-launch kernel
return _fused_gemm(A, B_q, B_scale_sh, m, n, k)
if _lib is not None:
# Large K: HIP quant+shuffle + ASM GEMM (2 launches)
Aq, Ash = _hip_quant_shuffle(A, m, k)
else:
# Fallback: Python quant+shuffle
Aq, Ash = _fallback_quant(A)
return aiter.gemm_a4w4(Aq, B_shuffle, Ash, B_scale_sh, dtype=dtypes.bf16, bpreshuffle=True)
scrolls · 480 lines total
Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0
Changes from previous submission
Against this author's previous submission submission 646726.
#!POPCORN leaderboard amd-mxfp4-mm#!POPCORN gpu MI355X"""- FP4 quant + GEMM with fused HIP kernel for quantization + e8m0_shuffle.-- Pipeline (ranked mode):- 1. HIP fused_quant_shuffle: quantize A to MXFP4 + shuffle scales (~3-5 us)- 2. gemm_a4w4: ASM GEMM (~7-21 us)- Total: ~10-26 us (down from ~20-35 us with 3-operation reference path)-- The HIP kernel uses hardware v_cvt_scalef32_pk_fp4_bf16 for FP4 quantization.- Zero-padding ensures padded rows don't affect GEMM output (0 * anything = 0).- Falls back to Python path if HIP kernel fails.+ MXFP4-MM Hybrid: dispatch by K size.+ K <= 1024: fused quant+GEMM HIP kernel (1 launch, ~9 us)+ K > 1024: HIP quant+shuffle (1 launch) + ASM gemm_a4w4 (1 launch, ~14-26 us)"""- import os, sys, ctypes, base64, tempfile+ import os, ctypes, base64, tempfileimport torchimport aiterfrom aiter import dtypes⋯ 1 unchanged linesfrom aiter.utility.fp4_utils import e8m0_shufflefrom task import input_t, output_t- # ---- Embedded HIP .so ----+ # ---- Embedded .so (both kernels) ----_SO_B64 = (- "f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAAAAAAAAAAABAAAAAAAAAANhNAAAAAAAAAAAAAEAAOAAJAEAAHgAcAAYAAAAEAAAAQAAA"+ "f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAAAAAAAAAAABAAAAAAAAAADBkAAAAAAAAAAAAAEAAOAAJAEAAHgAcAAYAAAAEAAAAQAAA""AAAAAABAAAAAAAAAAEAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AADEPQAAAAAAAMQ9AAAAAAAAABAAAAAAAAABAAAABQAAANA9AAAAAAAA0E0AAAAAAADQTQAAAAAAAKAEAAAAAAAAoAQAAAAAAAAA"- "EAAAAAAAAAEAAAAGAAAAcEIAAAAAAABwYgAAAAAAAHBiAAAAAAAAGAIAAAAAAACQDQAAAAAAAAAQAAAAAAAAAQAAAAYAAACIRAAA"- "AAAAAIh0AAAAAAAAiHQAAAAAAACQAAAAAAAAAOkAAAAAAAAAABAAAAAAAAACAAAABgAAAJBCAAAAAAAAkGIAAAAAAACQYgAAAAAA"- "ANABAAAAAAAA0AEAAAAAAAAIAAAAAAAAAFLldGQEAAAAcEIAAAAAAABwYgAAAAAAAHBiAAAAAAAAGAIAAAAAAACQDQAAAAAAAAEA"- "AAAAAAAAUOV0ZAQAAABYPAAAAAAAAFg8AAAAAAAAWDwAAAAAAABEAAAAAAAAAEQAAAAAAAAABAAAAAAAAABR5XRkBgAAAAAAAAAA"+ "AACkUAAAAAAAAKRQAAAAAAAAABAAAAAAAAABAAAABQAAALBQAAAAAAAAsGAAAAAAAACwYAAAAAAAAHAHAAAAAAAAcAcAAAAAAAAA"+ "EAAAAAAAAAEAAAAGAAAAIFgAAAAAAAAgeAAAAAAAACB4AAAAAAAAKAIAAAAAAADgBwAAAAAAAAAQAAAAAAAAAQAAAAYAAABIWgAA"+ "AAAAAEiKAAAAAAAASIoAAAAAAACQAAAAAAAAAOkAAAAAAAAAABAAAAAAAAACAAAABgAAAEhYAAAAAAAASHgAAAAAAABIeAAAAAAA"+ "ANABAAAAAAAA0AEAAAAAAAAIAAAAAAAAAFLldGQEAAAAIFgAAAAAAAAgeAAAAAAAACB4AAAAAAAAKAIAAAAAAADgBwAAAAAAAAEA"+ "AAAAAAAAUOV0ZAQAAACoTgAAAAAAAKhOAAAAAAAAqE4AAAAAAABUAAAAAAAAAFQAAAAAAAAABAAAAAAAAABR5XRkBgAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAgAAAA""AAAAAAAAAAAAAAAAAAAAABAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAiAAAAAAAAAAAAAAAAAAAAAAAAADUAAAAiAAAAAAAA"- "AAAAAAAAAAAAAAAAAHcAAAASAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAASAAAAAAAAAAAAAAAAAAAAAAAAANcAAAASAAAAAAAAAAAA"- "AAAAAAAAAAAAAPIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAIBAAASAAAAAAAAAAAAAAAAAAAAAAAAABkBAAASAAAAAAAAAAAAAAAA"- "AAAAAAAAAC8BAAASAAAAAAAAAAAAAAAAAAAAAAAAAGQBAAASAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAASAAwAYE4AAAAAAADjAAAA"- "AAAAAJEAAAARABIAiGIAAAAAAAAIAAAAAAAAALwAAAASAAwAUE8AAAAAAACAAQAAAAAAAEgBAAARABkAcHUAAAAAAAABAAAAAAAA"- "AAAAAQACAAMAAgAEAAQABAAEAAQABAAEAAMAAQABAAEAAQAAAAEAAQBxAQAAMAAAABAAAAABAAEAigEAADAAAAAQAAAAAQABAKAB"- "AAAwAAAAAAAAAHInBg8AAAQAggEAAAAAAABQJnkLAAACAJgBAAAAAAAAdRppCQAAAwCqAQAAAAAAAAAAAAABAAAADQAAAAEAAAAa"- "AAAAAAYFAkgAIAANAAAAGMKPm5AZOdZKDTCOU9cMJQBfX2dtb25fc3RhcnRfXwBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8AX19jeGFf"- "ZmluYWxpemUAX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8AX19kZXZpY2Vfc3R1Yl9fZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwA"- "X19oaXBQb3BDYWxsQ29uZmlndXJhdGlvbgBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABoaXBMYXVuY2hLZXJuZWwAbGF1bmNo"- "X2Z1c2VkX3F1YW50X3NodWZmbGUAX19oaXBQdXNoQ2FsbENvbmZpZ3VyYXRpb24AaGlwR2V0TGFzdEVycm9yAF9faGlwUmVnaXN0"- "ZXJGYXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAF9faGlwVW5yZWdpc3RlckZhdEJpbmFyeQBfX2hpcF9jdWlkX2I4NjY5"- "MTNhN2NmMGExYmMAX19jeGFfYXRleGl0AGxpYmFtZGhpcDY0LnNvLjcAaGlwXzQuMgBsaWJnY2Nfcy5zby4xAEdDQ18zLjAAbGli"- "Yy5zby42AEdMSUJDXzIuMi41AC9vcHQvcm9jbS03LjEuMC9saWIAbGlic3RkYysrLnNvLjYAbGlibS5zby42AABwYgAAAAAAAAgA"- "AAAAAAAA0E0AAAAAAAB4YgAAAAAAAAgAAAAAAAAA0FAAAAAAAACAYgAAAAAAAAgAAAAAAAAAEE4AAAAAAACIdAAAAAAAAAgAAAAA"- "AAAAiHQAAAAAAACYdAAAAAAAAAgAAAAAAAAAABAAAAAAAABgZAAAAAAAAAYAAAABAAAAAAAAAAAAAABoZAAAAAAAAAYAAAACAAAA"- "AAAAAAAAAABwZAAAAAAAAAYAAAADAAAAAAAAAAAAAAB4ZAAAAAAAAAYAAAAEAAAAAAAAAAAAAACIYgAAAAAAAAEAAAANAAAAAAAA"- "AAAAAACAZAAAAAAAAAYAAAAOAAAAAAAAAAAAAADAdAAAAAAAAAcAAAACAAAAAAAAAAAAAADIdAAAAAAAAAcAAAADAAAAAAAAAAAA"- "AADQdAAAAAAAAAcAAAAEAAAAAAAAAAAAAADYdAAAAAAAAAcAAAAFAAAAAAAAAAAAAADgdAAAAAAAAAcAAAAGAAAAAAAAAAAAAADo"- "dAAAAAAAAAcAAAAHAAAAAAAAAAAAAADwdAAAAAAAAAcAAAAIAAAAAAAAAAAAAAD4dAAAAAAAAAcAAAAJAAAAAAAAAAAAAAAAdQAA"- "AAAAAAcAAAAKAAAAAAAAAAAAAAAIdQAAAAAAAAcAAAALAAAAAAAAAAAAAAAQdQAAAAAAAAcAAAAMAAAAAAAAAAAAAABmdXNlZF9x"- "dWFudF9zaHVmZmxlX2tlcm5lbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAHQAAAASAAAAAAAAAAAAAAAAAAAAAAAAAKYAAAASAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAASAAAAAAAAAAAA"+ "AAAAAAAAAAAAACgBAAASAAAAAAAAAAAAAAAAAAAAAAAAAFMBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGoBAAASAAAAAAAAAAAAAAAA"+ "AAAAAAAAAIABAAASAAAAAAAAAAAAAAAAAAAAAAAAALUBAAASAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAASAAwAQGEAAAAAAAD0AAAA"+ "AAAAAI4AAAARABIAOHgAAAAAAAAIAAAAAAAAALYAAAASAAwAQGIAAAAAAADjAAAAAAAAAOAAAAARABIAQHgAAAAAAAAIAAAAAAAA"+ "APsAAAASAAwAMGMAAAAAAACfAQAAAAAAADgBAAASAAwA0GQAAAAAAACAAQAAAAAAAJkBAAARABkAMIsAAAAAAAABAAAAAAAAAAAA"+ "AQACAAMAAgAEAAQABAAEAAQABAAEAAMAAQABAAEAAQABAAEAAQABAAEAwgEAADAAAAAQAAAAAQABANsBAAAwAAAAEAAAAAEAAQDx"+ "AQAAMAAAAAAAAAByJwYPAAAEANMBAAAAAAAAUCZ5CwAAAgDpAQAAAAAAAHUaaQkAAAMA+wEAAAAAAAABAAAADQAAAAIAAAAaAAAA"+ "AAABB0AgIAAABASICIAAAA0AAAAY6tJq7pxrShjCj5uQGTnW2h0lfEoNMI61h9G0AF9fZ21vbl9zdGFydF9fAF9fcmVnaXN0ZXJf"+ "ZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2RldmljZV9zdHViX19mdXNlZF9teGZw"+ "NF9nZW1tX2tlcm5lbABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAGhpcExhdW5jaEtl"+ "cm5lbABfX2RldmljZV9zdHViX19mdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABs"+ "YXVuY2hfZnVzZWRfZ2VtbQBfX2hpcFB1c2hDYWxsQ29uZmlndXJhdGlvbgBoaXBHZXRMYXN0RXJyb3IAbGF1bmNoX2Z1c2VkX3F1"+ "YW50X3NodWZmbGUAX19oaXBSZWdpc3RlckZhdEJpbmFyeQBfX2hpcFJlZ2lzdGVyRnVuY3Rpb24AX19oaXBVbnJlZ2lzdGVyRmF0"+ "QmluYXJ5AF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfX2N4YV9hdGV4aXQAbGliYW1kaGlwNjQuc28uNwBoaXBfNC4yAGxp"+ "YmdjY19zLnNvLjEAR0NDXzMuMABsaWJjLnNvLjYAR0xJQkNfMi4yLjUAL29wdC9yb2NtLTcuMS4wL2xpYgBsaWJzdGRjKysuc28u"+ "NgBsaWJtLnNvLjYAAAAAACB4AAAAAAAACAAAAAAAAACwYAAAAAAAACh4AAAAAAAACAAAAAAAAABQZgAAAAAAADB4AAAAAAAACAAA"+ "AAAAAADwYAAAAAAAAEiKAAAAAAAACAAAAAAAAABIigAAAAAAAFiKAAAAAAAACAAAAAAAAAAAEAAAAAAAABh6AAAAAAAABgAAAAEA"+ "AAAAAAAAAAAAACB6AAAAAAAABgAAAAIAAAAAAAAAAAAAACh6AAAAAAAABgAAAAMAAAAAAAAAAAAAADB6AAAAAAAABgAAAAQAAAAA"+ "AAAAAAAAADh4AAAAAAAAAQAAAA0AAAAAAAAAAAAAADh6AAAAAAAABgAAAA4AAAAAAAAAAAAAAEB4AAAAAAAAAQAAAA8AAAAAAAAA"+ "AAAAAEB6AAAAAAAABgAAABAAAAAAAAAAAAAAAICKAAAAAAAABwAAAAIAAAAAAAAAAAAAAIiKAAAAAAAABwAAAAMAAAAAAAAAAAAA"+ "AJCKAAAAAAAABwAAAAQAAAAAAAAAAAAAAJiKAAAAAAAABwAAAAUAAAAAAAAAAAAAAKCKAAAAAAAABwAAAAYAAAAAAAAAAAAAAKiK"+ "AAAAAAAABwAAAAcAAAAAAAAAAAAAALCKAAAAAAAABwAAAAgAAAAAAAAAAAAAALiKAAAAAAAABwAAAAkAAAAAAAAAAAAAAMCKAAAA"+ "AAAABwAAAAoAAAAAAAAAAAAAAMiKAAAAAAAABwAAAAsAAAAAAAAAAAAAANCKAAAAAAAABwAAAAwAAAAAAAAAAAAAAGZ1c2VkX3F1"+ "YW50X3NodWZmbGVfa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"⋯ 15 unchanged lines"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fQ0xBTkdfT0ZGTE9BRF9CVU5ETEVfXwIAAAAA"- "AAAAABAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAaG9zdC14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtABAAAAAAAABYHAAAAAAAAB8A"+ "AAAAABAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAaG9zdC14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtABAAAAAAAACoLgAAAAAAAB8A""AAAAAAAAaGlwdjQtYW1kZ2NuLWFtZC1hbWRoc2EtLWdmeDk1MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"⋯ 47 unchanged lines"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAB/RUxGAgEBQAQAAAAAAAAAAwDgAAEAAAAAAAAAAAAAAEAAAAAAAAAAWBgAAAAAAABPBQAAQAA4AAkA"+ "AAAAAAAAAAAAAAAAAAAAAAB/RUxGAgEBQAQAAAAAAAAAAwDgAAEAAAAAAAAAAAAAAEAAAAAAAAAAqCoAAAAAAABPBQAAQAA4AAkA""QAAQAA4ABgAAAAQAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAD4AQAAAAAAAPgBAAAAAAAACAAAAAAAAAABAAAABAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAoAAAAAAAAAEAAAAAAAAAEAAAAFAAAAAAoAAAAAAAAAGgAAAAAAAAAaAAAAAAAA"- "QAkAAAAAAABACQAAAAAAAAAQAAAAAAAAAQAAAAYAAABAEwAAAAAAAEAzAAAAAAAAQDMAAAAAAABwAAAAAAAAAMAMAAAAAAAAABAA"- "AAAAAAABAAAABgAAALATAAAAAAAAsEMAAAAAAACwQwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAIAAAAGAAAAQBMAAAAA"- "AABAMwAAAAAAAEAzAAAAAAAAcAAAAAAAAABwAAAAAAAAAAgAAAAAAAAAUuV0ZAQAAABAEwAAAAAAAEAzAAAAAAAAQDMAAAAAAABw"+ "AAAAAAAAAAAAAAAAAAAAAAAAAIAOAAAAAAAAgA4AAAAAAAAAEAAAAAAAAAEAAAAFAAAAAA8AAAAAAAAAHwAAAAAAAAAfAAAAAAAA"+ "QBQAAAAAAABAFAAAAAAAAAAQAAAAAAAAAQAAAAYAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABwAAAAAAAAAMAMAAAAAAAAABAA"+ "AAAAAAABAAAABgAAALAjAAAAAAAAsFMAAAAAAACwUwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAIAAAAGAAAAQCMAAAAA"+ "AABAQwAAAAAAAEBDAAAAAAAAcAAAAAAAAABwAAAAAAAAAAgAAAAAAAAAUuV0ZAQAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABw""AAAAAAAAAMAMAAAAAAAAAQAAAAAAAABR5XRkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAQAAAAEAAAAOAIAAAAAAAA4AgAAAAAAADgCAAAAAAAAZAYAAAAAAABkBgAAAAAAAAQAAAAAAAAABwAAAE8GAAAgAAAAQU1E"- "R1BVAACDrmFtZGhzYS5rZXJuZWxzkd4AEqsuYWdwcl9jb3VudAClLmFyZ3PcABaFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25sea4u"- "YWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldAClLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKFri5hY3R1YWxfYWNj"- "ZXNzqndyaXRlX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVm"- "ZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0EKUuc2l6ZQirLnZhbHVl"- "X2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldBilLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0HKUuc2l6ZQSr"- "LnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQgpS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNpemUE"- "qy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5zaXpl"- "BKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldDClLnNpemUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF94g6cu"- "b2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Jsb2NrX2NvdW50X3mDpy5vZmZzZXQ4pS5zaXplBKsudmFsdWVfa2lu"- "ZLRoaWRkZW5fYmxvY2tfY291bnRfeoOnLm9mZnNldDylLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91cF9zaXplX3iDpy5v"- "ZmZzZXQ+pS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV95g6cub2Zmc2V0QKUuc2l6ZQKrLnZhbHVlX2tpbmSz"- "aGlkZGVuX2dyb3VwX3NpemVfeoOnLm9mZnNldEKlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeIOnLm9mZnNl"- "dESlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeYOnLm9mZnNldEalLnNpemUCqy52YWx1ZV9raW5ksmhpZGRl"- "bl9yZW1haW5kZXJfeoOnLm9mZnNldFilLnNpemUIqy52YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3iDpy5vZmZzZXRg"- "pS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF95g6cub2Zmc2V0aKUuc2l6ZQirLnZhbHVlX2tpbmS2aGlk"- "ZGVuX2dsb2JhbF9vZmZzZXRfeoOnLm9mZnNldHClLnNpemUCqy52YWx1ZV9raW5ksGhpZGRlbl9ncmlkX2RpbXO5Lmdyb3VwX3Nl"- "Z21lbnRfZml4ZWRfc2l6ZQC2Lmtlcm5hcmdfc2VnbWVudF9hbGlnbgi1Lmtlcm5hcmdfc2VnbWVudF9zaXplzQEwqS5sYW5ndWFn"- "ZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQClLm5hbWW6ZnVzZWRfcXVh"- "bnRfc2h1ZmZsZV9rZXJuZWy7LnByaXZhdGVfc2VnbWVudF9maXhlZF9zaXplAKsuc2dwcl9jb3VudBOxLnNncHJfc3BpbGxfY291"- "bnQApy5zeW1ib2y9ZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2S4LnVuaWZvcm1fd29ya19ncm91cF9zaXplAbMudXNlc19k"- "eW5hbWljX3N0YWNrwqsudmdwcl9jb3VudDSxLnZncHJfc3BpbGxfY291bnQAry53YXZlZnJvbnRfc2l6ZUCtYW1kaHNhLnRhcmdl"- "dLlhbWRnY24tYW1kLWFtZGhzYS0tZ2Z4OTUwrmFtZGhzYS52ZXJzaW9ukgECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB"- "AAAAEgMHAAAaAAAAAAAAOAUAAAAAAAAcAAAAEQMGAMAJAAAAAAAAQAAAAAAAAAA6AAAAEQAKALBDAAAAAAAAAQAAAAAAAAABAAAA"- "AQAAAAEAAAAaAAAAAAIFAgAgIAABAAAAkBk51mxBnmVT1wwlBAAAAAQAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAA"- "AABmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5rZABfX2hpcF9jdWlkX2I4NjY5"- "MTNhN2NmMGExYmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAwAAACGAK8AhAAAAAgAAAAAAAAAAAEGwBgAAADAAALAPAAAAH/AjL8FnwaQBpsGjwUGBYEFhQyQDDCFvgUMAn4D/wOG"- "//8AAAIDApICAABoAUcCfoAFgoGAAARqAAUEGv8CAgr+/39PAQ8CfgwABiqfBgYiBACF0gICAgAEAIbSAQkCAAEJAmgBAIbSAgMC"- "AAQAhdIBCwAAAgkEaoECCmgFBJZ9BQQIbAAAgL8BCwIAAgkEAIECCGgFBJZ9AQCAvwEJAgABBwIqAQckagQkiH1qIIK+HAGIvwAB"- "CsAkAAAAAAIKwAAAAACAAAbAEAAAAAEAhdISGQAAAAMman/AjL8AAIXSEgsAAIUmICSfAAIiAAAI0gADIQCfICIiFAAI0hADAQQA"- "gFzcFAB/CBCAXNwUAH8MIIBc3BQAfwAwgFzcFAB/BIACIn5zD4y/kBA4JP8QSCYAAP//kBJKJP8SOiYAAP//HAXT0RwBkQSQFEwk"- "/xQ8JgAA//8cBtPRHEt2BJAWTiT/Fj4mAAD//xwG09EcTXoEcg+Mv5AYUCT/GEAmAAD//xwG09EcT34EkBpSJP8aQiYAAP//HAbT"- "0RxRggSQHFQk/xxEJgAA//8cBtPRHFOGBJAeViT/HkYmAAD//xwG09EcVYoEcQ+Mv5AAWCT/ACgmAAD//xwG09EcV44EkAJaJP8C"- "KiYAAP//HAbT0RxZUgSQBFwk/wQsJgAA//8cBtPRHFtWBJAGXiT/Bi4mAAD//xwG09EcXVoEcA+Mv5AIYCT/CDAmAAD//xwG09Ec"- "X14EkApiJP8KMiYAAP//HAbT0RxhYgSQDGQk/ww0JgAA//8cBtPRHGNmBJAOZiT/DjYmAAD//xwG09EcZWoEJQbT0RxnbgSASpp8"- "gAI4fmoggL4dAIi//0oiaAAAIAD/IiImAACA//8Ahb4AAIAABSKIfIP/BbAAAIC/HAAA0YBAqQERAIjSETkCABFDIn7/Ajh+AAAA"- "QoA4OAAROSIEET8ifhERIn7/Ajh+gQAAABEA19ERC3AE/yI4TH0AAACXAiJ++TgiJBEGBgB+AP6H+RAQKCQGBgT5EhIoHQYGBAgA"- "TdIIIwIACQBN0gkjAgD5FBQoHgYGBPkWFigfBgYEiBISVP8AALAKAE3SCiMCAAsATdILIwIACAUz0ggTApiIFhJU+RgYKCAGBgT5"- "GhooIQYGBPkcHCgiBgYE+R4eKCMGBgQJBTPSChMCmCYAhdISDQAADABN0gwjAgANAE3SDSMCAA4ATdIOIwIADwBN0g8jAgCQEhIk"- "iB4UVJ9MTiKEJlAk+RIQKAgGBAaIGhJUCgUz0g4VApgmAAjSCgCZBJ9QUiIJBTPSDBMCmJAUFCQmAAjSJgGhBPkUEigJBgQG+QAA"- "KBQGBgT5AgIoFQYGBACAdNwmCH8AAABN0gAjAgABAE3SASMCAPkEBCgWBgYE+QYGKBcGBgSIAgJUAgBN0gIjAgADAE3SAyMCAAAF"- "M9IAAwKYiAYCVPkICCgYBgYE+QoKKBkGBgT5DAwoGgYGBPkODigbBgYEAQUz0gIDApgEAE3SBCMCAAUATdIFIwIABgBN0gYjAgAH"- "AE3SByMCAJACAiSIDgRU+QIAKAAGBAaICgJUAgUz0gYFApgBBTPSBAMCmJAEBCT5BAIoAQYEBgiAdNwmAH8AhiYAJP8ABibAAAAA"- "giQAJLwAACaEJAog/yQCJuD///8AAAHSBQMBBP8gBCYA////AADo0QEJAASBJgggAAD/0QAFDgQAAAHSBAUBBJ8AAiIAAAjSAgAB"- "BACAYNwAHH8AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"+ "AAAAAAQAAAAEAAAAOAIAAAAAAAA4AgAAAAAAADgCAAAAAAAAOAoAAAAAAAA4CgAAAAAAAAQAAAAAAAAABwAAACEKAAAgAAAAQU1E"+ "R1BVAACDrmFtZGhzYS5rZXJuZWxzkt4AEqsuYWdwcl9jb3VudAClLmFyZ3Oaha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFk"+ "ZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vz"+ "c6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVy"+ "ha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQQpS5zaXplCKsudmFsdWVfa2lu"+ "ZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0GKUu"+ "c2l6ZQirLnZhbHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldCClLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zm"+ "c2V0JKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQopS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9m"+ "ZnNldCylLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0MKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5v"+ "ZmZzZXQ0pS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZbkuZ3JvdXBfc2VnbWVudF9maXhlZF9zaXplzRAAti5rZXJuYXJnX3Nl"+ "Z21lbnRfYWxpZ24ItS5rZXJuYXJnX3NlZ21lbnRfc2l6ZTipLmxhbmd1YWdlqE9wZW5DTCBDsS5sYW5ndWFnZV92ZXJzaW9ukgIA"+ "uC5tYXhfZmxhdF93b3JrZ3JvdXBfc2l6Zc0BAKUubmFtZbdmdXNlZF9teGZwNF9nZW1tX2tlcm5lbLsucHJpdmF0ZV9zZWdtZW50"+ "X2ZpeGVkX3NpemUAqy5zZ3ByX2NvdW50JLEuc2dwcl9zcGlsbF9jb3VudACnLnN5bWJvbLpmdXNlZF9teGZwNF9nZW1tX2tlcm5l"+ "bC5rZLgudW5pZm9ybV93b3JrX2dyb3VwX3NpemUBsy51c2VzX2R5bmFtaWNfc3RhY2vCqy52Z3ByX2NvdW50P7Eudmdwcl9zcGls"+ "bF9jb3VudACvLndhdmVmcm9udF9zaXplQN4AEqsuYWdwcl9jb3VudAClLmFyZ3PcABaFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25s"+ "ea4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldAClLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKFri5hY3R1YWxf"+ "YWNjZXNzqndyaXRlX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxf"+ "YnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0EKUuc2l6ZQirLnZh"+ "bHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldBilLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0HKUuc2l6"+ "ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQgpS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNp"+ "emUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5z"+ "aXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldDClLnNpemUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF94"+ "g6cub2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Jsb2NrX2NvdW50X3mDpy5vZmZzZXQ4pS5zaXplBKsudmFsdWVf"+ "a2luZLRoaWRkZW5fYmxvY2tfY291bnRfeoOnLm9mZnNldDylLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91cF9zaXplX3iD"+ "py5vZmZzZXQ+pS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV95g6cub2Zmc2V0QKUuc2l6ZQKrLnZhbHVlX2tp"+ "bmSzaGlkZGVuX2dyb3VwX3NpemVfeoOnLm9mZnNldEKlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeIOnLm9m"+ "ZnNldESlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeYOnLm9mZnNldEalLnNpemUCqy52YWx1ZV9raW5ksmhp"+ "ZGRlbl9yZW1haW5kZXJfeoOnLm9mZnNldFilLnNpemUIqy52YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3iDpy5vZmZz"+ "ZXRgpS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF95g6cub2Zmc2V0aKUuc2l6ZQirLnZhbHVlX2tpbmS2"+ "aGlkZGVuX2dsb2JhbF9vZmZzZXRfeoOnLm9mZnNldHClLnNpemUCqy52YWx1ZV9raW5ksGhpZGRlbl9ncmlkX2RpbXO5Lmdyb3Vw"+ "X3NlZ21lbnRfZml4ZWRfc2l6ZQC2Lmtlcm5hcmdfc2VnbWVudF9hbGlnbgi1Lmtlcm5hcmdfc2VnbWVudF9zaXplzQEwqS5sYW5n"+ "dWFnZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQClLm5hbWW6ZnVzZWRf"+ "cXVhbnRfc2h1ZmZsZV9rZXJuZWy7LnByaXZhdGVfc2VnbWVudF9maXhlZF9zaXplAKsuc2dwcl9jb3VudBOxLnNncHJfc3BpbGxf"+ "Y291bnQApy5zeW1ib2y9ZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2S4LnVuaWZvcm1fd29ya19ncm91cF9zaXplAbMudXNl"+ "c19keW5hbWljX3N0YWNrwqsudmdwcl9jb3VudDOxLnZncHJfc3BpbGxfY291bnQAry53YXZlZnJvbnRfc2l6ZUCtYW1kaHNhLnRh"+ "cmdldLlhbWRnY24tYW1kLWFtZGhzYS0tZ2Z4OTUwrmFtZGhzYS52ZXJzaW9ukgECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AQAAABIDBwAAHwAAAAAAAEwKAAAAAAAAGQAAABEDBgAADgAAAAAAAEAAAAAAAAAANAAAABIDBwAAKgAAAAAAADQFAAAAAAAATwAA"+ "ABEDBgBADgAAAAAAAEAAAAAAAAAAbQAAABEACgCwUwAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAGgAAAAgABQIAsCAAAQAAAO6c"+ "a0ps/JkMkBk51mxBnmW1h9G0BgAAAAYAAAAEAAAABQAAAAMAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA"+ "ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwua2QAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJu"+ "ZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2QAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AAAAAAAAAAAAAAAAAAAA"+ "AAAQAAAAAAAAOAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAcBrwCEAAAACAAAAAAAAAAAAAAAAAAAADAB"+ "AAAAAAAAwBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACGAK8AhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgrAIAAAAIIABCCwBAQmjwAOJn/AjL8JvwOBA58EkASaBI8DBAOBA4YD"+ "kAMMAn6AA4SBAUcCfgAAgL//AgIK/v9/TwEPAn4AAIC/AQUKfgQFBJIFBASWBQQFgQIFBJYEAwWSAgWFgQSBBoEFA4eBBQMJvwYE"+ "BIUHBQWFBIEGgQUDCb8GBASFBAMDkgIDgoEBAADSAgwJBAqAAr8BD1AoAwCFvwEPDCiAAYK+AQCCv8EBgr6AAQbAGAAAAASEFo4p"+ "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"+ "fQIAHVgMaIEMTCCPTAwoAgDE0BgMAgAAAoSGBMGEiAQgkL5+EJCIKgCIv4ACEn6AAhB+gAIOfoACDH4AIJK+IwCIv4NMDCgKAAjS"+ "GAGZBAQAxNAYDAIAgAIOfoACDH4EIJS+AgCIvwCAUNwKAH8GfhT+h4dMECgEAMTQGBACAAQglL4CAIi/BIBQ3AoAfwd+FP6Hi0wQ"+ "KAQAxNAYEAIAgAISfoACEH4EIJS+AgCIvwiAUNwKAH8IfhT+hwIghL4CAIi/DIBQ3AoAfwl+BP6HfhL+hxAjgr4FAIi/cA+MvwYA"+ "CNIYAZkEAIBc3AYAfwZ+Av6HAgDM0AtaAgAAAoSGgAIUfgQggr5Q/oi/Hf8EhgD//38EABRoCgAB0hcEKQSfFBYiCgAI0gwAKQQA"+ "gEDcCgB/CkX+gr8oAwx+AAAA0ikFWQAJDIh9AADE0AgAAgAAaoKGAiCAvg0AiL8BAMjRAiEFAv9/ArABAP/RAgMKAAgC6NEAExgE"+ "nxASIn/AjL8IAAjSCAMZAACAbNwIAX8AfgD+h4EAAigAAMTQCAICAABqgoYCIIC+DQCIvwIAyNEDIQUC/38CsAcA/9EDBQoAAgLo"+ "0QETGASfBAYif8CMvwIACNICAxkAAIBs3AIHfwB+AP6HggACKAAAxNAIAgIAAGqChgIggL4NAIi/AgDI0QQhBQL/fwKwBAD/0QQF"+ "CgACAujRARMYBJ8EBiJ/wIy/AgAI0gIDGQAAgGzcAgR/AH4A/oeDAAAoAADE0AgAAgAAaoCGACCCvg0AiL8BAMjRBSEFAv9/ALAC"+ "AP/RBQMCAAAA6NEAExgEnwACIn/AjL8AAAjSAAMZAACAbNwAAn8AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"+ "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"+ "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAB"+ "BsAYAAAAwAACwDwAAAB/wIy/BZ8GkAabBo8FBgWBBYUMkAwwhb4FDAJ+A/8Dhv//AAACAwKSAgAAaAFHAn6ABYKBgAAEagAFBBr/"+ "AgIK/v9/TwEPAn4MAAYqnwYGIgQAhdICAgIABACG0gEJAgABCQJoAQCG0gIDAgAEAIXSAQsAAAIJBGqBAgpoBQSWfQUECGwAAIC/"+ "AQsCAAIJBACBAghoBQSWfQEAgL8BCQIAAQcCKgEHJGoEJIh9aiCCvhsBiL8AAQrAJAAAAAACCsAAAAAAgAAGwBAAAAABAIXSEhkA"+ "AAADJmp/wIy/AACF0hILAACFJiAknwACIgAACNIAAyEAnyAiIhQACNIQAwEEAIBc3BQAfwQQgFzcFAB/DCCAXNwUAH8AMIBc3BQA"+ "fwhzD4y/kAg2JP8IRiYAAP//kApIJP8KOCYAAP//GwXT0RsBjQSQDEok/ww6JgAA//8bBtPRG0lyBJAOTCT/DjwmAAD//xsG09Eb"+ "S3YEcg+Mv5AYTiT/GD4mAAD//xsG09EbTXoEkBpQJP8aQCYAAP//GwbT0RtPfgSQHFIk/xxCJgAA//8bBtPRG1GCBJAeVCT/HkQm"+ "AAD//xsG09EbU4YEcQ+Mv5AAViT/ACImAAD//xsG09EbVYoEkAJYJP8CKCYAAP//GwbT0RtXRgSQBFok/wQqJgAA//8bBtPRG1lS"+ "BJAGXCT/BiwmAAD//xsG09EbW1YEcA+Mv5AQXiT/EC4mAAD//xsG09EbXVoEkBJgJP8SMCYAAP//GwbT0RtfXgSQFGIk/xQyJgAA"+ "//8bBtPRG2FiBJAWZCT/FjQmAAD//xsG09EbY2YEJAbT0RtlagSASJp8gAI2fmoggL4aAIi//0g2aAAAIAD/NjYmAACA//8Ahb4A"+ "AIAABTaIfIP/BbAAAIC/JAAA0YBAqQEbAIjSG0kCABtDNn7/Akh+AAAAQoBISAAbSTYEGz82fhsRNn7/Akh+gQAAABsA19EbC5AE"+ "/zY2TH0AAAB+AP6HlwJIfvkICCgjBgYE+QoKKBwGBgT5NlAkJAYGAAQATdIEUQIABQBN0gVRAgD/AACw+QwMKB0GBgT5Dg4oHgYG"+ "BIgKClQGAE3SBlECAAcATdIHUQIABAUz0gQLApiIDgpU+RgYKB8GBgT5GhooIAYGBPkcHCghBgYE+R4eKCIGBgQFBTPSBgsCmCQA"+ "hdISDQAADABN0gxRAgANAE3SDVECAA4ATdIOUQIADwBN0g9RAgCQCgokiB4MVJ9ISiKEJkwk+QoIKAQGBAaIGgpUBgUz0g4NApgk"+ "AAjSCgCRBJ9MTiIFBTPSDAsCmJAMDCQkAAjSJAGZBPkMCigFBgQG+QAAKBEGBgT5AgIoFAYGBACAdNwkBH8AAABN0gBRAgABAE3S"+ "AVECAPkEBCgVBgYE+QYGKBYGBgSIAgJUAgBN0gJRAgADAE3SA1ECAAAFM9IAAwKYiAYCVPkQCCgXBgYE+RIKKBgGBgT5FAwoGQYG"+ "BPkWDigaBgYEAQUz0gIDApgEAE3SBFECAAUATdIFUQIABgBN0gZRAgAHAE3SB1ECAJACAiSIDgRU+QIAKAAGBAaICgJUAgUz0gYF"+ "ApgBBTPSBAMCmJAEBCT5BAIoAQYEBgiAdNwkAH8AhiYAJP8ABibAAAAAgiQAJLwAACaEJAog/yQCJuD///8AAAHSBQMBBP8gBCYA"+ "////AADo0QEJAASBJgggAAD/0QAFDgQAAAHSBAUBBJ8AAiIAAAjSAgABBACAYNwAG38AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/"+ "AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"+ "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA""gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A""AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/""AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"⋯ 5 unchanged lines"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A""AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/""AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"- "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"- "gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwYAAAAA"- "AAAAoAgAAAAAAAALAAAAAAAAABgAAAAAAAAABQAAAAAAAABQCQAAAAAAAAoAAAAAAAAAVgAAAAAAAAD1/v9vAAAAAAAJAAAAAAAA"- "BAAAAAAAAAAoCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU1EIGNsYW5nIHZlcnNpb24gMjAuMC4wZ2l0IChodHRwczovL2dpdGh1"- "Yi5jb20vUmFkZW9uT3BlbkNvbXB1dGUvbGx2bS1wcm9qZWN0IHJvYy03LjEuMCAyNTQyNSAxYjBlYWRhNmIwZWU5M2UyZTY5NGM4"- "YzE0NmQyM2ZjYTkwYmMxMWM1KQBMaW5rZXI6IEFNRCBMTEQgMjAuMC4wICgvbG9uZ2VyX3BhdGhuYW1lX3NvX3RoYXRfcnBtc19j"- "YW5fc3VwcG9ydF9wYWNrYWdpbmdfdGhlX2RlYnVnX2luZm9fZm9yX2FsbF9vc19wcm9maWxlcy9zcmMvbGx2bS1wcm9qZWN0L2xs"- "dm0gMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAEAAAAAAPH/AAAAAAAAAAAAAAAAAAAAAC0AAAAAAPH/NAAAAAAAAAAAAAAAAAAAAFEAAAAAAPH/AAAAAAAAAAAAAAAAAAAAAHUA"- "AAAAAPH/DQAAAAAAAAAAAAAAAAAAAJ4AAAAAAPH/AQAAAAAAAAAAAAAAAAAAAMIAAAAAAPH/AAAAAAAAAAAAAAAAAAAAAO8AAAAA"- "APH/AAAAAAAAAAAAAAAAAAAAAB4BAAAAAPH/AAAAAAAAAAAAAAAAAAAAAJwBAAAAAggAQDMAAAAAAAAAAAAAAAAAAEcBAAASAwcA"- "ABoAAAAAAAA4BQAAAAAAAGIBAAARAwYAwAkAAAAAAABAAAAAAAAAAIABAAARAAoAsEMAAAAAAAABAAAAAAAAAAAubm90ZQAuZHlu"- "c3ltAC5nbnUuaGFzaAAuaGFzaAAuZHluc3RyAC5yb2RhdGEALnRleHQALmR5bmFtaWMALnJlbHJvX3BhZGRpbmcALmJzcwAuQU1E"- "R1BVLmdwcl9tYXhpbXVtcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABmdXNlZF9xdWFudF9zaHVmZmxlX2tl"- "cm5lbC5wcml2YXRlX3NlZ19zaXplAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bV92Z3ByAGZ1c2VkX3F1YW50X3NodWZm"- "bGVfa2VybmVsLm51bV9hZ3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bWJlcmVkX3NncHIAZnVzZWRfcXVhbnRfc2h1"- "ZmZsZV9rZXJuZWwudXNlc192Y2MAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwudXNlc19mbGF0X3NjcmF0Y2gAZnVzZWRfcXVh"- "bnRfc2h1ZmZsZV9rZXJuZWwuaGFzX2R5bl9zaXplZF9zdGFjawBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5oYXNfcmVjdXJz"- "aW9uAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLmtkAF9faGlwX2N1aWRfYjg2"- "NjkxM2E3Y2YwYTFiYwBfRFlOQU1JQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAEAAAAHAAAAAgAAAAAAAAA4AgAAAAAAADgCAAAAAAAAZAYAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAA"- "AAAHAAAACwAAAAIAAAAAAAAAoAgAAAAAAACgCAAAAAAAAGAAAAAAAAAABQAAAAEAAAAIAAAAAAAAABgAAAAAAAAADwAAAPb//28C"- "AAAAAAAAAAAJAAAAAAAAAAkAAAAAAAAoAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAABkAAAAFAAAAAgAAAAAAAAAoCQAA"- "AAAAACgJAAAAAAAAKAAAAAAAAAACAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAfAAAAAwAAAAIAAAAAAAAAUAkAAAAAAABQCQAAAAAA"- "AFYAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAJwAAAAEAAAACAAAAAAAAAMAJAAAAAAAAwAkAAAAAAABAAAAAAAAAAAAA"- "AAAAAAAAQAAAAAAAAAAAAAAAAAAAAC8AAAABAAAABgAAAAAAAAAAGgAAAAAAAAAKAAAAAAAAQAkAAAAAAAAAAAAAAAAAAAABAAAA"- "AAAAAAAAAAAAAAA1AAAABgAAAAMAAAAAAAAAQDMAAAAAAABAEwAAAAAAAHAAAAAAAAAABQAAAAAAAAAIAAAAAAAAABAAAAAAAAAA"- "PgAAAAgAAAADAAAAAAAAALAzAAAAAAAAsBMAAAAAAABQDAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAE0AAAAIAAAAAwAA"- "AAAAAACwQwAAAAAAALATAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABSAAAAAQAAAAAAAAAAAAAAAAAAAAAA"- "AACwEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAZwAAAAEAAAAwAAAAAAAAAAAAAAAAAAAAsBMAAAAAAAA5"- "AQAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAHAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAPAUAAAAAAAAOAEAAAAAAAAPAAAA"- "CgAAAAgAAAAAAAAAGAAAAAAAAAB4AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAoFgAAAAAAAIoAAAAAAAAAAAAAAAAAAAABAAAAAAAA"- "AAAAAAAAAAAAggAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAshYAAAAAAAClAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEb"- "AztEAAAABwAAAHgRAABgAAAAuBEAAIAAAAAIEgAAoAAAAPgSAADEAAAAeBQAABwBAADoFAAANAEAABgVAABQAQAAAAAAABQAAAAA"- "AAAAAXpSAAF4EAEbDAcIkAEAABwAAAAcAAAAEBEAADgAAAAAQQ4QhgJDDQZzDAcIAAAAHAAAADwAAAAwEQAASgAAAABBDhCGAkMN"- "BgJFDAcIAAAgAAAAXAAAAGARAADjAAAAAEcOsAECyw64AUQOwAFMDggAAABUAAAAgAAAACwSAACAAQAAAEEOEEIOGEIOIEIOKEIO"- "MEEOOEcO4AGDB4wGjQWOBI8DhgIDSwEO6AFEDvABSQ7gAUwOOEEOMEIOKEIOIEIOGEIOEEEOCAAAFAAAANgAAABUEwAAYQAAAABE"- "DjACWA4IGAAAAPAAAACsEwAAIgAAAABNDhBUDggAAAAAABQAAAAMAQAAwBMAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABV"- "SInl9gU9JwAAAXQC6yfGBTInAAABSIsFexYAAEiD+AB0E0iNPabu//9IjTUfJwAA6LoDAABdww8fhAAAAAAAVUiJ5fYFRScAAAF0"- "Aus5xgU6JwAAAUiLBUMWAABIg/gAdAxIiz1OJgAA6JEDAABIiwUyFgAASIP4AHQMSI09Te7//+iIAwAAXcPMzMzMzMxIgeyoAAAA"- "SIl8JFhIiXQkUEiJVCRIiUwkFESJRCQQRIlMJAxIjUQkWEiJRCRgSI1EJFBIiUQkaEiNRCRISIlEJHBIjUQkFEiJRCR4SI1EJBBI"- "iYQkgAAAAEiNRCQMSImEJIgAAABIjYQksAAAAEiJhCSQAAAASI2EJLgAAABIiYQkmAAAAEiNhCTAAAAASImEJKAAAABIjXwkOEiN"- "dCQoSI1UJCBIjUwkGOjhAgAASIt0JDiLVCRASItMJChEi0QkMEiLPVcVAABMjUwkYP90JBj/dCQo6MUCAABIgcS4AAAAw2ZmZmYu"- "Dx+EAAAAAABVQVdBVkFVQVRTSIHsqAAAAESJy0WJxonNSYnXSYn0SYn9QY1+H0WFwEEPSfhMi4wk+AAAAMH/BQ+v+Y2H/wAAAIHH"- "/gEAAIXAD0n4wf8ISLoAAAAAAQAAAEgJ10iBygABAAC+AQAAALkBAAAARTHA6EsCAACFwA+F7AAAAIuEJPAAAACLjCToAAAAi5Qk"- "4AAAAEyJbCRYTIlkJFBMiXwkSIlsJBREiXQkEIlcJAyJVCQIiUwkBIkEJEiNRCRYSIlEJGBIjUQkUEiJRCRoSI1EJEhIiUQkcEiN"- "RCQUSIlEJHhIjUQkEEiJhCSAAAAASI1EJAxIiYQkiAAAAEiNRCQISImEJJAAAABIjUQkBEiJhCSYAAAASIngSImEJKAAAABIjXwk"- "OEiNdCQoSI1UJCBIjUwkGOhnAQAASIt0JDiLVCRASItMJChEi0QkMEiLPd0TAABMjUwkYP90JBj/dCQo6EsBAABIg8QQ6GIBAABI"- "gcSoAAAAW0FcQV1BXkFfXcNIg+woSIs9jSQAAEiF/3UWSI09qSMAAOhEAQAASInHSIkFciQAAA9XwA8RRCQQDxEEJEiLNXcTAABI"- "jQ1ot///SInKQbj/////RTHJ6B8BAABIjT0YAAAASIPEKOk/AAAAZmZmZmZmLg8fhAAAAAAASIs9ISQAAEiF/3QVUOj+AAAASMcF"- "CyQAAAAAAABIg8QIw8zMzMzMzMzMzMzMzMzM8w8e+kiLFQ0jAAAx9uneAAAAzMzzDx76SIPsCEiLBc0SAABIhcB0Av/QSIPECMMA"- "8w8e+kiD7AhIg8QIwwAAAP81+iIAAP8l/CIAAA8fQAD/JfoiAABoAAAAAOng/////yXyIgAAaAEAAADp0P////8l6iIAAGgCAAAA"- "6cD/////JeIiAABoAwAAAOmw/////yXaIgAAaAQAAADpoP////8l0iIAAGgFAAAA6ZD/////JcoiAABoBgAAAOmA/////yXCIgAA"- "aAcAAADpcP////8luiIAAGgIAAAA6WD/////JbIiAABoCQAAAOlQ/////yWqIgAAaAoAAADpQP///wAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAHQAAAAAAAAC2AQAAAAAAAAEAAAAAAAAAcQEAAAAAAAABAAAAAAAAAMoBAAAAAAAAAQAAAAAAAADZAQAA"- "AAAAAAEAAAAAAAAAigEAAAAAAAABAAAAAAAAAKABAAAAAAAABwAAAAAAAABoBgAAAAAAAAgAAAAAAAAACAEAAAAAAAAJAAAAAAAA"- "ABgAAAAAAAAA+f//bwAAAAAFAAAAAAAAABcAAAAAAAAAcAcAAAAAAAACAAAAAAAAAAgBAAAAAAAAAwAAAAAAAACodAAAAAAAABQA"- "AAAAAAAABwAAAAAAAAAGAAAAAAAAADgCAAAAAAAACwAAAAAAAAAYAAAAAAAAAAUAAAAAAAAAhAQAAAAAAAAKAAAAAAAAAOMBAAAA"- "AAAA9f7/bwAAAABYBAAAAAAAABkAAAAAAAAAcGIAAAAAAAAbAAAAAAAAABAAAAAAAAAAGgAAAAAAAACAYgAAAAAAABwAAAAAAAAA"- "CAAAAAAAAAAMAAAAAAAAAIRRAAAAAAAADQAAAAAAAACgUQAAAAAAAPD//28AAAAA0AMAAAAAAAD+//9vAAAAAPQDAAAAAAAA////"- "bwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAACQYgAAAAAAAAAAAAAAAAAAAAAAAAAAAADGUQAAAAAAANZRAAAAAAAA5lEAAAAAAAD2"- "UQAAAAAAAAZSAAAAAAAAFlIAAAAAAAAmUgAAAAAAADZSAAAAAAAARlIAAAAAAABWUgAAAAAAAGZSAAAAAAAAAEFNRCBjbGFuZyB2"- "ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xsdm0tcHJvamVjdCByb2MtNy4x"- "LjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBBTUQgTExEIDIwLjAuMCAo"- "L2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1Z19pbmZvX2Zvcl9hbGxf"- "b3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUp"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABADx/wAAAAAAAAAAAAAAAAAAAAAMAAAAAgAMANBNAAAAAAAAOAAA"- "AAAAAAAWAAAAAQAZABh1AAAAAAAAAQAAAAAAAAAuAAAAAQALAKA8AAAAAAAAAAAAAAAAAABAAAAAAQAZACB1AAAAAAAAQAAAAAAA"- "AABTAAAAAgAMABBOAAAAAAAASgAAAAAAAABdAAAAAQAZAGB1AAAAAAAAAQAAAAAAAABzAAAAAQAQAHBiAAAAAAAACAAAAAAAAAB6"- "AAAAAQARAIBiAAAAAAAACAAAAAAAAABOAQAAAQIWAIh0AAAAAAAACAAAAAAAAACBAAAABADx/wAAAAAAAAAAAAAAAAAAAACRAAAA"- "AgAMANBQAAAAAAAAYQAAAAAAAACjAAAAAQAZAGh1AAAAAAAACAAAAAAAAADIAAAAAQAXAJB0AAAAAAAAGAAAAAAAAADdAAAAAgAM"- "AEBRAAAAAAAAIgAAAAAAAADvAAAABADx/wAAAAAAAAAAAAAAAAAAAACeAgAAAQILAKA8AAAAAAAABAAAAAAAAAAHAQAAAgINAIRR"- "AAAAAAAAAAAAAAAAAAAjAQAAAgIOAKBRAAAAAAAAAAAAAAAAAAANAQAAAAIYAKh0AAAAAAAAAAAAAAAAAAC0AgAAAAITAJBiAAAA"- "AAAAAAAAAAAAAABVAgAAAgIMAHBRAAAAAAAAEgAAAAAAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAApAQAAIgAAAAAAAAAAAAAA"- "AAAAAAAAAAA/AQAAIgAAAAAAAAAAAAAAAAAAAAAAAABbAQAAIgAAAAAAAAAAAAAAAAAAAAAAAABzAQAAEgAMAGBOAAAAAAAA4wAA"- "AAAAAACdAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAC3AQAAEQASAIhiAAAAAAAACAAAAAAAAADSAQAAEgAAAAAAAAAAAAAAAAAAAAAA"- "AADiAQAAEgAMAFBPAAAAAAAAgAEAAAAAAAD9AQAAEgAAAAAAAAAAAAAAAAAAAAAAAAAYAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAo"- "AgAAEgAAAAAAAAAAAAAAAAAAAAAAAAA/AgAAEgAAAAAAAAAAAAAAAAAAAAAAAABcAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAB1AgAA"- "EQAZAHB1AAAAAAAAAQAAAAAAAACRAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAALmR5bnN5bQAuZ251LnZlcnNpb24ALmdudS52ZXJz"- "aW9uX3IALmdudS5oYXNoAC5keW5zdHIALnJlbGEuZHluAC5yZWxhLnBsdAAucm9kYXRhAC5oaXBfZmF0YmluAC5laF9mcmFtZV9o"- "ZHIALmVoX2ZyYW1lAC50ZXh0AC5pbml0AC5maW5pAC5wbHQALmluaXRfYXJyYXkALmZpbmlfYXJyYXkALmRhdGEucmVsLnJvAC5k"- "eW5hbWljAC5nb3QALnJlbHJvX3BhZGRpbmcALmRhdGEALmhpcEZhdEJpblNlZ21lbnQALmdvdC5wbHQALmJzcwAuY29tbWVudAAu"- "c3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABjcnRiZWdpbi5jAF9fZG9faW5pdABfX2RvX2luaXQuX19pbml0aWFsaXplZABfX0VI"- "X0ZSQU1FX0xJU1RfXwBfX2RvX2luaXQuX19vYmplY3QAX19kb19maW5pAF9fZG9fZmluaS5fX2ZpbmFsaXplZABfX2luaXQAX19m"- "aW5pAG14ZnA0X3F1YW50LmhpcABfX2hpcF9tb2R1bGVfY3RvcgBfX2hpcF9ncHViaW5faGFuZGxlX2I4NjY5MTNhN2NmMGExYmMA"- "X19oaXBfZmF0YmluX3dyYXBwZXIAX19oaXBfbW9kdWxlX2R0b3IAY3J0ZW5kLmMAX19nbW9uX3N0YXJ0X18AX2luaXQAX0dMT0JB"- "TF9PRkZTRVRfVEFCTEVfAF9maW5pAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBfX2Rzb19oYW5kbGUAX19k"- "ZXJlZ2lzdGVyX2ZyYW1lX2luZm8AX19kZXZpY2Vfc3R1Yl9fZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAX19oaXBQb3BDYWxs"- "Q29uZmlndXJhdGlvbgBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABoaXBMYXVuY2hLZXJuZWwAbGF1bmNoX2Z1c2VkX3F1YW50"- "X3NodWZmbGUAX19oaXBQdXNoQ2FsbENvbmZpZ3VyYXRpb24AaGlwR2V0TGFzdEVycm9yAF9faGlwUmVnaXN0ZXJGYXRCaW5hcnkA"- "X19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF9iODY2OTEzYTdj"- "ZjBhMWJjAF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAACAAAAAAAAADgCAAAAAAAAOAIAAAAAAACY"- "AQAAAAAAAAUAAAABAAAACAAAAAAAAAAYAAAAAAAAAAkAAAD///9vAgAAAAAAAADQAwAAAAAAANADAAAAAAAAIgAAAAAAAAABAAAA"- "AAAAAAIAAAAAAAAAAgAAAAAAAAAWAAAA/v//bwIAAAAAAAAA9AMAAAAAAAD0AwAAAAAAAGAAAAAAAAAABQAAAAMAAAAEAAAAAAAA"- "AAAAAAAAAAAAJQAAAPb//28CAAAAAAAAAFgEAAAAAAAAWAQAAAAAAAAsAAAAAAAAAAEAAAAAAAAACAAAAAAAAAAAAAAAAAAAAC8A"- "AAADAAAAAgAAAAAAAACEBAAAAAAAAIQEAAAAAAAA4wEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA3AAAABAAAAAIAAAAA"- "AAAAaAYAAAAAAABoBgAAAAAAAAgBAAAAAAAAAQAAAAAAAAAIAAAAAAAAABgAAAAAAAAAQQAAAAQAAABCAAAAAAAAAHAHAAAAAAAA"- "cAcAAAAAAAAIAQAAAAAAAAEAAAAYAAAACAAAAAAAAAAYAAAAAAAAAEsAAAABAAAAMgAAAAAAAAB4CAAAAAAAAHgIAAAAAAAAGwAA"- "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABTAAAAAQAAAAIAAAAAAAAAABAAAAAAAAAAEAAAAAAAAFgsAAAAAAAAAAAAAAAA"- "AAAAEAAAAAAAAAAAAAAAAAAAXwAAAAEAAAACAAAAAAAAAFg8AAAAAAAAWDwAAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA"- "AAAAAAAAAG0AAAABAAAAAgAAAAAAAACgPAAAAAAAAKA8AAAAAAAAJAEAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAB3AAAA"- "AQAAAAYAAAAAAAAA0E0AAAAAAADQPQAAAAAAALQDAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAfQAAAAEAAAAGAAAAAAAA"- "AIRRAAAAAAAAhEEAAAAAAAAbAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIMAAAABAAAABgAAAAAAAACgUQAAAAAAAKBB"- "AAAAAAAADQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACJAAAAAQAAAAYAAAAAAAAAsFEAAAAAAACwQQAAAAAAAMAAAAAA"- "AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAjgAAAA4AAAADAAAAAAAAAHBiAAAAAAAAcEIAAAAAAAAQAAAAAAAAAAAAAAAAAAAA"- "CAAAAAAAAAAAAAAAAAAAAJoAAAAPAAAAAwAAAAAAAACAYgAAAAAAAIBCAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAA"- "AAAAAACmAAAAAQAAAAMAAAAAAAAAiGIAAAAAAACIQgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAswAAAAYA"- "AAADAAAAAAAAAJBiAAAAAAAAkEIAAAAAAADQAQAAAAAAAAUAAAAAAAAACAAAAAAAAAAQAAAAAAAAALwAAAABAAAAAwAAAAAAAABg"- "ZAAAAAAAAGBEAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADBAAAACAAAAAMAAAAAAAAAiGQAAAAAAACIRAAA"- "AAAAAHgLAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA0AAAAAEAAAADAAAAAAAAAIh0AAAAAAAAiEQAAAAAAAAIAAAAAAAA"- "AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAANYAAAABAAAAAwAAAAAAAACQdAAAAAAAAJBEAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAgA"- "AAAAAAAAAAAAAAAAAADoAAAAAQAAAAMAAAAAAAAAqHQAAAAAAACoRAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAA"- "AAAA8QAAAAgAAAADAAAAAAAAABh1AAAAAAAAGEUAAAAAAABZAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAPYAAAABAAAA"- "MAAAAAAAAAAAAAAAAAAAABhFAAAAAAAAOQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD/AAAAAgAAAAAAAAAAAAAAAAAA"- "AAAAAABYRgAAAAAAAKgDAAAAAAAAHQAAABcAAAAIAAAAAAAAABgAAAAAAAAABwEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAEoAAAAA"- "AAAZAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEBAAADAAAAAAAAAAAAAAAAAAAAAAAAABlLAAAAAAAAvQIAAAAAAAAA"- "AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA="+ "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8GAAAAAAAAAHAMAAAAAAAACwAAAAAAAAAYAAAAAAAAAAUA"+ "AAAAAAAAaA0AAAAAAAAKAAAAAAAAAIkAAAAAAAAA9f7/bwAAAAAADQAAAAAAAAQAAAAAAAAAMA0AAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xsdm0t"+ "cHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBB"+ "TUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1"+ "Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2"+ "ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAqAAAA"+ "AADx/z8AAAAAAAAAAAAAAAAAAABLAAAAAADx/wAAAAAAAAAAAAAAAAAAAABsAAAAAADx/x4AAAAAAAAAAAAAAAAAAACSAAAAAADx"+ "/wEAAAAAAAAAAAAAAAAAAACzAAAAAADx/wAAAAAAAAAAAAAAAAAAAADdAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAJAQAAAADx/wAA"+ "AAAAAAAAAAAAAAAAAAAvAQAAAADx/wAAAAAAAAAAAAAAAAAAAABbAQAAAADx/zMAAAAAAAAAAAAAAAAAAAB/AQAAAADx/wAAAAAA"+ "AAAAAAAAAAAAAACjAQAAAADx/w0AAAAAAAAAAAAAAAAAAADMAQAAAADx/wEAAAAAAAAAAAAAAAAAAADwAQAAAADx/wAAAAAAAAAA"+ "AAAAAAAAAAAdAgAAAADx/wAAAAAAAAAAAAAAAAAAAABMAgAAAADx/wAAAAAAAAAAAAAAAAAAAAD9AgAAAAIIAEBDAAAAAAAAAAAA"+ "AAAAAAB1AgAAEgMHAAAfAAAAAAAATAoAAAAAAACNAgAAEQMGAAAOAAAAAAAAQAAAAAAAAACoAgAAEgMHAAAqAAAAAAAANAUAAAAA"+ "AADDAgAAEQMGAEAOAAAAAAAAQAAAAAAAAADhAgAAEQAKALBTAAAAAAAAAQAAAAAAAAAALm5vdGUALmR5bnN5bQAuZ251Lmhhc2gA"+ "Lmhhc2gALmR5bnN0cgAucm9kYXRhAC50ZXh0AC5keW5hbWljAC5yZWxyb19wYWRkaW5nAC5ic3MALkFNREdQVS5ncHJfbWF4aW11"+ "bXMALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwucHJpdmF0ZV9zZWdf"+ "c2l6ZQBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fdmdwcgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fYWdwcgBmdXNl"+ "ZF9teGZwNF9nZW1tX2tlcm5lbC5udW1iZXJlZF9zZ3ByAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLnVzZXNfdmNjAGZ1c2VkX214"+ "ZnA0X2dlbW1fa2VybmVsLnVzZXNfZmxhdF9zY3JhdGNoAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmhhc19keW5fc2l6ZWRfc3Rh"+ "Y2sAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwuaGFzX3JlY3Vyc2lvbgBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5wcml2YXRl"+ "X3NlZ19zaXplAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bV92Z3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51"+ "bV9hZ3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bWJlcmVkX3NncHIAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwu"+ "dXNlc192Y2MAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwudXNlc19mbGF0X3NjcmF0Y2gAZnVzZWRfcXVhbnRfc2h1ZmZsZV9r"+ "ZXJuZWwuaGFzX2R5bl9zaXplZF9zdGFjawBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5oYXNfcmVjdXJzaW9uAGZ1c2VkX214"+ "ZnA0X2dlbW1fa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmtkAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGZ1c2Vk"+ "X3F1YW50X3NodWZmbGVfa2VybmVsLmtkAF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfRFlOQU1JQwAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAACAAAAAAAAADgCAAAAAAAA"+ "OAIAAAAAAAA4CgAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAcAAAALAAAAAgAAAAAAAABwDAAAAAAAAHAMAAAAAAAAkAAA"+ "AAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAPAAAA9v//bwIAAAAAAAAAAA0AAAAAAAAADQAAAAAAADAAAAAAAAAAAgAAAAAA"+ "AAAIAAAAAAAAAAAAAAAAAAAAGQAAAAUAAAACAAAAAAAAADANAAAAAAAAMA0AAAAAAAA4AAAAAAAAAAIAAAAAAAAABAAAAAAAAAAE"+ "AAAAAAAAAB8AAAADAAAAAgAAAAAAAABoDQAAAAAAAGgNAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAnAAAA"+ "AQAAAAIAAAAAAAAAAA4AAAAAAAAADgAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAALwAAAAEAAAAGAAAAAAAA"+ "AAAfAAAAAAAAAA8AAAAAAABAFAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAADUAAAAGAAAAAwAAAAAAAABAQwAAAAAAAEAj"+ "AAAAAAAAcAAAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAA+AAAACAAAAAMAAAAAAAAAsEMAAAAAAACwIwAAAAAAAFAMAAAA"+ "AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAATQAAAAgAAAADAAAAAAAAALBTAAAAAAAAsCMAAAAAAAABAAAAAAAAAAAAAAAAAAAA"+ "AQAAAAAAAAAAAAAAAAAAAFIAAAABAAAAAAAAAAAAAAAAAAAAAAAAALAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA"+ "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"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAABwIAAAAAAAABAAAAAAAAAMIBAAAAAAAAAQAAAAAAAAAbAgAAAAAAAAEA"+ "AAAAAAAAKgIAAAAAAAABAAAAAAAAANsBAAAAAAAAAQAAAAAAAADxAQAAAAAAAAcAAAAAAAAAGAcAAAAAAAAIAAAAAAAAADgBAAAA"+ "AAAACQAAAAAAAAAYAAAAAAAAAPn//28AAAAABQAAAAAAAAAXAAAAAAAAAFAIAAAAAAAAAgAAAAAAAAAIAQAAAAAAAAMAAAAAAAAA"+ "aIoAAAAAAAAUAAAAAAAAAAcAAAAAAAAABgAAAAAAAAA4AgAAAAAAAAsAAAAAAAAAGAAAAAAAAAAFAAAAAAAAAOAEAAAAAAAACgAA"+ "AAAAAAA0AgAAAAAAAPX+/28AAAAAoAQAAAAAAAAZAAAAAAAAACB4AAAAAAAAGwAAAAAAAAAQAAAAAAAAABoAAAAAAAAAMHgAAAAA"+ "AAAcAAAAAAAAAAgAAAAAAAAADAAAAAAAAAA0ZwAAAAAAAA0AAAAAAAAAUGcAAAAAAADw//9vAAAAABgEAAAAAAAA/v//bwAAAABA"+ "BAAAAAAAAP///28AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAABIeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2ZwAAAAAA"+ "AIZnAAAAAAAAlmcAAAAAAACmZwAAAAAAALZnAAAAAAAAxmcAAAAAAADWZwAAAAAAAOZnAAAAAAAA9mcAAAAAAAAGaAAAAAAAABZo"+ "AAAAAAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xs"+ "dm0tcHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2Vy"+ "OiBBTUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9k"+ "ZWJ1Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0Yzhj"+ "MTQ2ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABADx/wAAAAAAAAAAAAAAAAAAAAAM"+ "AAAAAgAMALBgAAAAAAAAOAAAAAAAAAAWAAAAAQAZANiKAAAAAAAAAQAAAAAAAAAuAAAAAQALAABPAAAAAAAAAAAAAAAAAABAAAAA"+ "AQAZAOCKAAAAAAAAQAAAAAAAAABTAAAAAgAMAPBgAAAAAAAASgAAAAAAAABdAAAAAQAZACCLAAAAAAAAAQAAAAAAAABzAAAAAQAQ"+ "ACB4AAAAAAAACAAAAAAAAAB6AAAAAQARADB4AAAAAAAACAAAAAAAAABOAQAAAQIWAEiKAAAAAAAACAAAAAAAAACBAAAABADx/wAA"+ "AAAAAAAAAAAAAAAAAACRAAAAAgAMAFBmAAAAAAAAlAAAAAAAAACjAAAAAQAZACiLAAAAAAAACAAAAAAAAADIAAAAAQAXAFCKAAAA"+ "AAAAGAAAAAAAAADdAAAAAgAMAPBmAAAAAAAAIgAAAAAAAADvAAAABADx/wAAAAAAAAAAAAAAAAAAAADvAgAAAQILAABPAAAAAAAA"+ "BAAAAAAAAAAHAQAAAgINADRnAAAAAAAAAAAAAAAAAAAjAQAAAgIOAFBnAAAAAAAAAAAAAAAAAAANAQAAAAIYAGiKAAAAAAAAAAAA"+ "AAAAAAAFAwAAAAITAEh4AAAAAAAAAAAAAAAAAACmAgAAAgIMACBnAAAAAAAAEgAAAAAAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAA"+ "AAApAQAAIgAAAAAAAAAAAAAAAAAAAAAAAAA/AQAAIgAAAAAAAAAAAAAAAAAAAAAAAABbAQAAIgAAAAAAAAAAAAAAAAAAAAAAAABz"+ "AQAAEgAMAEBhAAAAAAAA9AAAAAAAAACaAQAAEgAAAAAAAAAAAAAAAAAAAAAAAAC0AQAAEQASADh4AAAAAAAACAAAAAAAAADMAQAA"+ "EgAAAAAAAAAAAAAAAAAAAAAAAADcAQAAEgAMAEBiAAAAAAAA4wAAAAAAAAAGAgAAEQASAEB4AAAAAAAACAAAAAAAAAAhAgAAEgAM"+ "ADBjAAAAAAAAnwEAAAAAAAAzAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABOAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABeAgAAEgAMANBk"+ "AAAAAAAAgAEAAAAAAAB5AgAAEgAAAAAAAAAAAAAAAAAAAAAAAACQAgAAEgAAAAAAAAAAAAAAAAAAAAAAAACtAgAAEgAAAAAAAAAA"+ "AAAAAAAAAAAAAADGAgAAEQAZADCLAAAAAAAAAQAAAAAAAADiAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAALmR5bnN5bQAuZ251LnZl"+ "cnNpb24ALmdudS52ZXJzaW9uX3IALmdudS5oYXNoAC5keW5zdHIALnJlbGEuZHluAC5yZWxhLnBsdAAucm9kYXRhAC5oaXBfZmF0"+ "YmluAC5laF9mcmFtZV9oZHIALmVoX2ZyYW1lAC50ZXh0AC5pbml0AC5maW5pAC5wbHQALmluaXRfYXJyYXkALmZpbmlfYXJyYXkA"+ "LmRhdGEucmVsLnJvAC5keW5hbWljAC5nb3QALnJlbHJvX3BhZGRpbmcALmRhdGEALmhpcEZhdEJpblNlZ21lbnQALmdvdC5wbHQA"+ "LmJzcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABjcnRiZWdpbi5jAF9fZG9faW5pdABfX2RvX2luaXQuX19p"+ "bml0aWFsaXplZABfX0VIX0ZSQU1FX0xJU1RfXwBfX2RvX2luaXQuX19vYmplY3QAX19kb19maW5pAF9fZG9fZmluaS5fX2ZpbmFs"+ "aXplZABfX2luaXQAX19maW5pAG14ZnA0X2Z1c2VkLmhpcABfX2hpcF9tb2R1bGVfY3RvcgBfX2hpcF9ncHViaW5faGFuZGxlXzUw"+ "MjNkZjQzZmFjOGRhNTcAX19oaXBfZmF0YmluX3dyYXBwZXIAX19oaXBfbW9kdWxlX2R0b3IAY3J0ZW5kLmMAX19nbW9uX3N0YXJ0"+ "X18AX2luaXQAX0dMT0JBTF9PRkZTRVRfVEFCTEVfAF9maW5pAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBf"+ "X2Rzb19oYW5kbGUAX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8AX19kZXZpY2Vfc3R1Yl9fZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwA"+ "X19oaXBQb3BDYWxsQ29uZmlndXJhdGlvbgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbABoaXBMYXVuY2hLZXJuZWwAX19kZXZpY2Vf"+ "c3R1Yl9fZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwAbGF1bmNoX2Z1c2VkX2dl"+ "bW0AX19oaXBQdXNoQ2FsbENvbmZpZ3VyYXRpb24AaGlwR2V0TGFzdEVycm9yAGxhdW5jaF9mdXNlZF9xdWFudF9zaHVmZmxlAF9f"+ "aGlwUmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkA"+ "X19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAAAIAAAAA"+ "AAAAOAIAAAAAAAA4AgAAAAAAAOABAAAAAAAABQAAAAEAAAAIAAAAAAAAABgAAAAAAAAACQAAAP///28CAAAAAAAAABgEAAAAAAAA"+ "GAQAAAAAAAAoAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAAAAABYAAAD+//9vAgAAAAAAAABABAAAAAAAAEAEAAAAAAAAYAAA"+ "AAAAAAAFAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAlAAAA9v//bwIAAAAAAAAAoAQAAAAAAACgBAAAAAAAAEAAAAAAAAAAAQAAAAAA"+ "AAAIAAAAAAAAAAAAAAAAAAAALwAAAAMAAAACAAAAAAAAAOAEAAAAAAAA4AQAAAAAAAA0AgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"+ "AAAAAAAAADcAAAAEAAAAAgAAAAAAAAAYBwAAAAAAABgHAAAAAAAAOAEAAAAAAAABAAAAAAAAAAgAAAAAAAAAGAAAAAAAAABBAAAA"+ "BAAAAEIAAAAAAAAAUAgAAAAAAABQCAAAAAAAAAgBAAAAAAAAAQAAABgAAAAIAAAAAAAAABgAAAAAAAAASwAAAAEAAAAyAAAAAAAA"+ "AFgJAAAAAAAAWAkAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAFMAAAABAAAAAgAAAAAAAAAAEAAAAAAAAAAQ"+ "AAAAAAAAqD4AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABfAAAAAQAAAAIAAAAAAAAAqE4AAAAAAACoTgAAAAAAAFQAAAAA"+ "AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAbQAAAAEAAAACAAAAAAAAAABPAAAAAAAAAE8AAAAAAACkAQAAAAAAAAAAAAAAAAAA"+ "CAAAAAAAAAAAAAAAAAAAAHcAAAABAAAABgAAAAAAAACwYAAAAAAAALBQAAAAAAAAhAYAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA"+ "AAAAAAB9AAAAAQAAAAYAAAAAAAAANGcAAAAAAAA0VwAAAAAAABsAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAgwAAAAEA"+ "AAAGAAAAAAAAAFBnAAAAAAAAUFcAAAAAAAANAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIkAAAABAAAABgAAAAAAAABg"+ "ZwAAAAAAAGBXAAAAAAAAwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACOAAAADgAAAAMAAAAAAAAAIHgAAAAAAAAgWAAA"+ "AAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAmgAAAA8AAAADAAAAAAAAADB4AAAAAAAAMFgAAAAAAAAIAAAAAAAA"+ "AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAKYAAAABAAAAAwAAAAAAAAA4eAAAAAAAADhYAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAgA"+ "AAAAAAAAAAAAAAAAAACzAAAABgAAAAMAAAAAAAAASHgAAAAAAABIWAAAAAAAANABAAAAAAAABQAAAAAAAAAIAAAAAAAAABAAAAAA"+ "AAAAvAAAAAEAAAADAAAAAAAAABh6AAAAAAAAGFoAAAAAAAAwAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAMEAAAAIAAAA"+ "AwAAAAAAAABIegAAAAAAAEhaAAAAAAAAuAUAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADQAAAAAQAAAAMAAAAAAAAASIoA"+ "AAAAAABIWgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAA1gAAAAEAAAADAAAAAAAAAFCKAAAAAAAAUFoAAAAA"+ "AAAYAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAOgAAAABAAAAAwAAAAAAAABoigAAAAAAAGhaAAAAAAAAcAAAAAAAAAAA"+ "AAAAAAAAAAgAAAAAAAAAAAAAAAAAAADxAAAACAAAAAMAAAAAAAAA2IoAAAAAAADYWgAAAAAAAFkAAAAAAAAAAAAAAAAAAAAIAAAA"+ "AAAAAAAAAAAAAAAA9gAAAAEAAAAwAAAAAAAAAAAAAAAAAAAA2FoAAAAAAAA5AQAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAA"+ "AP8AAAACAAAAAAAAAAAAAAAAAAAAAAAAABhcAAAAAAAA8AMAAAAAAAAdAAAAFwAAAAgAAAAAAAAAGAAAAAAAAAAHAQAAAwAAAAAA"+ "AAAAAAAAAAAAAAAAAAAIYAAAAAAAABkBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQEAAAMAAAAAAAAAAAAAAAAAAAAA"+ "AAAAIWEAAAAAAAAOAwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==")- # ---- .so loader (pre-load at import time) ----- def _load_hip_eager():+ # ---- Load library ----+ def _load():try:- so_data = base64.b64decode(_SO_B64)+ so = base64.b64decode(_SO_B64)td = tempfile.mkdtemp()- p = os.path.join(td, "mxfp4_quant.so")- with open(p, 'wb') as f:- f.write(so_data)+ p = os.path.join(td, "k.so")+ with open(p, 'wb') as f: f.write(so)lib = ctypes.cdll.LoadLibrary(p)+ # Fused GEMM+ lib.launch_fused_gemm.restype = ctypes.c_int+ lib.launch_fused_gemm.argtypes = [+ ctypes.c_void_p]*4 + [ctypes.c_int]*6 + [ctypes.c_void_p]+ # Fused quant+shufflelib.launch_fused_quant_shuffle.restype = ctypes.c_intlib.launch_fused_quant_shuffle.argtypes = [- ctypes.c_void_p, # A- ctypes.c_void_p, # A_q- ctypes.c_void_p, # A_scale_sh- ctypes.c_int, # m- ctypes.c_int, # k- ctypes.c_int, # m_pad- ctypes.c_int, # ks_pad- ctypes.c_int, # stride_a- ctypes.c_int, # stride_aq- ctypes.c_void_p, # null- ]+ ctypes.c_void_p]*3 + [ctypes.c_int]*6 + [ctypes.c_void_p]return lib- except Exception:- return None+ except: return None- _hip_lib = _load_hip_eager() # pre-load at import time+ _lib = _load()+ # ---- Caches ----+ _out_cache = {}+ _qs_cache = {}- # ---- Shape-based buffer cache ----- _buf_cache = {}+ def _fused_gemm(A, B_q, B_sc, m, n, k):+ """Single launch: quant A + GEMM → C. Best for small K."""+ B_q_u8 = B_q.view(torch.uint8)+ B_sc_u8 = B_sc.contiguous().view(torch.uint8)+ ks_pad = ((k//32+7)//8)*8+ key = (m,n)+ if key not in _out_cache:+ _out_cache[key] = torch.empty((m,n), dtype=torch.bfloat16, device='cuda')+ C = _out_cache[key]+ _lib.launch_fused_gemm(+ ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(B_q_u8.data_ptr()),+ ctypes.c_void_p(B_sc_u8.data_ptr()), ctypes.c_void_p(C.data_ptr()),+ ctypes.c_int(m), ctypes.c_int(n), ctypes.c_int(k),+ ctypes.c_int(A.stride(0)), ctypes.c_int(B_q_u8.stride(0)),+ ctypes.c_int(ks_pad), ctypes.c_void_p(0))+ return C- def _hip_fused_quant_shuffle(A):- """Fused quantize + shuffle using HIP kernel with hardware FP4 convert."""- if _hip_lib is None:- return None- lib = _hip_lib-- m, k = A.shape- ks = k // 32- m_pad = ((m + 255) // 256) * 256- ks_pad = ((ks + 7) // 8) * 8-- # Get or create zero-padded buffers+ def _hip_quant_shuffle(A, m, k):+ """HIP quant+shuffle → (A_q, A_scale_sh). For large K path."""+ ks = k//32+ m_pad = ((m+255)//256)*256+ ks_pad = ((ks+7)//8)*8key = (m_pad, k, ks_pad)- if key not in _buf_cache:- _buf_cache[key] = {- 'Aq': torch.zeros(m_pad, k // 2, dtype=torch.uint8, device='cuda'),- 'As': torch.zeros(m_pad * ks_pad, dtype=torch.uint8, device='cuda'),+ if key not in _qs_cache:+ _qs_cache[key] = {+ 'Aq': torch.zeros(m_pad, k//2, dtype=torch.uint8, device='cuda'),+ 'As': torch.zeros(m_pad*ks_pad, dtype=torch.uint8, device='cuda'),}- c = _buf_cache[key]-- # No re-zero needed: buffers start as torch.zeros, HIP kernel overwrites valid rows,- # padded rows stay 0. Within a benchmark case, shapes don't change between iterations.-- err = lib.launch_fused_quant_shuffle(- ctypes.c_void_p(A.data_ptr()),- ctypes.c_void_p(c['Aq'].data_ptr()),+ c = _qs_cache[key]+ _lib.launch_fused_quant_shuffle(+ ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(c['Aq'].data_ptr()),ctypes.c_void_p(c['As'].data_ptr()),- ctypes.c_int(m),- ctypes.c_int(k),- ctypes.c_int(m_pad),- ctypes.c_int(ks_pad),- ctypes.c_int(A.stride(0)),- ctypes.c_int(c['Aq'].stride(0)),- ctypes.c_void_p(0),- )+ ctypes.c_int(m), ctypes.c_int(k), ctypes.c_int(m_pad), ctypes.c_int(ks_pad),+ ctypes.c_int(A.stride(0)), ctypes.c_int(c['Aq'].stride(0)),+ ctypes.c_void_p(0))+ return c['Aq'][:m].view(dtypes.fp4x2), c['As'].view(m_pad, ks_pad).view(dtypes.fp8_e8m0)- if err != 0:- return None-- # Return views matching what gemm_a4w4 expects- A_q = c['Aq'][:m].view(dtypes.fp4x2)- A_scale_sh = c['As'].view(m_pad, ks_pad).view(dtypes.fp8_e8m0)- return A_q, A_scale_sh--- def _python_quant_shuffle(A):- """Fallback: reference Python path."""- A_q, A_scale = dynamic_mxfp4_quant(A)- A_scale_sh = e8m0_shuffle(A_scale)- return A_q.view(dtypes.fp4x2), A_scale_sh.view(dtypes.fp8_e8m0)--- # ---- Identity cache ----+ # ---- Fallback ----_a_cache = None+ def _fallback_quant(A):+ global _a_cache+ if _a_cache is not None and _a_cache[0] is A:+ return _a_cache[1], _a_cache[2]+ Aq, As = dynamic_mxfp4_quant(A)+ Ash = e8m0_shuffle(As)+ r = (Aq.view(dtypes.fp4x2), Ash.view(dtypes.fp8_e8m0))+ _a_cache = (A, r[0], r[1])+ return r+ # ---- Entry ----def custom_kernel(data: input_t) -> output_t:- global _a_cacheA, B, B_q, B_shuffle, B_scale_sh = data+ m, k = A.shape+ n = B_q.shape[0]- if _a_cache is not None and _a_cache[0] is A:- A_q, A_scale_sh2 = _a_cache[1], _a_cache[2]+ if _lib is not None and k <= 1024:+ # Small K: fused single-launch kernel+ return _fused_gemm(A, B_q, B_scale_sh, m, n, k)++ if _lib is not None:+ # Large K: HIP quant+shuffle + ASM GEMM (2 launches)+ Aq, Ash = _hip_quant_shuffle(A, m, k)else:- # Try HIP fused kernel, fall back to Python- result = _hip_fused_quant_shuffle(A)- if result is None:- result = _python_quant_shuffle(A)- A_q, A_scale_sh2 = result- _a_cache = (A, A_q, A_scale_sh2)+ # Fallback: Python quant+shuffle+ Aq, Ash = _fallback_quant(A)- return aiter.gemm_a4w4(- A_q, B_shuffle, A_scale_sh2, B_scale_sh,- dtype=dtypes.bf16, bpreshuffle=True,- )+ return aiter.gemm_a4w4(Aq, B_shuffle, Ash, B_scale_sh, dtype=dtypes.bf16, bpreshuffle=True)
scrolls · 712 diff lines total
Best evidence level for this revision: reported
JSON