Skip to content
KernelIndex
Search⌘K

submission 5193

KernelBot user 160 · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 1 lines, June 9 Researcher Reciprocity License v1.0.

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-5193?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp32, fp8_e4m3fnuz

Benchmark evidence

18 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
53.6µs
#66 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 512]
AMD Instinct MI300X
58.9µs
#73 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
123.6µs
#82 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
200.2µs
#82 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
202.3µs
#81 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
239.6µs
#81 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
263.7µs
#81 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
415.7µs
#82 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
464.7µs
#94 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
474.6µs
#89 of 98
2025-04-19
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
494.6µs
#95 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
534.0µs
#80 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
544.0µs
#80 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
551.3µs
#82 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
967.9µs
#81 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
1.17ms
#81 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
1.30ms
#81 of 98
2025-04-19
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
2.65ms
#81 of 98
2025-04-19

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:ac16c4488f936ef8b02599390c8ecbf26b3a86809ddc0e7f23c82bdd0dba026d
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNLAogICAgICAgICAgY29uc3Qgc2l6ZV90IFdJVEVSTiwgY29uc3Qgc2l6ZV90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkIGZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKkFfc2NhbGUsIGNvbnN0IGZsb2F0ICpCX3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqQywgc2l6ZV90IE4sIHNpemVfdCBLLCBzaXplX3QgTSkgewogIHVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKCiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdBUlBTSVpFID0gNjQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV04gPSAzMiAqIFdJVEVSTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVRocmVhZHMgPSAoQk4gKiBCTSkgLyAxNjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVBID0gKG51bVRocmVhZHMgLyAoQk4gLyBWRUNUT1JfU0laRSkpOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cmlkZUIgPSAobnVtVGhyZWFkcyAvIChCTSAvIFZFQ1RPUl9TSVpFKSk7CgogIHNpemVfdCByb3dPZmZzZXRDID0gYmxvY2tJZHgueSAqIEJOOwogIHNpemVfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHNpemVfdCBjb2xPZmZzZXRBID0gcm93T2Zmc2V0QzsKICBzaXplX3QgY29sT2Zmc2V0QiA9IGNvbE9mZnNldEM7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJOIDw9IDEyOCAmJiBCSyA8PSAxMjggJiYgQk0gPD0gMTI4LAogICAgICAgICAgICAgICAgIlJhbmdlIGFib3ZlIDEyOCBpcyBub3Qgc3VwcG9ydGVkIik7CgogIHNpemVfdCBpbm5lckNvbEEgPSB0aHJlYWRJZHgueCAlIChCTiAvIFZFQ1RPUl9TSVpFKTsKICBzaXplX3QgaW5uZXJSb3dBID0gdGhyZWFkSWR4LnggLyAoQk4gLyBWRUNUT1JfU0laRSk7CiAgc2l6ZV90IGlubmVyQ29sQiA9IHRocmVhZElkeC54ICUgKEJNIC8gVkVDVE9SX1NJWkUpOwogIHNpemVfdCBpbm5lclJvd0IgPSB0aHJlYWRJZHgueCAvIChCTSAvIFZFQ1RPUl9TSVpFKTsKCiAgc2l6ZV90IGxhbmVJZHggPSB0aHJlYWRJZHgueCAlIFdBUlBTSVpFOwogIHNpemVfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICBzaXplX3Qgd2FycENvbE9mZnNldCA9ICh3YXJwSWR4ICUgKEJNIC8gV00pKSAqIFdNOwogIHNpemVfdCB3YXJwUm93T2Zmc2V0ID0gKHdhcnBJZHggLyAoQk0gLyBXTSkpICogV047CiAgc2l6ZV90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHNpemVfdCB3YXJwWSA9IGxhbmVJZHggLyAzMjsKCiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IEFzW0JLXVtCTl0sIEJzW0JLXVtCTV07CiAgX19zaGFyZWRfXyBmbG9hdCBXc1tCTiArIDFdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IGFbV0lURVJOXVs4XSwgYltXSVRFUk1dWzhdOwogIGZsb2F0eDE2IGRbV0lURVJOXVtXSVRFUk1dID0gezB9OwoKICBmb3IgKHNpemVfdCB0aWxlT2Zmc2V0ID0gMDsgdGlsZU9mZnNldCA8IEs7IHRpbGVPZmZzZXQgKz0gQkspIHsKICAgIC8vIGxvYWQgZnJvbSBnbG9iYWwgdG8gc2hhcmVkIG1lbW9yeSBpbiBjb2FsZXNjZWQgbWFubmVyCiAgICBmb3IgKHNpemVfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSyAmJgogICAgICAgICAgKGlubmVyQ29sQSAqIFZFQ1RPUl9TSVpFKSA8IEJOKSB7CiAgICAgICAgZmxvYXQgdG1wID0KICAgICAgICAgICAgKihmbG9hdCAqKSZBWyh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAqIE4gKwogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldOwogICAgICAgICooZmxvYXQgKikmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0gPQogICAgICAgICAgICB0bXA7CiAgICAgICAgaWYgKHRocmVhZElkeC54IDwgKEJOIC8gVkVDVE9SX1NJWkUpKSB7CiAgICAgICAgICBmbG9hdDQgdG1wID0KICAgICAgICAgICAgICAqKGZsb2F0NCAqKSZBX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLX0RJTSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldOwogICAgICAgICAgKihmbG9hdDQgKikmV3NbdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRV0gPSB0bXA7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgQk4pIHsKICAgICAgICAqKGZsb2F0ICopJkFzW2lubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QV1baW5uZXJDb2xBICogVkVDVE9SX1NJWkVdID0KICAgICAgICAgICAgMC4wZjsKICAgICAgfQogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgIGZsb2F0IHRtcCA9CiAgICAgICAgICAgICooZmxvYXQgKikmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRCICsgaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpXTsKICAgICAgICAqKGZsb2F0ICopJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdID0KICAgICAgICAgICAgdG1wOwogICAgICAgIGlmICh0aHJlYWRJZHgueCA9PSBCTikgewogICAgICAgICAgV3NbQk5dID0KICAgICAgICAgICAgICBCX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgLyBCTE9DS19ESU0pICoKICAgICAgICAgICAgICAgICAgICAgICAgICBjZGl2KE0sIEJMT0NLX0RJTSkgKwogICAgICAgICAgICAgICAgICAgICAgKChjb2xPZmZzZXRCICsgaW5uZXJDb2xCKSAvIEJMT0NLX0RJTSldOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICgoaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCKSA8IEJLICYmCiAgICAgICAgICAgICAgICAgKGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IEJNKSB7CiAgICAgICAgKihmbG9hdCAqKSZCc1tpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0JdW2lubmVyQ29sQiAqIFZFQ1RPUl9TSVpFXSA9CiAgICAgICAgICAgIDAuMGY7CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZm9yIChzaXplX3QgQktPZmZzZXQgPSAwOyBCS09mZnNldCA8IEJLOyBCS09mZnNldCArPSAxNikgewojcHJhZ21hIHVucm9sbCAyCiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiNwcmFnbWEgdW5yb2xsIDIKICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgODsgKytpKSB7CiAgICAgICAgICBiW3dtXVtpXSA9CiAgICAgICAgICAgICAgQnNbQktPZmZzZXQgKyB3YXJwWSAqIDggKyBpXVt3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKI3ByYWdtYSB1bnJvbGwgNAogICAgICBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgICAgZmxvYXR4MTYgYyA9IHswfTsKICAgICAgICAgIGMgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzMyeDMyeDE2X2ZwOF9mcDgoCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihhKSwgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihiKSwgYywgMCwKICAgICAgICAgICAgICAwLCAwKTsKICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICAgICAgZFt3bl1bd21dW2kgKyBqICogNF0gKz0KICAgICAgICAgICAgICAgICAgY1tpICsgaiAqIDRdICoKICAgICAgICAgICAgICAgICAgV3Nbd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGldICogYl9zY2FsZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIF9fc3luY3RocmVhZHMoKTsKICB9CgojcHJhZ21hIHVucm9sbCA0CiAgZm9yIChzaXplX3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICBpZiAoKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8IE4gJiYKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3YXJwWCkgPCBNKQogICAgICAgICAgICBDWyhyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpICoKICAgICAgICAgICAgICAgICAgTSArCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKV0gPQogICAgICAgICAgICAgICAgKF9faGlwX2JmbG9hdDE2KWRbd25dW3dtXVtpICsgaiAqIDRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpIHsKICBzaXplX3QgTiA9IEEuc2l6ZSgwKSwgSyA9IEEuc2l6ZSgxKSwgTSA9IEIuc2l6ZSgwKTsKCiAgY29uc3Qgc2l6ZV90IEJLID0gMTY7CiAgY29uc3Qgc2l6ZV90IEJOID0gNjQ7CiAgY29uc3Qgc2l6ZV90IEJNID0gNjQ7CiAgY29uc3Qgc2l6ZV90IFdJVEVSTiA9IDE7CiAgY29uc3Qgc2l6ZV90IFdJVEVSTSA9IDE7CiAgZGltMyBudW1UaHJlYWRzKChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSkpOwogIGRpbTMgbnVtQmxvY2tzKGNkaXYoTSwgQk0pLCBjZGl2KE4sIEJOKSk7CiAgZnA4X21tX2tlcm5lbDxCTiwgQkssIEJNLCBXSVRFUk4sIFdJVEVSTT48PDxudW1CbG9ja3MsIG51bVRocmVhZHM+Pj4oCiAgICAgIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUIuZGF0YV9wdHIoKSwKICAgICAgQV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwgQl9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgKF9faGlwX2JmbG9hdDE2ICopQy5kYXRhX3B0cigpLCBOLCBLLCBNKTsKICByZXR1cm4gQzsKfQoiIiIKCmNwcF9zcmMgPSByIiIiCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKTsKIiIiCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItTzMiLCAiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==

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 5109.

- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNPgpfX2dsb2JhbF9fIHZvaWQgZnA4X21tX2tlcm5lbChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqQV9zY2FsZSwgY29uc3QgZmxvYXQgKkJfc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpDLCBzaXplX3QgTiwgc2l6ZV90IEssIHNpemVfdCBNKSB7CiAgdXNpbmcgZmxvYXR4MTYgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0OwoKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBWRUNUT1JfU0laRSA9IDQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV0FSUFNJWkUgPSA2NDsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1UaHJlYWRzID0gKEJOICogQk0pIC8gMTY7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc3RyaWRlQSA9IChudW1UaHJlYWRzIC8gKEJOIC8gVkVDVE9SX1NJWkUpKTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVCID0gKG51bVRocmVhZHMgLyAoQk0gLyBWRUNUT1JfU0laRSkpOwoKICBzaXplX3Qgcm93T2Zmc2V0QyA9IGJsb2NrSWR4LnkgKiBCTjsKICBzaXplX3QgY29sT2Zmc2V0QyA9IGJsb2NrSWR4LnggKiBCTTsKICBzaXplX3QgY29sT2Zmc2V0QSA9IHJvd09mZnNldEM7CiAgc2l6ZV90IGNvbE9mZnNldEIgPSBjb2xPZmZzZXRDOwoKICBzdGF0aWNfYXNzZXJ0KG51bVRocmVhZHMgJSBCTiA9PSAwLCAiQk4gc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgbnVtVGhyZWFkcyIpOwogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChCTiA8PSAxMjggJiYgQksgPD0gMTI4ICYmIEJNIDw9IDEyOCwKICAgICAgICAgICAgICAgICJSYW5nZSBhYm92ZSAxMjggaXMgbm90IHN1cHBvcnRlZCIpOwoKICBzaXplX3QgaW5uZXJDb2xBID0gdGhyZWFkSWR4LnggJSAoQk4gLyBWRUNUT1JfU0laRSk7CiAgc2l6ZV90IGlubmVyUm93QSA9IHRocmVhZElkeC54IC8gKEJOIC8gVkVDVE9SX1NJWkUpOwogIHNpemVfdCBpbm5lckNvbEIgPSB0aHJlYWRJZHgueCAlIChCTSAvIFZFQ1RPUl9TSVpFKTsKICBzaXplX3QgaW5uZXJSb3dCID0gdGhyZWFkSWR4LnggLyAoQk0gLyBWRUNUT1JfU0laRSk7CgogIHNpemVfdCBsYW5lSWR4ID0gdGhyZWFkSWR4LnggJSBXQVJQU0laRTsKICBzaXplX3Qgd2FycElkeCA9IHRocmVhZElkeC54IC8gV0FSUFNJWkU7CiAgc2l6ZV90IHdhcnBDb2xPZmZzZXQgPSAod2FycElkeCAlIChCTSAvIDMyKSkgKiAzMjsKICBzaXplX3Qgd2FycFJvd09mZnNldCA9ICh3YXJwSWR4IC8gKEJNIC8gMzIpKSAqIDMyOwogIHNpemVfdCB3YXJwWCA9IGxhbmVJZHggJSAzMjsKICBzaXplX3Qgd2FycFkgPSBsYW5lSWR4IC8gMzI7CgogIF9fc2hhcmVkX18gX19oaXBfZnA4X2U0bTNfZm51eiBBc1tCS11bQk5dLCBCc1tCS11bQk1dOwogIF9fc2hhcmVkX18gZmxvYXQgV3NbQk4gKyAxXTsKCiAgX19oaXBfZnA4X2U0bTNfZm51eiBhWzhdLCBiWzhdOwogIGZsb2F0eDE2IGQgPSB7MH07CgogIGZvciAoc2l6ZV90IHRpbGVPZmZzZXQgPSAwOyB0aWxlT2Zmc2V0IDwgSzsgdGlsZU9mZnNldCArPSBCSykgewogICAgLy8gbG9hZCBmcm9tIGdsb2JhbCB0byBzaGFyZWQgbWVtb3J5IGluIGNvYWxlc2NlZCBtYW5uZXIKICAgIGZvciAoc2l6ZV90IGlubmVyUm93T2Zmc2V0QSA9IDA7IGlubmVyUm93T2Zmc2V0QSA8IEJLOwogICAgICAgICBpbm5lclJvd09mZnNldEEgKz0gc3RyaWRlQSkgewogICAgICBpZiAoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgSyAmJgogICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSkgPCBOICYmCiAgICAgICAgICAoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLICYmCiAgICAgICAgICAoaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgQk4pIHsKICAgICAgICBfX2hpcF9mcDh4NF9lNG0zX2ZudXogdG1wID0KICAgICAgICAgICAgKihfX2hpcF9mcDh4NF9lNG0zX2ZudXoKICAgICAgICAgICAgICAgICAgKikmQVsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgKiBOICsKICAgICAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QSArIGlubmVyQ29sQSAqIFZFQ1RPUl9TSVpFKV07CiAgICAgICAgKihfX2hpcF9mcDh4NF9lNG0zX2ZudXogKikmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSA9IHRtcDsKICAgICAgICBpZiAodGhyZWFkSWR4LnggPCAoQk4gLyBWRUNUT1JfU0laRSkpIHsKICAgICAgICAgIGZsb2F0NCB0bXAgPQogICAgICAgICAgICAgICooZmxvYXQ0ICopJkFfc2NhbGVbKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QSArIGlubmVyQ29sQSAqIFZFQ1RPUl9TSVpFKV07CiAgICAgICAgICAqKGZsb2F0NCAqKSZXc1t0aHJlYWRJZHgueCAqIFZFQ1RPUl9TSVpFXSA9IHRtcDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSyAmJgogICAgICAgICAgICAgICAgIChpbm5lckNvbEEgKiBWRUNUT1JfU0laRSkgPCBCTikgewogICAgICAgICooX19oaXBfZnA4eDRfZTRtM19mbnV6ICopJkFzW2lubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0gPQogICAgICAgICAgICBmbG9hdDR7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CiAgICAgIH0KICAgIH0KICAgIGZvciAoc2l6ZV90IGlubmVyUm93T2Zmc2V0QiA9IDA7IGlubmVyUm93T2Zmc2V0QiA8IEJLOwogICAgICAgICBpbm5lclJvd09mZnNldEIgKz0gc3RyaWRlQikgewogICAgICBpZiAoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgSyAmJgogICAgICAgICAgKGNvbE9mZnNldEIgKyBpbm5lckNvbEIpIDwgTSAmJiAoaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCKSA8IEJLICYmCiAgICAgICAgICAoaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpIDwgQk0pIHsKICAgICAgICBfX2hpcF9mcDh4NF9lNG0zX2ZudXogdG1wID0KICAgICAgICAgICAgKihfX2hpcF9mcDh4NF9lNG0zX2ZudXoKICAgICAgICAgICAgICAgICAgKikmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKV07CiAgICAgICAgKihfX2hpcF9mcDh4NF9lNG0zX2ZudXogKikmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVyQ29sQiAqIFZFQ1RPUl9TSVpFXSA9IHRtcDsKICAgICAgICBpZiAodGhyZWFkSWR4LnggPT0gQk4pIHsKICAgICAgICAgIFdzW0JOXSA9CiAgICAgICAgICAgICAgQl9zY2FsZVsoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIC8gQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2RpdihNLCBCTE9DS19ESU0pICsKICAgICAgICAgICAgICAgICAgICAgICgoY29sT2Zmc2V0QiArIGlubmVyQ29sQikgLyBCTE9DS19ESU0pXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBCSyAmJgogICAgICAgICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICooX19oaXBfZnA4eDRfZTRtM19mbnV6ICopJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0gPQogICAgICAgICAgICBmbG9hdDR7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZm9yIChzaXplX3QgQktPZmZzZXQgPSAwOyBCS09mZnNldCA8IEJLOyBCS09mZnNldCArPSAxNikgewogICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgIGFbaV0gPSBBc1tCS09mZnNldCArIHdhcnBZICogOCArIGldW3dhcnBSb3dPZmZzZXQgKyB3YXJwWF07CiAgICAgICAgYltpXSA9IEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdhcnBYXTsKICAgICAgfQogICAgICBmbG9hdHgxNiBjID0gezB9OwogICAgICBjID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KAogICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihhKSwgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihiKSwgYywgMCwgMCwKICAgICAgICAgIDApOwogICAgICBmbG9hdCBiX3NjYWxlID0gV3NbQk5dOwojcHJhZ21hIHVucm9sbCAyCiAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgIGRbaSArIGogKiA0XSArPSBjW2kgKyBqICogNF0gKgogICAgICAgICAgICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyBqICogOCArIHdhcnBZICogNCArIGldICogYl9zY2FsZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKI3ByYWdtYSB1bnJvbGwgMgogIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICBpZiAoKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8IE4gJiYKICAgICAgICAgIChjb2xPZmZzZXRDICsgd2FycENvbE9mZnNldCArIHdhcnBYKSA8IE0pCiAgICAgICAgQ1socm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyBqICogOCArIHdhcnBZICogNCArIGkpICogTSArCiAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3YXJwWCldID0gKF9faGlwX2JmbG9hdDE2KWRbaSArIGogKiA0XTsKICAgIH0KICB9Cn0KCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKSB7CiAgc2l6ZV90IE4gPSBBLnNpemUoMCksIEsgPSBBLnNpemUoMSksIE0gPSBCLnNpemUoMCk7CgogIGNvbnN0IHNpemVfdCBCSyA9IDE2OwogIGNvbnN0IHNpemVfdCBCTiA9IDY0OwogIGNvbnN0IHNpemVfdCBCTSA9IDY0OwogIGRpbTMgbnVtVGhyZWFkcygoQk4gKiBCTSkgLyAxNik7CiAgZGltMyBudW1CbG9ja3MoY2RpdihNLCBCTSksIGNkaXYoTiwgQk4pKTsKICBmcDhfbW1fa2VybmVsPEJOLCBCSywgQk0+PDw8bnVtQmxvY2tzLCBudW1UaHJlYWRzPj4+KAogICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilCLmRhdGFfcHRyKCksCiAgICAgIEFfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksIEJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgIChfX2hpcF9iZmxvYXQxNiAqKUMuZGF0YV9wdHIoKSwgTiwgSywgTSk7CiAgcmV0dXJuIEM7Cn0KIiIiCgpjcHBfc3JjID0gciIiIgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQyk7CiIiIgoKbW9kdWxlID0gbG9hZF9pbmxpbmUoCiAgICBuYW1lPSJmcDhfbW0iLAogICAgY3BwX3NvdXJjZXM9W2NwcF9zcmNdLAogICAgY3VkYV9zb3VyY2VzPVtjdWRhX3NyY10sCiAgICBmdW5jdGlvbnM9WyJmcDhfbW0iXSwKICAgIHZlcmJvc2U9VHJ1ZSwKICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLU8zIiwgIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIl0sCikKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMgPSBkYXRhCiAgICByZXR1cm4gbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQo=
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNLAogICAgICAgICAgY29uc3Qgc2l6ZV90IFdJVEVSTiwgY29uc3Qgc2l6ZV90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkIGZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKkFfc2NhbGUsIGNvbnN0IGZsb2F0ICpCX3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqQywgc2l6ZV90IE4sIHNpemVfdCBLLCBzaXplX3QgTSkgewogIHVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKCiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdBUlBTSVpFID0gNjQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV04gPSAzMiAqIFdJVEVSTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVRocmVhZHMgPSAoQk4gKiBCTSkgLyAxNjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVBID0gKG51bVRocmVhZHMgLyAoQk4gLyBWRUNUT1JfU0laRSkpOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cmlkZUIgPSAobnVtVGhyZWFkcyAvIChCTSAvIFZFQ1RPUl9TSVpFKSk7CgogIHNpemVfdCByb3dPZmZzZXRDID0gYmxvY2tJZHgueSAqIEJOOwogIHNpemVfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHNpemVfdCBjb2xPZmZzZXRBID0gcm93T2Zmc2V0QzsKICBzaXplX3QgY29sT2Zmc2V0QiA9IGNvbE9mZnNldEM7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJOIDw9IDEyOCAmJiBCSyA8PSAxMjggJiYgQk0gPD0gMTI4LAogICAgICAgICAgICAgICAgIlJhbmdlIGFib3ZlIDEyOCBpcyBub3Qgc3VwcG9ydGVkIik7CgogIHNpemVfdCBpbm5lckNvbEEgPSB0aHJlYWRJZHgueCAlIChCTiAvIFZFQ1RPUl9TSVpFKTsKICBzaXplX3QgaW5uZXJSb3dBID0gdGhyZWFkSWR4LnggLyAoQk4gLyBWRUNUT1JfU0laRSk7CiAgc2l6ZV90IGlubmVyQ29sQiA9IHRocmVhZElkeC54ICUgKEJNIC8gVkVDVE9SX1NJWkUpOwogIHNpemVfdCBpbm5lclJvd0IgPSB0aHJlYWRJZHgueCAvIChCTSAvIFZFQ1RPUl9TSVpFKTsKCiAgc2l6ZV90IGxhbmVJZHggPSB0aHJlYWRJZHgueCAlIFdBUlBTSVpFOwogIHNpemVfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICBzaXplX3Qgd2FycENvbE9mZnNldCA9ICh3YXJwSWR4ICUgKEJNIC8gV00pKSAqIFdNOwogIHNpemVfdCB3YXJwUm93T2Zmc2V0ID0gKHdhcnBJZHggLyAoQk0gLyBXTSkpICogV047CiAgc2l6ZV90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHNpemVfdCB3YXJwWSA9IGxhbmVJZHggLyAzMjsKCiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IEFzW0JLXVtCTl0sIEJzW0JLXVtCTV07CiAgX19zaGFyZWRfXyBmbG9hdCBXc1tCTiArIDFdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IGFbV0lURVJOXVs4XSwgYltXSVRFUk1dWzhdOwogIGZsb2F0eDE2IGRbV0lURVJOXVtXSVRFUk1dID0gezB9OwoKICBmb3IgKHNpemVfdCB0aWxlT2Zmc2V0ID0gMDsgdGlsZU9mZnNldCA8IEs7IHRpbGVPZmZzZXQgKz0gQkspIHsKICAgIC8vIGxvYWQgZnJvbSBnbG9iYWwgdG8gc2hhcmVkIG1lbW9yeSBpbiBjb2FsZXNjZWQgbWFubmVyCiAgICBmb3IgKHNpemVfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSyAmJgogICAgICAgICAgKGlubmVyQ29sQSAqIFZFQ1RPUl9TSVpFKSA8IEJOKSB7CiAgICAgICAgZmxvYXQgdG1wID0KICAgICAgICAgICAgKihmbG9hdCAqKSZBWyh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAqIE4gKwogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldOwogICAgICAgICooZmxvYXQgKikmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0gPQogICAgICAgICAgICB0bXA7CiAgICAgICAgaWYgKHRocmVhZElkeC54IDwgKEJOIC8gVkVDVE9SX1NJWkUpKSB7CiAgICAgICAgICBmbG9hdDQgdG1wID0KICAgICAgICAgICAgICAqKGZsb2F0NCAqKSZBX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLX0RJTSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldOwogICAgICAgICAgKihmbG9hdDQgKikmV3NbdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRV0gPSB0bXA7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgQk4pIHsKICAgICAgICAqKGZsb2F0ICopJkFzW2lubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QV1baW5uZXJDb2xBICogVkVDVE9SX1NJWkVdID0KICAgICAgICAgICAgMC4wZjsKICAgICAgfQogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgIGZsb2F0IHRtcCA9CiAgICAgICAgICAgICooZmxvYXQgKikmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRCICsgaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpXTsKICAgICAgICAqKGZsb2F0ICopJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdID0KICAgICAgICAgICAgdG1wOwogICAgICAgIGlmICh0aHJlYWRJZHgueCA9PSBCTikgewogICAgICAgICAgV3NbQk5dID0KICAgICAgICAgICAgICBCX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgLyBCTE9DS19ESU0pICoKICAgICAgICAgICAgICAgICAgICAgICAgICBjZGl2KE0sIEJMT0NLX0RJTSkgKwogICAgICAgICAgICAgICAgICAgICAgKChjb2xPZmZzZXRCICsgaW5uZXJDb2xCKSAvIEJMT0NLX0RJTSldOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICgoaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCKSA8IEJLICYmCiAgICAgICAgICAgICAgICAgKGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IEJNKSB7CiAgICAgICAgKihmbG9hdCAqKSZCc1tpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0JdW2lubmVyQ29sQiAqIFZFQ1RPUl9TSVpFXSA9CiAgICAgICAgICAgIDAuMGY7CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZm9yIChzaXplX3QgQktPZmZzZXQgPSAwOyBCS09mZnNldCA8IEJLOyBCS09mZnNldCArPSAxNikgewojcHJhZ21hIHVucm9sbCAyCiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiNwcmFnbWEgdW5yb2xsIDIKICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgODsgKytpKSB7CiAgICAgICAgICBiW3dtXVtpXSA9CiAgICAgICAgICAgICAgQnNbQktPZmZzZXQgKyB3YXJwWSAqIDggKyBpXVt3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKI3ByYWdtYSB1bnJvbGwgNAogICAgICBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgICAgZmxvYXR4MTYgYyA9IHswfTsKICAgICAgICAgIGMgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzMyeDMyeDE2X2ZwOF9mcDgoCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihhKSwgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihiKSwgYywgMCwKICAgICAgICAgICAgICAwLCAwKTsKICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICAgICAgZFt3bl1bd21dW2kgKyBqICogNF0gKz0KICAgICAgICAgICAgICAgICAgY1tpICsgaiAqIDRdICoKICAgICAgICAgICAgICAgICAgV3Nbd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGldICogYl9zY2FsZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIF9fc3luY3RocmVhZHMoKTsKICB9CgojcHJhZ21hIHVucm9sbCA0CiAgZm9yIChzaXplX3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICBpZiAoKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8IE4gJiYKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3YXJwWCkgPCBNKQogICAgICAgICAgICBDWyhyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpICoKICAgICAgICAgICAgICAgICAgTSArCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKV0gPQogICAgICAgICAgICAgICAgKF9faGlwX2JmbG9hdDE2KWRbd25dW3dtXVtpICsgaiAqIDRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpIHsKICBzaXplX3QgTiA9IEEuc2l6ZSgwKSwgSyA9IEEuc2l6ZSgxKSwgTSA9IEIuc2l6ZSgwKTsKCiAgY29uc3Qgc2l6ZV90IEJLID0gMTY7CiAgY29uc3Qgc2l6ZV90IEJOID0gNjQ7CiAgY29uc3Qgc2l6ZV90IEJNID0gNjQ7CiAgY29uc3Qgc2l6ZV90IFdJVEVSTiA9IDE7CiAgY29uc3Qgc2l6ZV90IFdJVEVSTSA9IDE7CiAgZGltMyBudW1UaHJlYWRzKChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSkpOwogIGRpbTMgbnVtQmxvY2tzKGNkaXYoTSwgQk0pLCBjZGl2KE4sIEJOKSk7CiAgZnA4X21tX2tlcm5lbDxCTiwgQkssIEJNLCBXSVRFUk4sIFdJVEVSTT48PDxudW1CbG9ja3MsIG51bVRocmVhZHM+Pj4oCiAgICAgIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUIuZGF0YV9wdHIoKSwKICAgICAgQV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwgQl9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgKF9faGlwX2JmbG9hdDE2ICopQy5kYXRhX3B0cigpLCBOLCBLLCBNKTsKICByZXR1cm4gQzsKfQoiIiIKCmNwcF9zcmMgPSByIiIiCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKTsKIiIiCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItTzMiLCAiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==
No newline at end of file

Best evidence level for this revision: reported

JSON