Name: series-workflowzxvqv Phase: Succeeded StartedAt: 2026-08-16 01:09:37 +0000 UTC FinishedAt: 2026-08-16 03:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[0] Phase: Succeeded StartedAt: 2026-08-16 01:09:37 +0000 UTC FinishedAt: 2026-08-16 01:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 01:09:37 +0000 UTC FinishedAt: 2026-08-16 01:53:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3eb40771c00a8488fa6ed2cc1fe203477908bf38", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3eb40771c00a8488fa6ed2cc1fe203477908bf38", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP", "IPV6" ], "series_id": "66ec2139-b0b2-441d-a374-83fe0d6f009f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nvme_tcp_create_ctrl", "nvmet_tcp_add_port", "nvmet_tcp_accept_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV90Y3BfY3JlYXRlX2N0cmwmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O252bWV0X3RjcF9hY2NlcHRfd29yayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBjYWxscyB0byBzb2NrZXQgb3B0aW9uIGhlbHBlcnMgKGxpa2UgYHNvY2tfbm9fbGluZ2VyYCwgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgZXRjLikgd2l0aCBjdXN0b20gd3JhcHBlcnMgdGhhdCB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBLRVJORUxfU09DS1BUUmAuIEFsbCBsb2NhbCB2YXJpYWJsZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIChzdWNoIGFzIGBzdHJ1Y3QgbGluZ2VyIGxpbmdgLCBgaW50IHZhbGAsIGB1MzIgcHJpb3JpdHlgLCBgdTggdG9zYCwgYHU4IHRjbGFzc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBpcyBubyBwYWRkaW5nIGluIHRoZXNlIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5LCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxNzRkNmU0OTYxOGMyZjYzZTNjZDRkMjFkNmY4ODZlYTUzZDQwNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG5pbmRleCBiYTVjN2IzZTJhN2M2Li42NTdhY2FlOWU0YTQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG5AQCAtMTc3NCw2ICYjNDM7MTc3NCw1NiBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuJiM0MztcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXG4mIzQzO3tcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4mIzQzO1x0XHRcdCAgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHN0cnVjdCBzb2NrICpzaywgY2hhciAqaWZhY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4mIzQzO1x0XHRcdFx0ICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSxcbiYjNDM7XHRcdFx0XHQgIHN0cmxlbihpZmFjZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSAxO1xuJiM0MztcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4mIzQzO1x0XHRcdCAgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfU1lOQ05ULFxuJiM0MztcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdG9zKVxuJiM0Mzt7XG4mIzQzO1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4mIzQzO1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbiYjNDM7XHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4mIzQzO1x0XHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dGNsYXNzKSwgc2l6ZW9mKHRjbGFzcykpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFx0XHRcdFx0a2V5X3NlcmlhbF90IHBza2lkKVxuIHtcbkBAIC0xODE5LDI0ICYjNDM7MTg2OSwyNiBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuICNlbmRpZlxuIFxuIFx0LyogU2luZ2xlIHN5biByZXRyeSAqL1xuLVx0dGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCAxKTtcbiYjNDM7XHRudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4gXG4gXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFxuIFx0LypcbiBcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxuIFx0ICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZFxuIFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cbiBcdCAqL1xuLVx0c29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0bnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4gXG4gXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApXG4tXHRcdHNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiYjNDM7XHRcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuJiM0MztcdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyk7XG4mIzQzO1x0XHRudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovXG4gXHRxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcbkBAIC0xODY0LDEwICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXG4gXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2VtYXNrIFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XG4gXHRcdGNoYXIgKmlmYWNlID0gbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2Vob3N0X2lmYWNlO1xuLVx0XHRzb2NrcHRyX3Qgb3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoaWZhY2UpO1xuIFxuLVx0XHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXHUwMDNlc29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLFxuLVx0XHRcdFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcbiYjNDM7XHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwmIzM0O2ZhaWxlZCB0byBiaW5kIHRvIGludGVyZmFjZSAlcyBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbmluZGV4IDc1YTI3NmQ3M2JlM2UuLmQzNDI0OWNmMzc1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5AQCAtMTY5NiwxMCAmIzQzOzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuJiM0MztcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuJiM0Mzt7XG4mIzQzO1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSBTS19DQU5fUkVVU0U7XG4mIzQzO1xuJiM0MztcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsXG4mIzQzO1x0XHRcdCAgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IDE7XG4mIzQzO1xuJiM0MztcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbiYjNDM7XHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHU4IHRvcyA9IGluZXRfc2soc2spLVx1MDAzZXJjdl90b3M7XG4mIzQzO1xuJiM0MztcdGlmICh0b3MgXHUwMDNlIDApXG4mIzQzO1x0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4mIzQzO1x0XHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHR1OCB0Y2xhc3MgPSBpcDZfdGNsYXNzKGluZXQ2X3NrKHNrKS1cdTAwM2VyY3ZfZmxvd2luZm8pO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0Y2xhc3MgXHUwMDNlIDApXG4mIzQzO1x0XHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbiYjNDM7XHRcdFx0XHRcdCAgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuJiM0MztcdFx0XHRcdFx0ICAgc2l6ZW9mKHRjbGFzcykpO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jayA9IHF1ZXVlLVx1MDAzZXNvY2s7XG4tXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLVx1MDAzZXNrKTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jayxcbkBAIC0xNzE3LDE0ICYjNDM7MTc2OSwxNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuJiM0MztcdG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzb2NrLVx1MDAzZXNrKTtcbiBcbiBcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkoc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuJiM0MztcdFx0bnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAoaW5ldC1cdTAwM2VyY3ZfdG9zIFx1MDAzZSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2VzaywgaW5ldC1cdTAwM2VyY3ZfdG9zKTtcbiYjNDM7XHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2spO1xuJiM0MztcdG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc29jay1cdTAwM2Vzayk7XG4gXG4gXHRyZXQgPSAwO1xuIFx0d3JpdGVfbG9ja19iaChcdTAwMjZzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuQEAgLTIwOTgsMTAgJiM0MzsyMTUwLDEwIEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBwb3J0O1xuIFx0cG9ydC1cdTAwM2VkYXRhX3JlYWR5ID0gcG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcbi1cdHNvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuLVx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0bnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbiBcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0XHRudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4gXG4gXHRyZXQgPSBrZXJuZWxfYmluZChwb3J0LVx1MDAzZXNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNnBvcnQtXHUwMDNlYWRkcixcbiBcdFx0XHRzaXplb2YocG9ydC1cdTAwM2VhZGRyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV90Y3BfY3JlYXRlX2N0cmwmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O252bWV0X3RjcF9hY2NlcHRfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBvdmVyIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyB0byB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAgZm9yIHNldHRpbmcgc29ja2V0IG9wdGlvbnMgaW5zdGVhZCBvZiBkaXJlY3QgZnVuY3Rpb24gY2FsbHMuIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIHRoZSBgSVBWNl9UQ0xBU1NgIHNvY2tldCBvcHRpb24gZm9yIElQdjYgc29ja2V0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0d29yayBzb2NrZXQgY29uZmlndXJhdGlvbiBvZiB0aGUgTlZNZSBUQ1AgdHJhbnNwb3J0LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbnRyb2xsZXIgY3JlYXRpb24gYW5kIHBvcnQgYWRkaXRpb24gcGF0aHMgd2hlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMTc0ZDZlNDk2MThjMmY2M2UzY2Q0ZDIxZDZmODg2ZWE1M2Q0MDY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDE6NTA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO2xpbmcpLCBzaXplb2YobGluZykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSwKJiM0MzsJCQkJICBzdHJsZW4oaWZhY2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcykKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0b3MpLCBzaXplb2YodG9zKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikKJiM0MzsJCWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsIElQVjZfVENMQVNTLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RjbGFzcyksIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCQkJCWtleV9zZXJpYWxfdCBwc2tpZCkKIHsKQEAgLTE4MTksMjQgJiM0MzsxODY5LDI2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAjZW5kaWYKIAogCS8qIFNpbmdsZSBzeW4gcmV0cnkgKi8KLQl0Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgMSk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIDEpOwogCiAJLyogU2V0IFRDUCBubyBkZWxheSAqLwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCS8qCiAJICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0CiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApCi0JCWlwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwlpZiAobmN0cmwtJmd0O29wdHMtJmd0O3RvcyAmZ3Q7PSAwKSB7CiYjNDM7CQludm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtJmd0O3NvY2stJmd0O3NrLCBuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zKTsKJiM0MzsJCW52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwl9CiAKIAkvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqLwogCXF1ZXVlLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2dGltZW8gPSAxMCAqIEhaOwpAQCAtMTg2NCwxMCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCiAJaWYgKG5jdHJsLSZndDtvcHRzLSZndDttYXNrICZhbXA7IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHsKIAkJY2hhciAqaWZhY2UgPSBuY3RybC0mZ3Q7b3B0cy0mZ3Q7aG9zdF9pZmFjZTsKLQkJc29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTsKIAotCQlyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtJmd0O3NvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKLQkJCQkgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpOwomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgaWZhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiAJCQkgICYjMzQ7ZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwppbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTE2OTYsMTAgJiM0MzsxNjk2LDYyIEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKQogCXJlYWRfdW5sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7bGluZyksIHNpemVvZihsaW5nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSBTS19DQU5fUkVVU0U7CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwl1OCB0b3MgPSBpbmV0X3NrKHNrKS0mZ3Q7cmN2X3RvczsKJiM0MzsKJiM0MzsJaWYgKHRvcyAmZ3Q7IDApCiYjNDM7CQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RvcyksIHNpemVvZih0b3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikgewomIzQzOwkJdTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktJmd0O3Jjdl9mbG93aW5mbyk7CiYjNDM7CiYjNDM7CQlpZiAodGNsYXNzICZndDsgMCkKJiM0MzsJCQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUFY2LAomIzQzOwkJCQkJICAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKCZhbXA7dGNsYXNzKSwKJiM0MzsJCQkJCSAgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS0mZ3Q7c29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLSZndDtzayk7CiAJaW50IHJldDsKIAogCXJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLApAQCAtMTcxNywxNCAmIzQzOzE3NjksMTQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpCiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwogCiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkoc29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJLyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi8KLQlpZiAoaW5ldC0mZ3Q7cmN2X3RvcyAmZ3Q7IDApCi0JCWlwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzaywgaW5ldC0mZ3Q7cmN2X3Rvcyk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stJmd0O3NrKTsKIAogCXJldCA9IDA7CiAJd3JpdGVfbG9ja19iaCgmYW1wO3NvY2stJmd0O3NrLSZndDtza19jYWxsYmFja19sb2NrKTsKQEAgLTIwOTgsMTAgJiM0MzsyMTUwLDEwIEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydCkKIAlwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gcG9ydDsKIAlwb3J0LSZndDtkYXRhX3JlYWR5ID0gcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHk7CiAJcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7Ci0Jc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKLQl0Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkocG9ydC0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJcmV0ID0ga2VybmVsX2JpbmQocG9ydC0mZ3Q7c29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopJmFtcDtwb3J0LSZndDthZGRyLAogCQkJc2l6ZW9mKHBvcnQtJmd0O2FkZHIpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOVk1lIG92ZXIgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9udm1lL2hvc3QvdGNwLmNgIGFuZCBgZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBhIHNvY2tldCBvcHRpb24gb3ZlcmhhdWwsIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgY2FsbHMgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4sIHdpdGggYSBjdXN0b20gd3JhcHBlciB0aGF0IHVsdGltYXRlbHkgY2FsbHMgYGRvX3NvY2tfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gU2VlbXMgbGlrZSBhIG1vdmUgdG93YXJkIGEgbW9yZSBjZW50cmFsaXplZCBzb2NrZXQgb3B0aW9uIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHdoaWNoIGNvdWxkIG9mZmVyIGJlbmVmaXRzIGluIHRlcm1zIG9mIG1haW50YWluYWJpbGl0eSBhbmQgY29udHJvbC4gQWRkaW5nIGBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3NgIGFuZCBgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzc2AgdG8gc2V0IGBJUFY2X1RDTEFTU2AgaWYgdGhlIHNvY2tldCBpcyBJUHY2IGlzIGFsc28gYWRkZWQsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCgpGdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBjaGFuZ2VzIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCBhbmQgaXQgYWRkcyBJUHY2IHRyYWZmaWMgY2xhc3MgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB2aXJ0dWFsaXphdGlvbjsgY2FuIEkgcmVhc29uYWJseSByZXByb2R1Y2UgdGhpcyBpbiBhIHRlc3QgZW52aXJvbm1lbnQ/IFRoYW5rZnVsbHksIHRoZSB0ZXh0IGNvbmZpcm1zIHRoYXQgTlZNZSBvdmVyIFRDUCBpcyB0ZXN0YWJsZSB2aWEgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzIGluIFFFTVUsIHNvIHRoYXTigJlzIGEgcGx1cy4KCk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIGZvY3VzIG9uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AsIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YC4gU28sIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBuZXcgb3IgbW9kaWZpZWQgZnVuY3Rpb25zLiBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCBhcmUgd2hlcmUgSeKAmWxsIG5lZWQgdG8gcHV0IG15IGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYmxpbmQgc3BvdHMgSSBtaWdodCBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfdGNwX2FsbG9jX3F1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE4MTg9c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODI2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgyNzpzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cdFx0XHRcdGtleV9zZXJpYWxfdCBwc2tpZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMTM4PXN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTU2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE1NzpcdHJldCA9IG52bWVfdGNwX2FsbG9jX3F1ZXVlKGN0cmwsIDAsIHBza2lkKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNTgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIxNzI9c3RhdGljIGludCBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTctXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBjdHJsLVx1MDAzZXF1ZXVlX2NvdW50OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE5ODpcdFx0cmV0ID0gbnZtZV90Y3BfYWxsb2NfcXVldWUoY3RybCwgaSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTktXHRcdFx0XHRjdHJsLVx1MDAzZXRsc19wc2tpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5WTWUtb0YgVENQIFF1ZXVlIEFsbG9jYXRpb246IERpZ2dpbmcgRGVlcGVyKioKCk9rYXksIHNvIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FydmVzIG91dCB0aGUgcXVldWVzIGZvciBOVk1lIG92ZXIgVENQLCBnb3QgaXQuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgdGhlIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhvc3QgZHJpdmVyLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRvIHNldCB1cCB0aG9zZSBxdWV1ZXMgdG8gaGFuZGxlIGNvbW1hbmRzLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0cyBhcmUgYXNzb2NpYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzM4PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc1MS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTc1MjpzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc1My17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xODc2PXN0YXRpYyB2b2lkIG52bWV0X3RjcF90bHNfaGFuZHNoYWtlX2RvbmUodm9pZCAqZGF0YSwgaW50IHN0YXR1cyxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5MDAtXHRpZiAoIXN0YXR1cylcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTkwMTpcdFx0c3RhdHVzID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTkwMi1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE5NjM9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIwNDAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIwNDE6XHRyZXQgPSBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2socXVldWUpO1xuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDQyLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5WTWUvVENQIFF1ZXVlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUuIEkgcmVtZW1iZXIgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfZG9uZWAgYW5kIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgLiBUaGF0JiMzOTtzIHJpZ2h0LCB0aG9zZSBhcmUga2V5IGNvbXBvbmVudHMgd2l0aGluIHRoZSBOVk1lIG92ZXIgVENQIHRhcmdldCBkcml2ZXIuIFNvLCBiYXNpY2FsbHksIGl0JiMzOTtzIGNlbnRyYWwgdG8gc2V0dGluZyB1cCB0aGUgc29ja2V0IGNvbm5lY3Rpb24gZm9yIGEgcXVldWUuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG52bWV0X3RjcF9hZGRfcG9ydGAgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9hZGRfcG9ydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIwOTA9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDY6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTA3LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4Ni1cdC5tc2RiZFx0XHRcdD0gMSxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjI4NzpcdC5hZGRfcG9ydFx0XHQ9IG52bWV0X3RjcF9hZGRfcG9ydCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4OC1cdC5yZW1vdmVfcG9ydFx0XHQ9IG52bWV0X3RjcF9yZW1vdmVfcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgTlZNZSBvdmVyIFRDUCBUYXJnZXQ6IFRhcmdldGVkIEFyZWFzIGFuZCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudm1ldF90Y3BfYWRkX3BvcnRgLCB3aGljaCBpcyB0aGUgYGFkZF9wb3J0YCBjYWxsYmFjayBmb3IgdGhlIE5WTWUgb3ZlciBUQ1AgdGFyZ2V0LiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHdvcnRoIGZ1enppbmc/IEFuZCB0aGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseS4gSSBzZWUgY2hhbmdlcyBpbiBob3cgc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQsIGFuZCBhIG5ldyBzZXR0aW5nIGZvciBgSVBWNl9UQ0xBU1NgIGhhcyBiZWVuIGFkZGVkLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBhcmVhcyB0aGF0IGNvdWxkIGJlIHN1c2NlcHRpYmxlIHRvIHN1YnRsZSBidWdzLgoKU28sIHdoZXJlIHNob3VsZCBJIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cz8gSSBpbml0aWFsbHkgdGhvdWdodCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgLCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCwgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIHdlcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMuIEFoLCB3YWl0LCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgSSBjYW4gYWN0dWFsbHkgdHJpZ2dlciBmcm9tIHRoZSBvdXRzaWRlLiBPa2F5LCBhZnRlciBhIHF1aWNrIGxvb2ssIGl0IHNlZW1zIGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgaXMgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IGFzIGl0IGlzIGNhbGxlZCBmcm9tIGBudm1lX3RjcF9zZXR1cF9jdHJsYC4gVGhpcyBpcyB0aGUgb25lIHRvIHRhcmdldCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3Bfc2V0dXBfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDMxPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQzNS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0MzY6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQzNy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjUxOT1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTI3LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjUyODpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoY3RybCwgZmFsc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjUyOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjU4OT1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjYwOC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2MDk6XHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MTAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwNDQ9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfdGNwX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDYzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA2NDpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoXHUwMDI2Y3RybC1cdTAwM2VjdHJsLCB0cnVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwNjUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzYxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqTXkgUGVyc3BlY3RpdmUgb24gQ29udHJvbGxlciBDcmVhdGlvbiAobnZtZV90Y3BfY3JlYXRlX2N0cmwpKioKCkFscmlnaHQsIHNvIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhlcmUuIFRoaW5raW5nIGFib3V0IGl0LCB0aGlzIGlzIHRoZSBiaWcgb25lLCB0aGUgY29yZSBlbnRyeSBwb2ludC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLCB0aGUgc3RhcnRpbmcgZ3VuIGZvciBicmluZ2luZyBhIG5ldyBjb250cm9sbGVyIGludG8gZXhpc3RlbmNlLCBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZS4gSXQmIzM5O3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwIGZvciBhIE5WTWUvVENQIGNvbnRyb2xsZXIsIHJpZ2h0PyBFdmVyeXRoaW5nIGVsc2UgcHJvYmFibHkgZmxvd3MgZnJvbSB0aGlzIHBvaW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBraWNraW5nIG9mZiBhbGwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgdG8gZXN0YWJsaXNoIGEgZnVuY3Rpb25hbCBOVk1lIGNvbnRyb2xsZXIgaW5zdGFuY2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSAmIzM0O2hvdyYjMzQ7IG9mIG1ha2luZyB0aGluZ3Mgd29yaywgYW5kIGJlaW5nIHJlYWR5IHRvIHJlc3BvbmQgdG8gcmVxdWVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfdGNwX2NyZWF0ZV9jdHJsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI5NjI9c3RhdGljIHN0cnVjdCBudm1lX3RjcF9jdHJsICpudm1lX3RjcF9hbGxvY19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDQzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA0NDpzdGF0aWMgc3RydWN0IG52bWVfY3RybCAqbnZtZV90Y3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzA0NS1cdFx0c3RydWN0IG52bWZfY3RybF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwODY9c3RhdGljIHN0cnVjdCBudm1mX3RyYW5zcG9ydF9vcHMgbnZtZV90Y3BfdHJhbnNwb3J0ID0ge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwOTUtXHRcdFx0ICBOVk1GX09QVF9LRVlSSU5HIHwgTlZNRl9PUFRfVExTX0tFWSB8IE5WTUZfT1BUX0NPTkNBVCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMwOTY6XHQuY3JlYXRlX2N0cmxcdD0gbnZtZV90Y3BfY3JlYXRlX2N0cmwsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDk3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgRnV6emluZyBFZmZvcnRzIGluIE5WTWUtb0YgT3ZlciBUQ1AqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgdGhlIGZ1enppbmcgZWZmb3J0cyBmb3Igb3VyIE5WTWUtb0Ygb3ZlciBUQ1AgaW1wbGVtZW50YXRpb24uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIG5vdCBqdXN0IHNvbWUgaW50ZXJuYWwgZnVuY3Rpb24sIGJ1dCBhIGNydWNpYWwgZW50cnkgcG9pbnQg4oCTIGEgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciBgY3JlYXRlX2N0cmxgIHdpdGhpbiB0aGUgYG52bWZfdHJhbnNwb3J0X29wc2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlLiBBIHdlbGwtcGxhY2VkIGZ1enplciBoaXR0aW5nIHRoYXQgZnVuY3Rpb24gY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIGEgd2hvbGUgaG9zdCBvZiB2dWxuZXJhYmlsaXRpZXMsIGdpdmVuIGl0cyByb2xlIGluIGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zLiBJdCYjMzk7cyBhIGtleSBzcG90IGZvciBhdHRhY2sgc3VyZmFjZS4KCk9uIHRoZSB0YXJnZXQgc2lkZSwgSSBuZWVkIHRvIHJlbWVtYmVyIGBudm1ldF90Y3BfYWRkX3BvcnRgLiBJdCYjMzk7cyBhbHNvIGEgY2FsbGJhY2ssIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGludmVzdGlnYXRpb24gYW5kIHBvdGVudGlhbCBmdXp6aW5nIGFzIHdlbGwsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3NlcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA5MD1zdGF0aWMgdm9pZCBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwNS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjEwNjpzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDcte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIG52bWV0X3RjcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg2LVx0Lm1zZGJkXHRcdFx0PSAxLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMjg3Olx0LmFkZF9wb3J0XHRcdD0gbnZtZXRfdGNwX2FkZF9wb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg4LVx0LnJlbW92ZV9wb3J0XHRcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgTlZNZS1vRiBUQ1AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbnZtZXRfdGNwX2FkZF9wb3J0YCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHRoZSByZWdpc3RlcmVkIGBhZGRfcG9ydGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbnZtZXRfZmFicmljc19vcHNgIHN0cnVjdHVyZSwgc28gdGhhdCYjMzk7cyBpdHMgcHJpbWFyeSByb2xlLiBJdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgZm9yIHRoZSBUQ1AgdHJhbnNwb3J0LCBnb3QgaXQuIEl0IGhhbmRsZXMgdGhlIGluaXRpYWwgcG9ydCBzZXR1cCBmb3IgTlZNZSBvdmVyIFRDUCwgbGlua2luZyBpdCBpbnRvIHRoZSBmcmFtZXdvcmsuCgpOb3csIEkmIzM5O20gcGl2b3Rpbmcgc2xpZ2h0bHkgYW5kIHRoaW5raW5nIGFib3V0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBUaGF0IG1ldGhvZCwgaWYgbWVtb3J5IHNlcnZlcywgaXMgY2FsbGVkIGZyb20gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgc2V0cyB1cCB0aGUgYWN0dWFsIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBxdWV1ZS4gIFNvIHdlIGdvIGZyb20gcG9ydCB0byBxdWV1ZSB0byBzb2NrZXQsIGFuZCB0aGF0IHF1ZXVlIGlzIHRoZSBwaWVjZSB0aGF0IG1hcHMgdG8gYSBzcGVjaWZpYyBJL08gY29udGV4dC4gV2UgYXJlIHN0YXJ0aW5nIHRvIHB1dCB0b2dldGhlciB0aGUgZW50aXJlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1ldF90Y3BfYWxsb2NfcXVldWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xOTYwPXN0YXRpYyB2b2lkIG52bWV0X3RjcF90bHNfaGFuZHNoYWtlX3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3KSB7fVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTk2Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTk2MzpzdGF0aWMgdm9pZCBudm1ldF90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWV0X3RjcF9wb3J0ICpwb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTY0LVx0XHRzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA3Mj1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWNjZXB0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA4NS1cdFx0fVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMDg2Olx0XHRudm1ldF90Y3BfYWxsb2NfcXVldWUocG9ydCwgbmV3c29jayk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIwODctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTlZNZS1vRi9UQ1AgQ29ubmVjdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgTlZNZSBvdmVyIFRDUCBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGtleSDigJMgaXQmIzM5O3MgYSB3b3JrcXVldWUgZnVuY3Rpb24sIGFuZCB0aGUgbmFtZSYjMzk7cyBwcmV0dHkgY2xlYXI7IGl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yICphY2NlcHRpbmcqIG5ldyBjb25uZWN0aW9ucy4gU28sIGZyb20gYSBoaWdoIGxldmVsLCBJJiMzOTttIHRoaW5raW5nIG15IG1haW4gZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYXJlIGdvaW5nIHRvIGJlIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgb2YgY291cnNlLCB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGl0c2VsZi4KCk5vdywgYmVmb3JlIEkgZ28gbXVjaCBmdXJ0aGVyLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbnMuIFNlZW1zIG9idmlvdXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTlZNRV9UQ1BgIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX1RDUGAgYXJlIGJvdGggZW5hYmxlZC4gR290dGEgZ2V0IHRoZSBmb3VuZGF0aW9ucyByaWdodCwgeW91IGtub3c/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX1RDUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTY3PWNvbmZpZyBOVk1FX0ZDXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy04Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6ODM6Y29uZmlnIE5WTUVfVENQXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctOTktXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjEwMDpjb25maWcgTlZNRV9UQ1BfVExTXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOVk1lL1RDUCBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBOVk1lL1RDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBOVk1lIGhvc3QgZHJpdmVyLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZmxhZywgbGlrZWx5IG5hbWVkIGBOVk1FX1RDUGAsIGFuZCBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgdXN1YWwgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyB0aGUgc2VsZWN0aW9uLCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG5ldHdvcmtpbmcgb3Igc3RvcmFnZSBzdWJzeXN0ZW1zLCBhbmQgd2hhdCBraW5kIG9mIGRlZmF1bHRzIGFyZSBpbiBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVyZSYjMzk7cyBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgYmFzZSBOVk1lIGhvc3QgZHJpdmVyIGFuZCB0aGUgVENQIHRyYW5zcG9ydCBsYXllciwgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIGhvdyBlbmFibGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaW1wYWN0cyB0aGUgb3ZlcmFsbCBidWlsZC4gRXNzZW50aWFsbHksIEkmIzM5O20gY2hlY2tpbmcgdGhlIGZpbmUgcHJpbnQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBOVk1FX1RDUFxuICA4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclwmIzM0O1xuICA4NTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gIDg3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgODg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDg5Olx0XHRzZWxlY3QgTlZNRV9GQUJSSUNTXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIE5WTWUgb3ZlciBGYWJyaWNzIHByb3RvY29sIHVzaW5nXG4gIDkyOlx0XHQgIHRoZSBUQ1AgdHJhbnNwb3J0LiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSByZW1vdGUgYmxvY2sgZGV2aWNlc1xuICA5MzpcdFx0ICBleHBvcnRlZCB1c2luZyB0aGUgTlZNZSBwcm90b2NvbCBzZXQuXG4gIDk0Olx0XG4gIDk1Olx0XHQgIFRvIGNvbmZpZ3VyZSBhIE5WTWUgb3ZlciBGYWJyaWNzIGNvbnRyb2xsZXIgdXNlIHRoZSBudm1lLWNsaSB0b29sXG4gIDk2Olx0XHQgIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LW52bWUvbnZtZS1jbGkuXG4gIDk3Olx0XG4gIDk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGFzc3VtcHRpb24gSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipOVk1lLW9GIFRDUCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIGBOVk1FX1RDUGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIFdlJiMzOTtyZSBvYnZpb3VzbHkgZ29pbmcgdG8gYmUgcmVseWluZyBvbiBgSU5FVGAgZm9yIHRoZSBUQ1AvSVAgc3RhY2suIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwsIG5vIHN1cnByaXNlIHRoZXJlLiBBbmQgdGhlbiwgd2UmIzM5O2xsIG5lZWQgdGhlIGBCTE9DS2AgbGF5ZXIuIE9mIGNvdXJzZSEgV2UgbmVlZCB0aGF0IGludGVyZmFjZSBmb3IgaGFuZGxpbmcgdGhlIGJsb2NrIHN0b3JhZ2UgYXNwZWN0cyBvZiBOVk1lLiBObyBzdXJwcmlzZXMgc28gZmFyLiBOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY2hlY2sgb24gYE5WTUVfVEFSR0VUX1RDUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHRhcmdldCBzaWRlIGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3Ig4oCTIHRoYXQgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBiYXNlcyBpbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBHb3R0YSBiZSBjb21wbGV0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfVEFSR0VUX1RDUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc9NzQ9Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6OTc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTlZNZS9UQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlZNZS9UQ1AsIHNwZWNpZmljYWxseSB0aGUgYE5WTUVfVEFSR0VUX1RDUGAgc2VjdGlvbi4gTGV0JiMzOTtzIHB1bGwgdXAgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzcGVjdHMgb2YgdGhlIFRDUCB0cmFuc3BvcnQgSSBjYW4gY29uZmlndXJlLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IGdldCBhIGZlZWwgZm9yIGhvdyBtb2R1bGFyIHRoaXMgY29tcG9uZW50IGlzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIE5WTWUgdGFyZ2V0IGZyYW1ld29yazsgYW55IGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBpbGx1bWluYXRlIHRob3NlIHBvaW50cywgZGV0YWlsaW5nIHRoZSB2YXJpb3VzIGNvbXBpbGUtdGltZSBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBOVk1lLW92ZXItVENQIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODY6XHRcbiAgODc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQXG4gIDg4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgODk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA5MDpcdFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVFxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIE5WTWUgVENQIHRhcmdldCBzdXBwb3J0LCB3aGljaCBhbGxvd3MgZXhwb3J0aW5nIE5WTWVcbiAgOTM6XHRcdCAgZGV2aWNlcyBvdmVyIFRDUC5cbiAgOTQ6XHRcbiAgOTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTY6XHRcbiAgOTc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuICA5ODpcdFx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbiAgOTk6XHRcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRfVENQXG4gMTAwOlx0XHRzZWxlY3QgTkVUX0hBTkRTSEFLRVxuIDEwMTpcdFx0c2VsZWN0IFRMU1xuIDEwMjpcdFx0aGVscFxuIDEwMzpcdFx0ICBFbmFibGVzIFRMUyBlbmNyeXB0aW9uIGZvciB0aGUgTlZNZSBUQ1AgdGFyZ2V0IHVzaW5nIHRoZSBuZXRsaW5rIGhhbmRzaGFrZSBBUEkuXG4gMTA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjcyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24gLSBOVk1FX1RBUkdFVF9UQ1AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBOVk1FX1RBUkdFVF9UQ1BgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBhbHdheXMgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCByZWxpZXMgb24gYElORVRgIGFuZCBgTlZNRV9UQVJHRVRgLiBHaXZlbiB0aGF0LCBteSBmaXJzdCB0aG91Z2h0IGlzLCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gYE5WTUVfVEFSR0VUX1RDUGAgaXRzZWxmLCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIGBOVk1FX1RBUkdFVGAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBFbnN1cmluZyB0aGF0IGJhc2UgY29tcG9uZW50IGlzIHNvdW5kIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBhbnl0aGluZyB0aGF0IGFyaXNlcyB3aXRoIHRoZSBUQ1AgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBgTlZNRV9UQVJHRVRgIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBUYXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyMDpjb25maWcgTlZNRV9UQVJHRVRfREVCVUdGU1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTIxLSAgICAgICAgYm9vbCBcJiMzNDtOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BBU1NUSFJVXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMzAtXHRib29sIFwmIzM0O05WTWUgVGFyZ2V0IFBhc3N0aHJvdWdoIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NDE6Y29uZmlnIE5WTUVfVEFSR0VUX0xPT1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O05WTWUgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTEtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NjM6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjQtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBGQyB0YXJnZXQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTczLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjc0OmNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEZDIFRyYW5zcG9ydCBMb29wYmFjayBUZXN0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6OTc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEwOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMTA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gaW4gdGFyZ2V0IHNpZGVcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTE5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEyMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQ0lfRVBGXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTMwLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBQQ0kgRW5kcG9pbnQgRnVuY3Rpb24gdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gYE5WTUVfVEFSR0VUYCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgTlZNRSBUYXJnZXQgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYE5WTUVfVEFSR0VUYCBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIG9mIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0gcmV2ZWFscyBpdHNlbGYsIGxldHRpbmcgdXMgZGVmaW5lIHNldHRpbmdzIHdpdGggZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBkZWZhdWx0cywgdGhlIHdob2xlIGVuY2hpbGFkYSwgYW5kIEkmIzM5O20gZWFnZXIgdG8gZGlzc2VjdCBob3cgaXQgYWxsIHdvcmtzIGhlcmUsIHdpdGggdGhpcyBzcGVjaWZpYyBtb2R1bGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQuIFRoaXMgd2lsbCBwYWludCBhIGNydWNpYWwgcGljdHVyZSBvZiBob3cgdGhlIE5WTWUgdGFyZ2V0IHN1cHBvcnQgZml0cyBpbnRvIHRoZSBiaWdnZXIga2VybmVsIHBpY3R1cmUuIEZyb20gaGVyZSBJIGNhbiBsaWtlbHkgaW5mZXIgaG93IHRoZSB0YXJnZXQgaXMgcHJlc2VudGVkIHRvIHRoZSBlbmQgdXNlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgTlZNRV9UQVJHRVRcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDY6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgNzpcdFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA4Olx0XHRzZWxlY3QgS0VZUyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA5Olx0XHRzZWxlY3QgU0dMX0FMTE9DXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgZW5hYmxlZCB0YXJnZXQgc2lkZSBzdXBwb3J0IGZvciB0aGUgTlZNZSBwcm90b2NvbCwgdGhhdCBpc1xuICAxMjpcdFx0ICBpdCBhbGxvd3MgdGhlIExpbnV4IGtlcm5lbCB0byBpbXBsZW1lbnQgTlZNZSBzdWJzeXN0ZW1zIGFuZFxuICAxMzpcdFx0ICBjb250cm9sbGVycyBhbmQgZXhwb3J0IExpbnV4IGJsb2NrIGRldmljZXMgYXMgTlZNZSBuYW1lc3BhY2VzLlxuICAxNDpcdFx0ICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFuc3BvcnRzIGJlbG93IHRvIG1ha2UgdGhpc1xuICAxNTpcdFx0ICBmdW5jdGlvbmFsaXR5IHVzZWZ1bC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29uZmlndXJlIHRoZSBOVk1lIHRhcmdldCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlIG52bWV0Y2xpXG4gIDE4Olx0XHQgIHRvb2wgZnJvbSBodHRwOi8vZ2l0LmluZnJhZGVhZC5vcmcvdXNlcnMvaGNoL252bWV0Y2xpLmdpdC5cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgTlZNRV9UQVJHRVRfREVCVUdGU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gTlZNZS1UQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIE5WTWUtVENQIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgTlZNRV9UQVJHRVRgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIGNvcmUgY29uZmlncyByZXF1aXJlZCBhcmUgYE5WTUVfVENQYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgLiBBbmQgb2YgY291cnNlLCBgSVBWNmAgaXMgbmVlZGVkIGZvciBoYW5kbGluZyBgSVBWNl9UQ0xBU1NgLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJUFY2YCBpcyBwcm9wZXJseSBlbmFibGVkLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNoZWNrZWQgd2l0aCBgSVNfRU5BQkxFRChDT05GSUdfSVBWNilgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhIHRvIGVuc3VyZSBgSVBWNmAgaXMgZW5hYmxlZCBkdXJpbmcgdGVzdGluZyB0byBjb3ZlciB0aGF0IGNvZGUgcGF0aC4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaW4gdGVybXMgb2YgdGhlaXIgcm9sZSBpbiB0aGUgc2V0dXAgcHJvY2VzczoKCiogICBJIG9yaWdpbmFsbHkgd2FzIGZvY3VzaW5nIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBlbnRyeSBwb2ludHMuCiogICBJIHNlZSB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBidXQgdGhhdCBpcyB0aGUgZW50cnkgcG9pbnQgd2hpY2ggY2FsbHMgYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAgd2hpY2ggY2FsbHMgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AuIFNvLCBJJiMzOTtsbCBrZWVwIHRoYXQuCiogICBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhbmQgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciBzZXR0aW5nIHVwIHRoZSBzb2NrZXRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYCBpcyBzdGF0aWMuIFllcywgaXQgaXMgc3RhdGljLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIGJldHRlciBub24tc3RhdGljIG9wdGlvbi4gSSBzZWUgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgYWRkX3BvcnRgIGluIGBudm1ldF9mYWJyaWNzX29wc2AuIEFuZCwgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyBzdGF0aWMgYXMgd2VsbCBhbmQgYXNzaWduZWQgdG8gYGNyZWF0ZV9jdHJsYCBpbiBgbnZtZl90cmFuc3BvcnRfb3BzYC4KCldhaXQsIHRoZSBwcm9tcHQgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGZvciB0aG9zZS4gRm9yIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50IGlzIGBudm1mX2NyZWF0ZV9jdHJsYCBpbiBgZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGF0IGNvZGUgYXMgdGhhdCYjMzk7cyB0aGUgcmVhbCBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZl9jcmVhdGVfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTMwNz1zdGF0aWMgc3RydWN0IG52bWVfY3RybCAqXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM6MTMwODpudm1mX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmKVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYz0xMzg1PXN0YXRpYyBzc2l6ZV90IG52bWZfZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxNDA2Olx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNy1cdGlmIChJU19FUlIoY3RybCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMjAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipDb250cm9sbGVyIGFuZCBQb3J0IFNldHVwIC0gTXkgUGVyc3BlY3RpdmUqKgoKQWxyaWdodCwgc28gaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgYG52bWZfZGV2X3dyaXRlYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHNwaW5uaW5nIHVwIGEgbmV3IGNvbnRyb2xsZXIuIFRoYXQmIzM5O3MgaG93IHdlIGtpY2sgb2ZmIHRoZSBwcm9jZXNzLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuCgpOb3csIG9uIHRoZSB0YXJnZXQgc2lkZSwgd2hlbiB3ZSYjMzk7cmUgc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbiB0byB0aGUgaG9zdCwgaXQgc2VlbXMgbGlrZSBgbnZtZXRfdGNwX2FkZF9wb3J0YCBpcyB0aGUgZ28tdG8gZnVuY3Rpb24uIFRoaXMgaXMgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgYG52bWV0X3BvcnRfc3Vic3lzX2FsbG93X2FueV9zdG9yZWAgb3Igc2ltaWxhciBjYWxsYmFja3MgdGhhdCB3ZSBjb25maWd1cmUgdXNpbmcgY29uZmlnZnMuIFNvLCB0aGUgY29uZmlnZnMgY2FsbGJhY2tzIHdvdWxkIGJlIGhvdyB3ZSBoYW5kbGUgdGhlIHBvcnQgY3JlYXRpb24gaW4gb3VyIHNldHVwLiBJdCBpcyBob3cgd2UgaGFuZGxlIHNldHRpbmcgdXAgdGhlIHBvcnQgZnJvbSB0YXJnZXQtc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkX3BvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc1MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdD0xODk9UmV0dXJucyBhIHBvaW50ZXIgdG8gc3RydWN0IHNvY191c2Igb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3IuXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yMDEtXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjIwMjpcdHZvaWQgc25kX3NvY191c2JfYWRkX3BvcnQoc3RydWN0IHNuZF9zb2NfdXNiICp1c2IpO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yMDMtLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTIwNi1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q6MjA3Oioqc25kX3NvY191c2JfYWRkX3BvcnQoKSoqIGFkZCBhbiBhbGxvY2F0ZWQgU29DIFVTQiBkZXZpY2UgdG8gdGhlIFNPQyBVU0IgZnJhbWV3b3JrLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yMDgtT25jZSBhZGRlZCwgdGhpcyBkZXZpY2UgY2FuIGJlIHJlZmVyZW5jZWQgYnkgZnVydGhlciBvcGVyYXRpb25zLlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q9MjI2PWJlIHNob3duIGJlbG93OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjM4LVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdDoyMzk6XHRcdHJldCA9IHNuZF9zb2NfdXNiX2FkZF9wb3J0KHVzYik7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTI0MC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q9NDQwPWV4ZWN1dGUgdGhlIHJlZ2lzdGVyZWQgZnVuY3Rpb24gY2FsbHMgdG8gdGhlIERQQ00gQkUgREFJIGxpbmsuXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC00NTUtXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjQ1NjpcdHJldCA9IHNuZF9zb2NfdXNiX2FkZF9wb3J0KHVzYik7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTQ1Ny0uLlxuLS1cbmRyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmM9Mzk3PXN0YXRpYyBpbnQgcGF0YV9pY3NpZGVfcmVnaXN0ZXJfdjYoc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy00MzktXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jOjQ0MDpzdGF0aWMgaW50IHBhdGFfaWNzaWRlX2FkZF9wb3J0cyhzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyAqaW5mbylcbmRyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMtNDQxLXtcbi0tXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jPTQ4MD1zdGF0aWMgaW50IHBhdGFfaWNzaWRlX3Byb2JlKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMsXG4tLVxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDMtXHRpZiAocmV0ID09IDApXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jOjU0NDpcdFx0cmV0ID0gcGF0YV9pY3NpZGVfYWRkX3BvcnRzKFx1MDAyNmluZm8pO1xuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDUtXG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM9MTMxNj1zdGF0aWMgdm9pZCBzZW5kX3NpZ2lvX3RvX3BvcnQoc3RydWN0IHBvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTMyMS1cbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjEzMjI6c3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xMzIzLXtcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xNTIzPXN0YXRpYyB2b2lkIGhhbmRsZV9jb250cm9sX21lc3NhZ2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTU1OC1cdFx0fVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTU1OTpcdFx0YWRkX3BvcnQocG9ydGRldiwgdmlydGlvMzJfdG9fY3B1KHZkZXYsIGNwa3QtXHUwMDNlaWQpKTtcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE1NjAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE5NTk9c3RhdGljIGludCB2aXJ0Y29uc19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0yMDUyLVx0XHQgKi9cbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjIwNTM6XHRcdGFkZF9wb3J0KHBvcnRkZXYsIDApO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMjA1NC1cdH1cbi0tXG5kcml2ZXJzL2N4bC9hY3BpLmM9Njg3PXN0YXRpYyBpbnQgYWRkX2hvc3RfYnJpZGdlX3Vwb3J0KHN0cnVjdCBkZXZpY2UgKm1hdGNoLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9jeGwvYWNwaS5jLTczNC1cbmRyaXZlcnMvY3hsL2FjcGkuYzo3MzU6XHRwb3J0ID0gZGV2bV9jeGxfYWRkX3BvcnQoaG9zdCwgYnJpZGdlLCBjb21wb25lbnRfcmVnX3BoeXMsIGRwb3J0KTtcbmRyaXZlcnMvY3hsL2FjcGkuYy03MzYtXHRpZiAoSVNfRVJSKHBvcnQpKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jPTgzOD1zdGF0aWMgaW50IGN4bF9wb3J0X2FkZChzdHJ1Y3QgY3hsX3BvcnQgKnBvcnQsXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtODgxLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6ODgyOnN0YXRpYyBzdHJ1Y3QgY3hsX3BvcnQgKl9fZGV2bV9jeGxfYWRkX3BvcnQoc3RydWN0IGRldmljZSAqaG9zdCxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTg4My1cdFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2UgKnVwb3J0X2Rldixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MTYtLyoqXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5MTc6ICogZGV2bV9jeGxfYWRkX3BvcnQgLSByZWdpc3RlciBhIGN4bF9wb3J0IGluIENYTCBtZW1vcnkgZGVjb2RlIGhpZXJhcmNoeVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTE4LSAqIEBob3N0OiBob3N0IGRldmljZSBmb3IgZGV2bSBvcGVyYXRpb25zXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTIyLSAqL1xuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTIzOnN0cnVjdCBjeGxfcG9ydCAqZGV2bV9jeGxfYWRkX3BvcnQoc3RydWN0IGRldmljZSAqaG9zdCxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkyNC1cdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2UgKnVwb3J0X2Rldixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MjktXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5MzA6XHRwb3J0ID0gX19kZXZtX2N4bF9hZGRfcG9ydChob3N0LCB1cG9ydF9kZXYsIGNvbXBvbmVudF9yZWdfcGh5cyxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkzMS1cdFx0XHRcdCAgIHBhcmVudF9kcG9ydCk7XG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTQ5LX1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjk1MDpFWFBPUlRfU1lNQk9MX05TX0dQTChkZXZtX2N4bF9hZGRfcG9ydCwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTk1MS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jPTk1Mj1zdHJ1Y3QgY3hsX3Jvb3QgKmRldm1fY3hsX2FkZF9yb290KHN0cnVjdCBkZXZpY2UgKmhvc3QpXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTU1LVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTU2Olx0cG9ydCA9IGRldm1fY3hsX2FkZF9wb3J0KGhvc3QsIGhvc3QsIENYTF9SRVNPVVJDRV9OT05FLCBOVUxMKTtcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTk1Ny1cdGlmIChJU19FUlIocG9ydCkpXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9MTQ1MD1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfZW5kcG9pbnRfYXV0b3JlbW92ZSwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xNDU2LSAqIHRocm91Z2ggLVx1MDAzZXJlbW92ZSgpLiBUaGlzIFwmIzM0O2JvdHRvbS11cFwmIzM0OyByZW1vdmFsIHNlbGVjdGl2ZWx5IHJlbW92ZXMgaW5kaXZpZHVhbFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTQ1NzogKiBjaGlsZCBwb3J0cyBtYW51YWxseS4gVGhpcyBkZXBlbmRzIG9uIGRldm1fY3hsX2FkZF9wb3J0KCkgdG8gbm90IGNoYW5nZSBpc1xuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTQ1OC0gKiBkZXZtIGFjdGlvbiByZWdpc3RyYXRpb24gb3JkZXIsIGFuZCBmb3IgZHBvcnRzIHRvIGhhdmUgYWxyZWFkeSBiZWVuXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9MTY2Nz1zdGF0aWMgc3RydWN0IGN4bF9kcG9ydCAqZGV2bV9jeGxfY3JlYXRlX3BvcnQoc3RydWN0IGRldmljZSAqZXBfZGV2LFxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE2ODYtXHRcdGNvbXBvbmVudF9yZWdfcGh5cyA9IGZpbmRfY29tcG9uZW50X3JlZ2lzdGVycyh1cG9ydF9kZXYpO1xuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTY4NzpcdFx0cG9ydCA9IGRldm1fY3hsX2FkZF9wb3J0KFx1MDAyNnBhcmVudF9wb3J0LVx1MDAzZWRldiwgdXBvcnRfZGV2LFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTY4OC1cdFx0XHRcdFx0IGNvbXBvbmVudF9yZWdfcGh5cywgcGFyZW50X2Rwb3J0KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xNzEzLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTcxNDpzdGF0aWMgaW50IGFkZF9wb3J0X2F0dGFjaF9lcChzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQsXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xNzE1LVx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2UgKnVwb3J0X2Rldixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYz0xNzk5PWludCBkZXZtX2N4bF9lbnVtZXJhdGVfcG9ydHMoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NjMtXHRcdFx0ICogdGhhdCYjMzk7cyBvaywgaXQgd2FzIGFkZGVkIG9uIGEgcHJldmlvdXMgcGFzcy5cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjE4NjQ6XHRcdFx0ICogT3RoZXJ3aXNlLCByZXRyeSBpbiBhZGRfcG9ydF9hdHRhY2hfZXAoKSBhZnRlciB0YWtpbmdcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NjUtXHRcdFx0ICogdGhlIHBhcmVudF9wb3J0IGxvY2sgYXMgdGhlIGN1cnJlbnQgcG9ydCBtYXkgYmUgYmVpbmdcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xODc5LVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTg4MDpcdFx0cmMgPSBhZGRfcG9ydF9hdHRhY2hfZXAoY3hsbWQsIHVwb3J0X2RldiwgZHBvcnRfZGV2KTtcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4ODEtXHRcdC8qIHBvcnQgbWlzc2luZywgdHJ5IHRvIGFkZCBwYXJlbnQgKi9cbi0tXG5kcml2ZXJzL2N4bC9jeGwuaD03Mjg9c3RydWN0IHBjaV9idXMgKmN4bF9wb3J0X3RvX3BjaV9idXMoc3RydWN0IGN4bF9wb3J0ICpwb3J0KTtcbmRyaXZlcnMvY3hsL2N4bC5oOjcyOTpzdHJ1Y3QgY3hsX3BvcnQgKmRldm1fY3hsX2FkZF9wb3J0KHN0cnVjdCBkZXZpY2UgKmhvc3QsXG5kcml2ZXJzL2N4bC9jeGwuaC03MzAtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXG4tLVxuZHJpdmVycy9jeGwvcG9ydC5jPTI4Nj1pbnQgZGV2bV9jeGxfYWRkX2VuZHBvaW50KHN0cnVjdCBkZXZpY2UgKmhvc3QsIHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZCxcbi0tXG5kcml2ZXJzL2N4bC9wb3J0LmMtMzA1LVx0LyogTm90ZTogZW5kcG9pbnQgcG9ydCBjb21wb25lbnQgcmVnaXN0ZXJzIGFyZSBkZXJpdmVkIGZyb20gQGN4bGRzICovXG5kcml2ZXJzL2N4bC9wb3J0LmM6MzA2Olx0ZW5kcG9pbnQgPSBkZXZtX2N4bF9hZGRfcG9ydChob3N0LCBcdTAwMjZjeGxtZC1cdTAwM2VkZXYsIENYTF9SRVNPVVJDRV9OT05FLFxuZHJpdmVycy9jeGwvcG9ydC5jLTMwNy1cdFx0XHRcdCAgICAgcGFyZW50X2Rwb3J0KTtcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLmM9NzE4PXN0cnVjdCBkZmxfZmVhdHVyZV9pbmZvIHtcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtNzMwLVxuZHJpdmVycy9mcGdhL2RmbC5jOjczMTpzdGF0aWMgdm9pZCBkZmxfZnBnYV9jZGV2X2FkZF9wb3J0X2RhdGEoc3RydWN0IGRmbF9mcGdhX2NkZXYgKmNkZXYsXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtNzMyLVx0XHRcdFx0XHRzdHJ1Y3QgZGZsX2ZlYXR1cmVfZGV2X2RhdGEgKmZkYXRhKVxuLS1cbmRyaXZlcnMvZnBnYS9kZmwuYz05MjI9c3RhdGljIGludCBidWlsZF9pbmZvX2NvbW1pdF9kZXYoc3RydWN0IGJ1aWxkX2ZlYXR1cmVfZGV2c19pbmZvICpiaW5mbylcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtOTM1LVx0aWYgKGJpbmZvLVx1MDAzZXR5cGUgPT0gUE9SVF9JRClcbmRyaXZlcnMvZnBnYS9kZmwuYzo5MzY6XHRcdGRmbF9mcGdhX2NkZXZfYWRkX3BvcnRfZGF0YShiaW5mby1cdTAwM2VjZGV2LCBmZGF0YSk7XG5kcml2ZXJzL2ZwZ2EvZGZsLmMtOTM3LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmM9NDY5PXN0YXRpYyB2b2lkIGR3YXBiX2NvbmZpZ3VyZV9pcnFzKHN0cnVjdCBkd2FwYl9ncGlvICpncGlvLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMtNTI2LVxuZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYzo1Mjc6c3RhdGljIGludCBkd2FwYl9ncGlvX2FkZF9wb3J0KHN0cnVjdCBkd2FwYl9ncGlvICpncGlvLFxuZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYy01MjgtXHRcdFx0ICAgICAgIHN0cnVjdCBkd2FwYl9wb3J0X3Byb3BlcnR5ICpwcCxcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jPTczMj1zdGF0aWMgaW50IGR3YXBiX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTc2NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdwaW8tXHUwMDNlbnJfcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jOjc2NjpcdFx0ZXJyID0gZHdhcGJfZ3Bpb19hZGRfcG9ydChncGlvLCBcdTAwMjZwZGF0YS1cdTAwM2Vwcm9wZXJ0aWVzW2ldLCBpKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMtNzY3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYz0yMzE3PXN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYzoyMzE4OmRybV9kcF9tc3RfYWRkX3BvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy0yMzE5LVx0XHQgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jPTIzNTA9ZHJtX2RwX21zdF9oYW5kbGVfbGlua19hZGRyZXNzX3BvcnQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy0yMzYyLVx0aWYgKCFwb3J0KSB7XG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6MjM2MzpcdFx0cG9ydCA9IGRybV9kcF9tc3RfYWRkX3BvcnQoZGV2LCBtZ3IsIG1zdGIsXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM2NC1cdFx0XHRcdFx0ICAgcG9ydF9tc2ctXHUwMDNlcG9ydF9udW1iZXIpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy0yMzc0LVx0XHRkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpO1xuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jOjIzNzU6XHRcdHBvcnQgPSBkcm1fZHBfbXN0X2FkZF9wb3J0KGRldiwgbWdyLCBtc3RiLFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTIzNzYtXHRcdFx0XHRcdCAgIHBvcnRfbXNnLVx1MDAzZXBvcnRfbnVtYmVyKTtcbi0tXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM9MTUxPURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShzc2lfc3N0X2Rpdl9mb3BzLCBzc2lfZGl2X2dldCwgc3NpX2Rpdl9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jLTE1Mi1cbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYzoxNTM6c3RhdGljIHZvaWQgc3NpX2RlYnVnX2FkZF9wb3J0KHN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQsXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMtMTU0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkaXIpXG4tLVxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jPTExMDY9c3RhdGljIGludCBzc2lfcG9ydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZClcbi0tXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMtMTIwMC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM6MTIwMTpcdHNzaV9kZWJ1Z19hZGRfcG9ydChvbWFwX3BvcnQsIG9tYXBfc3NpLVx1MDAzZWRpcik7XG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMtMTIwMi0jZW5kaWZcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYz0yNDA2PWludCBpcmRtYV9hbGxvY19sb2NhbF9tYWNfZW50cnkoc3RydWN0IGlyZG1hX3BjaV9mICpyZiwgdTE2ICptYWNfdGJsX2lkeClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDM0LSAqIEBhY2NlbF9sb2NhbF9wb3J0OiBwb3J0IGZvciBhcGJ2dFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQzNTogKiBAYWRkX3BvcnQ6IGFkZCBvcmRlbGV0ZSBwb3J0XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDM2LSAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM9MjQzNz1zdGF0aWMgaW50IGlyZG1hX2NxcF9tYW5hZ2VfYXBidnRfY21kKHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQzODpcdFx0XHRcdCAgICAgIHUxNiBhY2NlbF9sb2NhbF9wb3J0LCBib29sIGFkZF9wb3J0KVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQzOS17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQ0NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0NDU6XHRjcXBfcmVxdWVzdCA9IGlyZG1hX2FsbG9jX2FuZF9nZXRfY3FwX3JlcXVlc3QoXHUwMDI2aXdkZXYtXHUwMDNlcmYtXHUwMDNlY3FwLCBhZGRfcG9ydCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDQ2LVx0aWYgKCFjcXBfcmVxdWVzdClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDUwLVx0aW5mbyA9IFx1MDAyNmNxcF9pbmZvLVx1MDAzZWluLnUubWFuYWdlX2FwYnZ0X2VudHJ5LmluZm87XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYzoyNDUxOlx0aW5mby1cdTAwM2VhZGQgPSBhZGRfcG9ydDtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTItXHRpbmZvLVx1MDAzZXBvcnQgPSBhY2NlbF9sb2NhbF9wb3J0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTctXHRpYmRldl9kYmcoXHUwMDI2aXdkZXYtXHUwMDNlaWJkZXYsIFwmIzM0O0RFVjogJXM6IHBvcnQ9MHglMDR4XFxuXCYjMzQ7LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQ1ODpcdFx0ICAoIWFkZF9wb3J0KSA/IFwmIzM0O0RFTEVURVwmIzM0OyA6IFwmIzM0O0FERFwmIzM0OywgYWNjZWxfbG9jYWxfcG9ydCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDU5LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9MjE1PXZvaWQgZGVsX3N5c2ZzX3BvcnRfbWNnX2F0dHIoc3RydWN0IG1seDRfaWJfZGV2ICpkZXZpY2UsIGludCBwb3J0X251bSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTIyMi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6MjIzOnN0YXRpYyBpbnQgYWRkX3BvcnRfZW50cmllcyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldmljZSwgaW50IHBvcnRfbnVtKVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy0yMjQte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMzQ5LWVycjpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6MzUwOlx0cHJfZXJyKFwmIzM0O2FkZF9wb3J0X2VudHJpZXMgRkFJTEVEOiBmb3IgcG9ydDolZCwgZXJyb3I6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy0zNTEtXHQgICAgICAgcG9ydF9udW0sIHJldCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYz02MTE9c3RhdGljIHZvaWQgcmVtb3ZlX3ZmX3NtaV9lbnRyaWVzKHN0cnVjdCBtbHg0X3BvcnQgKnApXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy02MjItXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjYyMzpzdGF0aWMgaW50IGFkZF9wb3J0KHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBpbnQgcG9ydF9udW0sIGludCBzbGF2ZSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtNjI0LXtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jPTcwMT1zdGF0aWMgaW50IHJlZ2lzdGVyX29uZV9wa2V5X3RyZWUoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIGludCBzbGF2ZSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTczNS1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6NzM2Olx0XHRlcnIgPSBhZGRfcG9ydChkZXYsIHBvcnQsIHNsYXZlKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtNzM3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9ODA2PWludCBtbHg0X2liX2RldmljZV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldilcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTgyNy1cdHJkbWFfZm9yX2VhY2hfcG9ydChcdTAwMjZkZXYtXHUwMDNlaWJfZGV2LCBpKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjgyODpcdFx0cmV0ID0gYWRkX3BvcnRfZW50cmllcyhkZXYsIGkpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy04MjktXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jPTI1OT1zdGF0aWMgc3RydWN0IG9jcmRtYV9kZXYgKm9jcmRtYV9hZGQoc3RydWN0IGJlX2Rldl9pbmZvICpkZXZfaW5mbylcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9tYWluLmMtMjk1LVx0LyogSW5pdCBzdGF0cyAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jOjI5NjpcdG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhkZXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jLTI5Ny1cdC8qIEludGVycnVwdCBNb2RlcmF0aW9uICovXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYz03NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NyZG1hX2RiZ19vcHMgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYy03NTctXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5jOjc1ODp2b2lkIG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYy03NTkte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3N0YXRzLmg9NzA9dm9pZCBvY3JkbWFfcmVtX3BvcnRfc3RhdHMoc3RydWN0IG9jcmRtYV9kZXYgKmRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5oOjcxOnZvaWQgb2NyZG1hX2FkZF9wb3J0X3N0YXRzKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuaC03Mi12b2lkIG9jcmRtYV9wbWFfY291bnRlcnMoc3RydWN0IG9jcmRtYV9kZXYgKmRldiwgc3RydWN0IGliX21hZCAqb3V0X21hZCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjU3Nz1zdGF0aWMgaW50IGlwb2liX2ludGVyY2VwdF9kZXZfaWRfYXR0cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTI1ODItXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyNTgzOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBvaWJfYWRkX3BvcnQoY29uc3QgY2hhciAqZm9ybWF0LFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjU4NC1cdFx0XHRcdFx0IHN0cnVjdCBpYl9kZXZpY2UgKmhjYSwgdTMyIHBvcnQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjY2MD1zdGF0aWMgaW50IGlwb2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTI2NzYtXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyNjc3Olx0XHRkZXYgPSBpcG9pYl9hZGRfcG9ydChcJiMzNDtpYiVkXCYjMzQ7LCBkZXZpY2UsIHApO1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjY3OC1cdFx0aWYgKCFJU19FUlIoZGV2KSkge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTM5Njg9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTM5NzQtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYzozOTc1OnN0YXRpYyBzdHJ1Y3Qgc3JwX2hvc3QgKnNycF9hZGRfcG9ydChzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2aWNlLCB1MzIgcG9ydClcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTM5NzYte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTQwMTk9c3RhdGljIGludCBzcnBfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtNDA4OC1cdHJkbWFfZm9yX2VhY2hfcG9ydCAoZGV2aWNlLCBwKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYzo0MDg5Olx0XHRob3N0ID0gc3JwX2FkZF9wb3J0KHNycF9kZXYsIHApO1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtNDA5MC1cdFx0aWYgKGhvc3QpXG4tLVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jPTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZ2FtZXBvcnRfYnVzO1xuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTQzLVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jOjQ0OnN0YXRpYyB2b2lkIGdhbWVwb3J0X2FkZF9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpO1xuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTQ1LXN0YXRpYyB2b2lkIGdhbWVwb3J0X2F0dGFjaF9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KTtcbi0tXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmM9MzE5PXN0YXRpYyB2b2lkIGdhbWVwb3J0X2hhbmRsZV9ldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYy0zMzUtXHRcdGNhc2UgR0FNRVBPUlRfUkVHSVNURVJfUE9SVDpcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzozMzY6XHRcdFx0Z2FtZXBvcnRfYWRkX3BvcnQoZXZlbnQtXHUwMDNlb2JqZWN0KTtcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYy0zMzctXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jPTU1NT1zdGF0aWMgdm9pZCBnYW1lcG9ydF9pbml0X3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydClcbi0tXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNTc5LSAqL1xuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jOjU4MDpzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTU4MS17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTMyPXN0YXRpYyBMSVNUX0hFQUQoc2VyaW9fbGlzdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzQ6c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzUtc3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MTg2PXN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5Ni1cdFx0Y2FzZSBTRVJJT19SRUdJU1RFUl9QT1JUOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjE5NzpcdFx0XHRzZXJpb19hZGRfcG9ydChldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5OC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NDY3PXN0YXRpYyB2b2lkIHNlcmlvX2luaXRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00OTUtICovXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDk2OnN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDk3LXtcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTg1PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2Rpb191YXJ0X3RhYmxlX2xvY2spO1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy04Ni1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmM6ODc6c3RhdGljIGludCBzZGlvX3VhcnRfYWRkX3BvcnQoc3RydWN0IHNkaW9fdWFydF9wb3J0ICpwb3J0KVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy04OC17XG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYz0xMDE4PXN0YXRpYyBpbnQgc2Rpb191YXJ0X3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy0xMDc1LVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYzoxMDc2Olx0cmV0ID0gc2Rpb191YXJ0X2FkZF9wb3J0KHBvcnQpO1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy0xMDc3LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz02NzI9c3RhdGljIHZvaWQgbGFuOTMwM19hbHJfc2V0X2VudHJ5KHN0cnVjdCBsYW45MzAzICpjaGlwLCBjb25zdCB1OCAqbWFjLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy03MDEtLyogQWRkIHBvcnQgdG8gc3RhdGljIEFMUiBlbnRyeSwgY3JlYXRlIG5ldyBzdGF0aWMgZW50cnkgaWYgbmVlZGVkICovXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6NzAyOnN0YXRpYyBpbnQgbGFuOTMwM19hbHJfYWRkX3BvcnQoc3RydWN0IGxhbjkzMDMgKmNoaXAsIGNvbnN0IHU4ICptYWMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTcwMy1cdFx0XHRcdGJvb2wgc3RwX292ZXJyaWRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz04Mjc9c3RhdGljIHZvaWQgbGFuOTMwM19icmlkZ2VfcG9ydHMoc3RydWN0IGxhbjkzMDMgKmNoaXApXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTgzNC1cdFx0XHRcdCBjaGlwLVx1MDAzZXN3ZV9wb3J0X3N0YXRlKTtcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYzo4MzU6XHRsYW45MzAzX2Fscl9hZGRfcG9ydChjaGlwLCBldGhfc3RwX2FkZHIsIDAsIHRydWUpO1xuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTgzNi19XG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTEyMTM9c3RhdGljIGludCBsYW45MzAzX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy0xMjIwLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jOjEyMjE6XHRyZXR1cm4gbGFuOTMwM19hbHJfYWRkX3BvcnQoY2hpcCwgYWRkciwgcG9ydCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTEyMjItfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz0xMjY3PXN0YXRpYyBpbnQgbGFuOTMwM19wb3J0X21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtMTI3OS1cdFx0bWRiLVx1MDAzZXZpZCk7XG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6MTI4MDpcdHJldHVybiBsYW45MzAzX2Fscl9hZGRfcG9ydChjaGlwLCBtZGItXHUwMDNlYWRkciwgcG9ydCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTEyODEtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM9MTA2Mj1zdGF0aWMgdm9pZCBpZHBmX2FkZF9lbXB0eV9xdWV1ZV9zdGF0cyh1NjQgKipkYXRhLCB1MTYgcXR5cGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDc3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYzoxMDc4OiAqIGlkcGZfYWRkX3BvcnRfc3RhdHMgLSBDb3B5IHBvcnQgc3RhdHMgaW50byBldGh0b29sIGJ1ZmZlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDc5LSAqIEB2cG9ydDogdmlydHVhbCBwb3J0IHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTA4MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM6MTA4MjpzdGF0aWMgdm9pZCBpZHBmX2FkZF9wb3J0X3N0YXRzKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwgdTY0ICoqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTA4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYz0xMjA0PXN0YXRpYyB2b2lkIGlkcGZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jLTEyMjctXHRpZHBmX2NvbGxlY3RfcXVldWVfc3RhdHModnBvcnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYzoxMjI4Olx0aWRwZl9hZGRfcG9ydF9zdGF0cyh2cG9ydCwgXHUwMDI2ZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jLTEyMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jPTI3MDU9c3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfc2hhcmVkX29mX3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYy0yNzIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI3MjE6c3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfb2ZfYWRkX3BvcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYy0yNzIyLVx0XHRcdFx0XHQgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG5wKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYz0yODA4PXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI4MjUtXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQobnAsIHBucCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI4MjY6XHRcdHJldCA9IG12NjQzeHhfZXRoX3NoYXJlZF9vZl9hZGRfcG9ydChwZGV2LCBwbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI4MjctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU0NDM9c3RhdGljIGludCBtbHg1ZV92eGxhbl9zZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdGFibGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01NDQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1NDQ4Olx0cmV0dXJuIG1seDVfdnhsYW5fYWRkX3BvcnQocHJpdi1cdTAwM2VtZGV2LVx1MDAzZXZ4bGFuLCBudG9ocyh0aS1cdTAwM2Vwb3J0KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU0NDktfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYz00Nz1zdHJ1Y3QgbWx4NV92eGxhbl9wb3J0IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM6NTI6c3RhdGljIGludCBtbHg1X3Z4bGFuX2NvcmVfYWRkX3BvcnRfY21kKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgcG9ydClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy01My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jPTkxPXN0YXRpYyBzdHJ1Y3QgbWx4NV92eGxhbl9wb3J0ICp2eGxhbl9sb29rdXBfcG9ydChzdHJ1Y3QgbWx4NV92eGxhbiAqdnhsYW4sIHUxNiBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM6MTAxOmludCBtbHg1X3Z4bGFuX2FkZF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jOjExMTpcdHJldCA9IG1seDVfdnhsYW5fY29yZV9hZGRfcG9ydF9jbWQodnhsYW4tXHUwMDNlbWRldiwgcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTEyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYz0xNDc9c3RydWN0IG1seDVfdnhsYW4gKm1seDVfdnhsYW5fY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xNjItXHQvKiBIYXJkd2FyZSBhZGRzIDQ3ODkgKElBTkFfVlhMQU5fVURQX1BPUlQpIGJ5IGRlZmF1bHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYzoxNjM6XHRtbHg1X3Z4bGFuX2FkZF9wb3J0KHZ4bGFuLCBJQU5BX1ZYTEFOX1VEUF9QT1JUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xNjQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oPTU1PXZvaWQgbWx4NV92eGxhbl9kZXN0cm95KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmg6NTY6aW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmgtNTctaW50IG1seDVfdnhsYW5fZGVsX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X3Z4bGFuX2Rlc3Ryb3koc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuKSB7IHJldHVybjsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oOjY0OnN0YXRpYyBpbmxpbmUgaW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCkgeyByZXR1cm4gLUVPUE5PVFNVUFA7IH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uaC02NS1zdGF0aWMgaW5saW5lIGludCBtbHg1X3Z4bGFuX2RlbF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpIHsgcmV0dXJuIC1FT1BOT1RTVVBQOyB9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcmVnLmg9MTI3MT1NTFhTV19JVEVNMzJfSU5ERVhFRChyZWcsIHNsZHIsIHN5c3RlbV9wb3J0LCAweDA4LCAwLCAxNiwgNCwgMCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcmVnLmgtMTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oOjEyNzM6c3RhdGljIGlubGluZSB2b2lkIG1seHN3X3JlZ19zbGRyX2xhZ19hZGRfcG9ydF9wYWNrKGNoYXIgKnBheWxvYWQsIHU4IGxhZ19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oLTEyNzQtXHRcdFx0XHRcdFx0ICAgIHUxNiBsb2NhbF9wb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9NDQ0OT1zdGF0aWMgaW50IG1seHN3X3NwX2xhZ19kaXN0X3BvcnRfYWRkKHN0cnVjdCBtbHhzd19zcF9wb3J0ICptbHhzd19zcF9wb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmMtNDQ1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM6NDQ1NTpcdG1seHN3X3JlZ19zbGRyX2xhZ19hZGRfcG9ydF9wYWNrKHNsZHJfcGwsIGxhZ19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmMtNDQ1Ni1cdFx0XHRcdFx0IG1seHN3X3NwX3BvcnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM9MTMzPXN0YXRpYyB2b2lkIGVmeF9kZXZsaW5rX2RlbF9wb3J0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRsX3BvcnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM6MTQwOnN0YXRpYyBpbnQgZWZ4X2RldmxpbmtfYWRkX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jLTE0MS1cdFx0XHRcdHN0cnVjdCBtYWVfbXBvcnRfZGVzYyAqbXBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM9NjM2PXN0YXRpYyBzdHJ1Y3QgZGV2bGlua19wb3J0ICplZjEwMF9zZXRfZGV2bGlua19wb3J0KHN0cnVjdCBlZnhfbmljICplZngsIHUzMiBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtNjY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM6NjY2Olx0cmMgPSBlZnhfZGV2bGlua19hZGRfcG9ydChlZngsIG1wb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jLTY2Ny1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTUwMD1zdGF0aWMgaW50IHRjX2FkZF9pcDRfZmxvdyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6NTM1OnN0YXRpYyBpbnQgdGNfYWRkX3BvcnRzX2Zsb3coc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNTM2LVx0XHRcdCAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNscyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz02MDI9c3RhdGljIHN0cnVjdCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNjA3LVx0eyAuZm4gPSB0Y19hZGRfaXA0X2Zsb3cgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjYwODpcdHsgLmZuID0gdGNfYWRkX3BvcnRzX2Zsb3cgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTYwOS19O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTYyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjMwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjMxOnN0YXRpYyBpbnQgcGh5X2FkZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYzMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjk1LVx0ICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2OTY6XHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY5Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNDI4PXN0YXRpYyBpbnQgcGh5X2RlZmF1bHRfc2V0dXBfc2luZ2xlX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM0NTctXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM0NTg6XHRwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzQ1OS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM0NjM9c3RhdGljIGludCBvZl9waHlfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM0OTEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM0OTI6XHRcdGVyciA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNDkzLVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDY9c3RhdGljIHZvaWQgX190ZWFtX29wdGlvbl9pbnN0X2RlbF9wb3J0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg6c3RhdGljIGludCBfX3RlYW1fb3B0aW9uX2luc3RfYWRkX3BvcnQoc3RydWN0IHRlYW0gKnRlYW0sXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIxMj1zdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2Rldixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEzMzgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjEzMzk6XHRlcnIgPSBfX3RlYW1fb3B0aW9uX2luc3RfYWRkX3BvcnQodGVhbSwgcG9ydCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEzNDAtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MzE2PWludCBudm1ldF9lbmFibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zNTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzozNTM6XHRyZXQgPSBvcHMtXHUwMDNlYWRkX3BvcnQocG9ydCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zNTQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYz0yODYzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYzoyODY0Om52bWV0X2ZjX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jLTI4NjUte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYz0yOTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZXRfZmNfdGd0X2ZjcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jLTI5OTQtXHQubXNkYmRcdFx0XHQ9IDEsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2ZjLmM6Mjk5NTpcdC5hZGRfcG9ydFx0XHQ9IG52bWV0X2ZjX2FkZF9wb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jLTI5OTYtXHQucmVtb3ZlX3BvcnRcdFx0PSBudm1ldF9mY19yZW1vdmVfcG9ydCxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz01NTI9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfbG9vcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjQ4LVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NjQ5OnN0YXRpYyBpbnQgbnZtZV9sb29wX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjUwLXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz02NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1lX2xvb3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTY3NC1cdC50eXBlXHRcdD0gTlZNRl9UUlRZUEVfTE9PUCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjY3NTpcdC5hZGRfcG9ydFx0PSBudm1lX2xvb3BfYWRkX3BvcnQsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy02NzYtXHQucmVtb3ZlX3BvcnRcdD0gbnZtZV9sb29wX3JlbW92ZV9wb3J0LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD00MTE9c3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIHtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDE4LVx0dm9pZCAoKnF1ZXVlX3Jlc3BvbnNlKShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpO1xuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oOjQxOTpcdGludCAoKmFkZF9wb3J0KShzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDIwLVx0dm9pZCAoKnJlbW92ZV9wb3J0KShzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9wY2ktZXBmLmM9MTE5Mj1zdGF0aWMgdm9pZCBudm1ldF9wY2lfZXBmX2RyYWluX3F1ZXVlKHN0cnVjdCBudm1ldF9wY2lfZXBmX3F1ZXVlICpxdWV1ZSlcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3BjaS1lcGYuYy0xMjA2LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTlZNZS1vRiBUYXJnZXQ6IEVudHJ5IFBvaW50IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgTlZNZS1vRiB0YXJnZXQgc2lkZSwgYW5kIGl0IHNlZW1zIGxpa2UgYG52bWV0X2VuYWJsZV9wb3J0YCBjb3VsZCBiZSBhIHByb21pc2luZyBlbnRyeSBwb2ludC4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHBvcnQgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGBudm1ldF9lbmFibGVfcG9ydGAgZGlyZWN0bHkgY2FsbHMgYG9wcy0mZ3Q7YWRkX3BvcnQocG9ydClgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYG52bWV0X2VuYWJsZV9wb3J0YCBpcyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyBuZXcgcG9ydCBhZGRpdGlvbnMgdG8gdGhlIHN1YnN5c3RlbS4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19hbnlfc3RvcmVgIGFuZCBgbnZtZXRfcG9ydF9zdWJzeXNfc3RvcmVgLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgdGhhdCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHBvcnQgYnJpbmctdXAgcHJvY2Vzcy4gR2l2ZW4gdGhlc2UgY2FsbCBwYXRocyBhbmQgdGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIGBvcHMtJmd0O2FkZF9wb3J0YCwgSSB0aGluayBkaWdnaW5nIGludG8gYG52bWV0X2VuYWJsZV9wb3J0YCB3aWxsIGJlIHRpbWUgd2VsbCBzcGVudCBpbiBteSBmdXp6aW5nIGNhbXBhaWduLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGl0cyBpbnRlcm5hbHMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtYWxmb3JtZWQgcG9ydCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZXRfZW5hYmxlX3BvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTEwNTQ9c3RhdGljIGludCBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xMDc5LVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cG9ydC1cdTAwM2VzdWJzeXN0ZW1zKSkge1xuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjEwODA6XHRcdHJldCA9IG52bWV0X2VuYWJsZV9wb3J0KHBvcnQpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTEwODEtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MzA0PXZvaWQgbnZtZXRfcG9ydF9kZWxfY3RybHMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsIHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zMTUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzozMTY6aW50IG52bWV0X2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMzE3LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg9NjQ3PXZvaWQgbnZtZXRfcG9ydF9kZWxfY3RybHMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTY0OS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDo2NTA6aW50IG52bWV0X2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC02NTEtdm9pZCBudm1ldF9kaXNhYmxlX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk2MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIE5WTWUtb0YgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOVk1lLW9GIGRyaXZlciBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgcG9ydCBhbmQgY29udHJvbGxlciBjcmVhdGlvbiBwYXRocy4gSSBzZWUgdGhhdCBgbnZtZXRfZW5hYmxlX3BvcnRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBlbmFibGluZyBhIG5ldyBwb3J0LiBUaGF0IG1ha2VzIHNlbnNlLCBhbmQgaXQgc2VlbXMgdG8gZGVsZWdhdGUgdG8gYGFkZF9wb3J0YCBpbnRlcm5hbGx5LiBGcm9tIHRoZSBob3N0IHNpZGUsIEkmIzM5O20gbm90aW5nIHRoYXQgYG52bWZfZGV2X3dyaXRlYCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsIGhvb2sgZm9yIGNyZWF0aW5nIGEgY29udHJvbGxlci4gTm93IEkmIzM5O20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBob3N0IHNpZGUuIExvb2tzIGxpa2UgYG52bWZfY3JlYXRlX2N0cmxgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhhdCBpdCBjYWxscyBgY3JlYXRlX2N0cmxgIHRvIGZpbmlzaCBpdHMgdGFzay4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGVzZSBmdW5jdGlvbiBuYW1lcyBhbmQgbG9vayBpbnRvIHdoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGFyb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZl9jcmVhdGVfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTMwNz1zdGF0aWMgc3RydWN0IG52bWVfY3RybCAqXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM6MTMwODpudm1mX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmKVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYz0xMzg1PXN0YXRpYyBzc2l6ZV90IG52bWZfZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxNDA2Olx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNy1cdGlmIChJU19FUlIoY3RybCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIE5WTWUvZiBXcml0ZSBQYXRoKioKCkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBudm1mX2Rldl93cml0ZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZyb20gdGhlIGhvc3Qgc2lkZSBmb3Igd3JpdGluZyBkYXRhIHRvIHRoZSBOVk1lIGRldmljZSBvdmVyIE5WTWUtb0YuIEJ1dCwgaGFuZyBvbiBhIHNlY29uZCwgdGhhdCBmdW5jdGlvbiBuYW1lIC0gYG52bWZfZGV2X3dyaXRlYCAtIHNlZW1zIHRvIHN1Z2dlc3QgaXQmIzM5O3MgbW9yZSBvZiBhIGZpbGUgb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHN1cnByaXNpbmcgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgTlZNZSB0cmFuc3BvcnQgcHJvdG9jb2wuIEhtbSwgaXMgdGhlcmUgYW55IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50IGludG8gdGhpcyBzeXN0ZW0/IEkgcmVjYWxsIGBudm1mX2NyZWF0ZV9jdHJsYCBmcm9tIHRoZSBOVk1lIG5hbWVzcGFjZSBjcmVhdGlvbiwgYnV0IHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCB0aGUgZW50cnkuIFdlbGwsIGBudm1mX2Rldl93cml0ZWAgaXMgYWxzbyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBHdWVzcyBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBmdW5jdGlvbiwgYG52bWZfZGV2X3dyaXRlYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1mX2Rldl93cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTM4Mz1zdGF0aWMgREVGSU5FX01VVEVYKG52bWZfZGV2X211dGV4KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xMzg0LVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjEzODU6c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzODYtXHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTE0Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnZtZl9kZXZfZm9wcyA9IHtcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xNDgwLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM6MTQ4MTpcdC53cml0ZVx0XHQ9IG52bWZfZGV2X3dyaXRlLFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0ODItXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAyMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBOVk1lIERyaXZlciYjMzk7cyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBOVk1lIGRyaXZlciBjb2RlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZW50cnkgcG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0hleSwgaWYgYG52bWZfZGV2X3dyaXRlYCBpcyAqc3RhdGljKiwgd2Ugc2hvdWxkIGp1c3QgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGEgbm9uLXN0YXRpYyBvbmUsIHJpZ2h0PyYjMzQ7LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBtZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkuCgpTbywgdGhlIHNpdHVhdGlvbiBpczogaWYgdGhlIG9ubHkgd2F5IGluIGlzIHRocm91Z2ggdGhpcyBgc3RhdGljYCBmdW5jdGlvbiwgdGhlbiB0aGUgKm9ubHkqIGNob2ljZXMgYXJlIHRvIHVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5LCBvciB0byBtb3ZlIHRvIHVzaW5nIHN5c2NhbGxzIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUuCgpBbmQgdGhlbiBJIHJlYWxpemUsIGhleSwgd2FpdCwgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcywgaW4gZmFjdCwgKnN0YXRpYyohIFRoYXQmIzM5O3MgYSBwb2ludC4KClNvIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpczogSSByZWFsbHkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIGNoZWNrIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AsIGFuZCBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGF0IGZpbGUgYXQgYWxsLiBUaGF0IHdpbGwgbGVhZCB0aGUgd2F5IHRvIG15IG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOVk1lIFRDUCBEcml2ZXIgU3ltYm9sIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOVk1lIFRDUCBkcml2ZXIgY29kZSwgYW5kIG15IGluaXRpYWwgc2VhcmNoIGluIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgdHVybmVkIHVwIGVtcHR5IOKAkyBubyBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwsIHVzdWFsbHkgdGhlIGhvc3Qgc2lkZSBoYXMgc29tZXRoaW5nLiBHdWVzcyB0aGUgYWN0aW9uIG1pZ2h0IGJlIGluIHRoZSB0YXJnZXQgc2lkZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgc3dpdGNoIG15IGZvY3VzIG92ZXIgdG8gYGRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNgIGFuZCBzdGFydCBteSBkZWVwIGRpdmUgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYyNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBubyBsdWNrIGZpbmRpbmcgdGhvc2Ugc3ltYm9scyBleHBvcnRlZCBpbiB0aGUgb2J2aW91cyBwbGFjZXMuIFRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgc3RhdGljIGZ1bmN0aW9ucywgb3IgcGVyaGFwcyBsZXZlcmFnZSB0aGUgbW9yZSBnZW5lcmFsIE5WTWUgZnVuY3Rpb25zLiBJIHRoaW5rIGBudm1mX2Rldl93cml0ZWAgYW5kIGBudm1ldF9lbmFibGVfcG9ydGAgY291bGQgYmUgcHJvbWlzaW5nIOKAkyBlc3BlY2lhbGx5IGBudm1ldF9lbmFibGVfcG9ydGAsIHNpbmNlIHRoYXQgKmlzbiYjMzk7dCogc3RhdGljLiBIbW0sIGhhbmcgb24uLi4gaXMgYG52bWV0X2VuYWJsZV9wb3J0YCBhY3R1YWxseSBleHBvcnRlZD8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpdHMgZXhwb3J0IHN0YXR1czsgSSYjMzk7bGwgcG9rZSBhcm91bmQgaW4gYGRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm52bWV0X2VuYWJsZV9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRDUCBOVk1lIFRhcmdldCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgTlZNZSBUQ1AgdGFyZ2V0IGFuZCB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGluZ3MgYWNjb3JkaW5nIHRvIHRoZSBwcmluY2lwbGUgb2YgdXNpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHdoZXJlIHBvc3NpYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGRpcmVjdGx5LCBhdm9pZGluZyB0aGUgZnV6emluZyB0aGF0IHdvdWxkIGNvbWUgd2l0aCBgbnZtZl9kZXZfd3JpdGVgLiBUaGVuLCBJIHdhbnRlZCB0byBjb21iaW5lIGl0IHdpdGggYG52bWV0X3RjcF9hZGRfcG9ydGAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBCdXQgdGhlbiBJIGhhZCB0byByZW1lbWJlciB0aGF0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgICppcyogc3RhdGljLiBMZXQgbWUgc2VlLCBgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5YCBpcyBhIHNvY2tldCBjYWxsYmFjaywgYW5kIGxldCYjMzk7cyBnbyB3aXRoIHRoZSBzaW1wbGVyIGFwcHJvYWNoIG9mIHVzaW5nIGBudm1lX3RjcF9zZXR1cF9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuCgpOb3csIGxldCYjMzk7cyByZXZpZXcgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50LiBUaGUgZ29hbCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJZiBhIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIFNvIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIGFyZSBnb29kIHNpbmNlIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGBudm1lX3RjcF90cmFuc3BvcnQuY3JlYXRlX2N0cmxgIGFuZCBgbnZtZXRfdGNwX29wcy5hZGRfcG9ydGAsIHJlc3BlY3RpdmVseS4gQnV0IGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgIGFyZSBjYWxsZWQgZGlyZWN0bHksIG5vdCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBzbyB0aGV5IG1pZ2h0IGJlIGlubGluZWQuCgpMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlc2Ugb3B0aW9ucyBhcmUgYXBwcm9wcmlhdGU6CiogICBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzIGFjdHVhbGx5IHN0YXRpYywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gU28gaXQgc2hvdWxkIG5vdCBiZSBpbmxpbmVkLgoqICAgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIGl0IGFsc28gc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLgoKR2l2ZW4gdGhhdCBhbmFseXNpcywgd2hhdCBvdGhlciBvcHRpb25zIGRvIHdlIGhhdmU/IFRoZSBnb2FsIGlzIHRvIHByZWZlciB0aG9zZSBmdW5jdGlvbnMuCgpJIHRoaW5rIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLCBzaW5jZSBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd29uJiMzOTt0IGJlIGlubGluZWQgZWl0aGVyLgoKU28sIGxldCYjMzk7cyBmb2N1cyBvbjoKCiogICBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgCiogICBgbnZtZXRfdGNwX2FkZF9wb3J0YAoqICAgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AKCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBjb2RlLCB0aGVzZSB3b3VsZCBiZToKCiogICBgTlZNRV9UQ1BgCiogICBgTlZNRV9UQVJHRVRfVENQYAoqICAgYElQVjZgCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZywgYnV0IGBJUFY2YCAqaXMqIHJlcXVpcmVkIHNpbmNlIHRoZSBjb2RlIHBhdGggaXMgb25seSBlbmFibGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLgoKRnVydGhlcm1vcmUsIGBOVk1FX1RBUkdFVGAgaXMgaW5kaXJlY3RseSByZXF1aXJlZCwgc2luY2UgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgTlZNRV9UQVJHRVRgLiBgTlZNRV9UQ1BgIGRlcGVuZHMgb24gYElORVRgIGFuZCBgQkxPQ0tgLiBBbmQgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBOVk1FX1RBUkdFVGAuIFNvLCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgYmVjb21lczoKCiogICBgTlZNRV9UQ1BgCiogICBgTlZNRV9UQVJHRVRgCiogICBgTlZNRV9UQVJHRVRfVENQYAoqICAgYElQVjZgCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBOVk1FX0NPUkVgIGlzbiYjMzk7dCByZXF1aXJlZCBidXQgaXQmIzM5O3Mgbm90LiBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBwbGFuIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBOVk1FX1RDUFxuICA4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclwmIzM0O1xuICA4NTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gIDg3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgODg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDg5Olx0XHRzZWxlY3QgTlZNRV9GQUJSSUNTXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIE5WTWUgb3ZlciBGYWJyaWNzIHByb3RvY29sIHVzaW5nXG4gIDkyOlx0XHQgIHRoZSBUQ1AgdHJhbnNwb3J0LiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSByZW1vdGUgYmxvY2sgZGV2aWNlc1xuICA5MzpcdFx0ICBleHBvcnRlZCB1c2luZyB0aGUgTlZNZSBwcm90b2NvbCBzZXQuXG4gIDk0Olx0XG4gIDk1Olx0XHQgIFRvIGNvbmZpZ3VyZSBhIE5WTWUgb3ZlciBGYWJyaWNzIGNvbnRyb2xsZXIgdXNlIHRoZSBudm1lLWNsaSB0b29sXG4gIDk2Olx0XHQgIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LW52bWUvbnZtZS1jbGkuXG4gIDk3Olx0XG4gIDk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODM5CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDUxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlZNZS9UQ1AgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2hhdCBpdCBtZWFucyBmb3IgZnV6emluZyBlZmZvcnRzLiBJIHNlZSB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgTlZNZSBvdmVyIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBjb25maWd1cmUgdGhlaXIgbmV0d29yayBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgYnkgc3dpdGNoaW5nIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gVGhpcyBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBjYXJlZnVsIGV4YW1pbmF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBhZGRpdGlvbiBvZiBJUHY2IFRDTEFTUyBzdXBwb3J0LiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHRoYXQgb3VyIGZ1enppbmcgc3RyYXRlZ3kgbmVlZHMgdG8gYWRhcHQuCgpMZXQmIzM5O3MgYmVnaW4gd2l0aCB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcy4gRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBOVk1lL1RDUCBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGVkOiBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBgTlZNRV9UQVJHRVRfVENQYCwgYW5kIGBJUFY2YC4gR2l2ZW4gdGhhdCBgTlZNRV9GQUJSSUNTYCBpbXBsaWNpdGx5IHNlbGVjdHMgYE5WTUVfQ09SRWAsIEkgY2FuIHNraXAgZXhwbGljaXRseSBsaXN0aW5nIGBOVk1FX0NPUkVgLiBUaGUga2VybmVsIGNvbmZpZyBkZXBlbmRlbmNpZXMgd2VyZSBjcml0aWNhbCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9uIGluIGVudmlyb25tZW50cyB1dGlsaXppbmcgdGhlIFRDUCB0cmFuc3BvcnQsIHN1Y2ggYXMgdGhvc2UgdXRpbGl6aW5nIHZpcnR1YWxpemVkIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy4KCk5vdywgd2hlcmUgZG8gSSBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IFRoZSBwYXRjaCBoaWdobGlnaHRzIHRoZSBjcnVjaWFsIGFyZWFzIG9mIGNvbnRyb2xsZXIgY3JlYXRpb24gYW5kIHBvcnQgYWRkaXRpb24gd2hlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIFRoaXMgbGVhZHMgbWUgdG8gcGlucG9pbnQgdGhlIGZvbGxvd2luZyBrZXkgZnVuY3Rpb25zOiBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgLCBgbnZtZXRfdGNwX2FkZF9wb3J0YCwgYW5kIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLgoKTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IG15IGFzc3VtcHRpb25zIG9uIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGluZGVlZCBjYWxsIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGFuZCB0aGVuIGNhbGxzIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNvY2tldCBpcyBwcm9wZXJseSBjb25maWd1cmVkIHdoZW4gdXNpbmcgdGhpcy4gU28geWVzLCB0aGlzIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBhbmQgYSBnb29kIGVudHJ5IHBvaW50LgoKU2ltaWxhcmx5LCBJIHNob3VsZCBhbHNvIHZlcmlmeSB0aGF0IGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgYSBnb29kIGVudHJ5IHBvaW50LCB3aGljaCBjYWxscyBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgd2hpY2ggY2FsbHMgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYG52bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AsIHdoaWNoIGNhbGxzIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAuIFl1cCwgdGhhdCBjb25maXJtcyBpdC4KCldpdGggdGhpcyBhbmFseXNpcyBjb21wbGV0ZSwgaXQmIzM5O3MgdGltZSB0byBmbGFnIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiB3aXRoaW4gbXkgZnV6emluZyBzdHJhdGVneS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBoYW5kbGluZywgZXJyb3IgcGF0aHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBzb2NrZXQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIElQdjYgVENMQVNTLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlZNRV9UQ1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlZNRV9UQ1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMTc0ZDZlNDk2MThjMmY2M2UzY2Q0ZDIxZDZmODg2ZWE1M2Q0MDY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDE6NTA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO2xpbmcpLCBzaXplb2YobGluZykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSwKJiM0MzsJCQkJICBzdHJsZW4oaWZhY2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcykKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0b3MpLCBzaXplb2YodG9zKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikKJiM0MzsJCWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsIElQVjZfVENMQVNTLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RjbGFzcyksIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCQkJCWtleV9zZXJpYWxfdCBwc2tpZCkKIHsKQEAgLTE4MTksMjQgJiM0MzsxODY5LDI2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAjZW5kaWYKIAogCS8qIFNpbmdsZSBzeW4gcmV0cnkgKi8KLQl0Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgMSk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIDEpOwogCiAJLyogU2V0IFRDUCBubyBkZWxheSAqLwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCS8qCiAJICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0CiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApCi0JCWlwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwlpZiAobmN0cmwtJmd0O29wdHMtJmd0O3RvcyAmZ3Q7PSAwKSB7CiYjNDM7CQludm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtJmd0O3NvY2stJmd0O3NrLCBuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zKTsKJiM0MzsJCW52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwl9CiAKIAkvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqLwogCXF1ZXVlLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2dGltZW8gPSAxMCAqIEhaOwpAQCAtMTg2NCwxMCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCiAJaWYgKG5jdHJsLSZndDtvcHRzLSZndDttYXNrICZhbXA7IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHsKIAkJY2hhciAqaWZhY2UgPSBuY3RybC0mZ3Q7b3B0cy0mZ3Q7aG9zdF9pZmFjZTsKLQkJc29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTsKIAotCQlyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtJmd0O3NvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKLQkJCQkgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpOwomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgaWZhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiAJCQkgICYjMzQ7ZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwppbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTE2OTYsMTAgJiM0MzsxNjk2LDYyIEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKQogCXJlYWRfdW5sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7bGluZyksIHNpemVvZihsaW5nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSBTS19DQU5fUkVVU0U7CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwl1OCB0b3MgPSBpbmV0X3NrKHNrKS0mZ3Q7cmN2X3RvczsKJiM0MzsKJiM0MzsJaWYgKHRvcyAmZ3Q7IDApCiYjNDM7CQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RvcyksIHNpemVvZih0b3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikgewomIzQzOwkJdTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktJmd0O3Jjdl9mbG93aW5mbyk7CiYjNDM7CiYjNDM7CQlpZiAodGNsYXNzICZndDsgMCkKJiM0MzsJCQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUFY2LAomIzQzOwkJCQkJICAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKCZhbXA7dGNsYXNzKSwKJiM0MzsJCQkJCSAgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS0mZ3Q7c29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLSZndDtzayk7CiAJaW50IHJldDsKIAogCXJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLApAQCAtMTcxNywxNCAmIzQzOzE3NjksMTQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpCiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwogCiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkoc29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJLyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi8KLQlpZiAoaW5ldC0mZ3Q7cmN2X3RvcyAmZ3Q7IDApCi0JCWlwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzaywgaW5ldC0mZ3Q7cmN2X3Rvcyk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stJmd0O3NrKTsKIAogCXJldCA9IDA7CiAJd3JpdGVfbG9ja19iaCgmYW1wO3NvY2stJmd0O3NrLSZndDtza19jYWxsYmFja19sb2NrKTsKQEAgLTIwOTgsMTAgJiM0MzsyMTUwLDEwIEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydCkKIAlwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gcG9ydDsKIAlwb3J0LSZndDtkYXRhX3JlYWR5ID0gcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHk7CiAJcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7Ci0Jc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKLQl0Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkocG9ydC0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJcmV0ID0ga2VybmVsX2JpbmQocG9ydC0mZ3Q7c29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopJmFtcDtwb3J0LSZndDthZGRyLAogCQkJc2l6ZW9mKHBvcnQtJmd0O2FkZHIpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTgKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMTAwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOVk1lIFRDUCBTb2NrZXQgT3B0aW9uIFdyYXBwZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIGBzb2NrXypgIGZ1bmN0aW9ucyDigJMgYHNvY2tfbm9fbGluZ2VyYCwgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCBhbmQgdGhlIGxpa2Ug4oCTIHdpdGggY3VzdG9tIHdyYXBwZXJzLiBUaGVzZSB3cmFwcGVycywgc3VjaCBhcyBgbnZtZV90Y3Bfc29ja19ub19saW5nZXJgLCBhcmUgdGhlbiB1c2luZyBgZG9fc29ja19zZXRzb2Nrb3B0YCB3aXRoIGBLRVJORUxfU09DS1BUUmAgdG8gYWN0dWFsbHkgc2V0IHRoZSBzb2NrZXQgb3B0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLiBgZG9fc29ja19zZXRzb2Nrb3B0YCB0YWtlcyBhIGBzb2NrcHRyX3RgIGNvbnN0cnVjdGVkIHZpYSBgS0VSTkVMX1NPQ0tQVFJgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgd2hldGhlciBvciBub3QgdGhlIHZhcmlhYmxlcyBiZWluZyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBJJiMzOTttIHNlZWluZyBsb2NhbCB2YXJpYWJsZXMgYmVpbmcgcGFzc2VkIGluLCBsaWtlIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIGFuIGBpbnQgdmFsID0gMTtgLCBhbmQgdGhlIG90aGVycy4gSSBjYW4gY29uZmlybSB0aGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IGluIHRoZXJlPyYjMzQ7IEJ1dCBpdCBsb29rcyBsaWtlIGV2ZXJ5dGhpbmcmIzM5O3MgaW5pdGlhbGl6ZWQuIGBzdHJ1Y3QgbGluZ2VyYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGBpbnQgdmFsYCBpcywgYHByaW9yaXR5YCwgYGlmYWNlYCwgYHRvc2AsIGFuZCBgdGNsYXNzYCBhcmUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGJ1dCB0aGV5IGFyZSBhbGwgaW5pdGlhbGl6ZWQuIFRoZSB2YWx1ZXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBgdG9zYCBhbmQgYHRjbGFzc2AgdmFsdWVzIGxvb2sgdG8gYmUgaW5pdGlhbGl6ZWQgYXMgd2VsbC4gCgpTaW5jZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBhIGtlcm5lbCBmdW5jdGlvbiwgS01TQU4gd291bGQgaGF2ZSBjYXVnaHQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKT2YgY291cnNlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHNpemVzIGFyZSBjb3JyZWN0LiBJZiB3ZSBhcmUgcGFzc2luZyBpbmNvcnJlY3Qgc2l6ZXMsIGBkb19zb2NrX3NldHNvY2tvcHRgIGNvdWxkIHJlYWQgYmV5b25kIHRoZSBpbnRlbmRlZCBib3VuZHMuIEJ1dCwgdGhlIHNpemVzIGJlaW5nIHBhc3NlZCBhcmUgYHNpemVvZihsaW5nKWAsIGBzaXplb2YocHJpb3JpdHkpYCwgYHNpemVvZih2YWwpYCwgYHNpemVvZih0b3MpYCwgYW5kIGBzaXplb2YodGNsYXNzKWAg4oCTIHRoYXQmIzM5O3MgZ29vZCEKClRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBpdCYjMzk7cyByZWZhY3RvcmluZywgcG9zc2libHkgZGVhbGluZyB3aXRoIHNvbWUgYHNvY2tfc2V0c29ja29wdGAgdnMuIGBkb19zb2NrX3NldHNvY2tvcHRgIG51YW5jZXMgb3IgcGVyaGFwcyByZWxhdGluZyB0byBgc29ja3B0cl90YCBjaGFuZ2VzIG9yIHRoZSByZW1vdmFsIG9mIHRob3NlIGBzb2NrX3NldF8qYCBoZWxwZXJzLgoKU28sIGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSB2YXJpYWJsZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIGxpbmdlciBzdHJ1Y3QgbG9va3MgbGlrZSBpdCBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIElzIHRoZXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGFuIGlzc3VlIHdpdGggYHN0cnVjdCBsaW5nZXJgPyBObywgYSBgc3RydWN0IGxpbmdlcmAgY29udGFpbnMgdHdvIGBpbnRgcyBzbywgaXQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFsc28sIHRoaXMgcGF0Y2ggaXMgb25seSBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGZyb20gdGhlIGtlcm5lbDsgdGhlcmUgYXJlIG5vIGNoYW5nZXMgb3IgYWRkaXRpb25zIHRvIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBubyBuZXcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgc2hpZnRzIHRoZSBtZXRob2Qgb2Ygc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIHRoZSBsZWdhY3kgaGVscGVycyB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGFueSBzb3J0IG9mIGluZm9ybWF0aW9uIGxlYWsuCgpSZXZpZXdpbmcgdGhlIHJ1bGVzOiBUaGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gQWxsIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gSSB3aWxsIHNldCBpdCB0byBmYWxzZSBhbmQgZG9jdW1lbnQgbXkgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IGNhbGxzIHRvIHNvY2tldCBvcHRpb24gaGVscGVycyAobGlrZSBgc29ja19ub19saW5nZXJgLCBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBldGMuKSB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYEtFUk5FTF9TT0NLUFRSYC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKHN1Y2ggYXMgYHN0cnVjdCBsaW5nZXIgbGluZ2AsIGBpbnQgdmFsYCwgYHUzMiBwcmlvcml0eWAsIGB1OCB0b3NgLCBgdTggdGNsYXNzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGlzIG5vIHBhZGRpbmcgaW4gdGhlc2Ugc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTA6NTguNzE0NDg5MzUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMjY3MDYyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTA6NTguNzE0NDk1MzQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIwODcyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjE3NGQ2ZTQ5NjE4YzJmNjNlM2NkNGQyMWQ2Zjg4NmVhNTNkNDA2NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXFxuaW5kZXggYmE1YzdiM2UyYTdjNi4uNjU3YWNhZTllNGE0MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXFxuQEAgLTE3NzQsNiArMTc3NCw1NiBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XFxuK1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcXG4rXFx0XFx0XFx0ICAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcXG4re1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcXG4re1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxcbitcXHRcXHRcXHRcXHQgIFNPX0JJTkRUT0RFVklDRSwgS0VSTkVMX1NPQ0tQVFIoaWZhY2UpLFxcbitcXHRcXHRcXHRcXHQgIHN0cmxlbihpZmFjZSkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRpbnQgdmFsID0gMTtcXG4rXFxuK1xcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXFxuK1xcdFxcdFxcdCAgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4re1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfU1lOQ05ULFxcbitcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXFxuK3tcXG4rXFx0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVAsIElQX1RPUyxcXG4rXFx0XFx0XFx0ICAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuK1xcdFxcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsIElQVjZfVENMQVNTLFxcbitcXHRcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dGNsYXNzKSwgc2l6ZW9mKHRjbGFzcykpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcXG4gXFx0XFx0XFx0XFx0a2V5X3NlcmlhbF90IHBza2lkKVxcbiB7XFxuQEAgLTE4MTksMjQgKzE4NjksMjYgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiBTaW5nbGUgc3luIHJldHJ5ICovXFxuLVxcdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLCAxKTtcXG4rXFx0bnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgMSk7XFxuIFxcbiBcXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXFxuLVxcdHRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxcbiBcXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXFxuIFxcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXFxuIFxcdCAqL1xcbi1cXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRudm1lX3RjcF9zb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbiBcXG4gXFx0aWYgKHNvX3ByaW9yaXR5IFxcdTAwM2UgMClcXG4tXFx0XFx0c29ja19zZXRfcHJpb3JpdHkocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLCBzb19wcmlvcml0eSk7XFxuK1xcdFxcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbiBcXG4gXFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cXG4tXFx0aWYgKG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MgXFx1MDAzZT0gMClcXG4tXFx0XFx0aXBfc29ja19zZXRfdG9zKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyk7XFxuK1xcdGlmIChuY3RybC1cXHUwMDNlb3B0cy1cXHUwMDNldG9zIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0bnZtZV90Y3Bfc29ja19zZXRfdG9zKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyk7XFxuK1xcdFxcdG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqL1xcbiBcXHRxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcXG5AQCAtMTg2NCwxMCArMTkxNiw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuIFxcbiBcXHRpZiAobmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZW1hc2sgXFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XFxuIFxcdFxcdGNoYXIgKmlmYWNlID0gbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZWhvc3RfaWZhY2U7XFxuLVxcdFxcdHNvY2twdHJfdCBvcHR2YWwgPSBLRVJORUxfU09DS1BUUihpZmFjZSk7XFxuIFxcbi1cXHRcXHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXFx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcXG4rXFx0XFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgaWZhY2UpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4gXFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXFxuQEAgLTE2OTYsMTAgKzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcXG4rXFxuK1xcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcXG4re1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IFNLX0NBTl9SRVVTRTtcXG4rXFxuK1xcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IDE7XFxuK1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHR1OCB0b3MgPSBpbmV0X3NrKHNrKS1cXHUwMDNlcmN2X3RvcztcXG4rXFxuK1xcdGlmICh0b3MgXFx1MDAzZSAwKVxcbitcXHRcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxcbitcXHRcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0dTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXFx1MDAzZXJjdl9mbG93aW5mbyk7XFxuK1xcbitcXHRcXHRpZiAodGNsYXNzIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ0Y2xhc3MpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzaXplb2YodGNsYXNzKSk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cXHUwMDNlc29jaztcXG4tXFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cXHUwMDNlc2spO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXFxuQEAgLTE3MTcsMTQgKzE3NjksMTQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXFxuIFxcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcXG4gXFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cXG4gXFx0ICovXFxuLVxcdHNvY2tfbm9fbGluZ2VyKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0bnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXFx1MDAzZXNrKTtcXG4gXFxuIFxcdGlmIChzb19wcmlvcml0eSBcXHUwMDNlIDApXFxuLVxcdFxcdHNvY2tfc2V0X3ByaW9yaXR5KHNvY2stXFx1MDAzZXNrLCBzb19wcmlvcml0eSk7XFxuK1xcdFxcdG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbiBcXG4gXFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cXG4tXFx0aWYgKGluZXQtXFx1MDAzZXJjdl90b3MgXFx1MDAzZSAwKVxcbi1cXHRcXHRpcF9zb2NrX3NldF90b3Moc29jay1cXHUwMDNlc2ssIGluZXQtXFx1MDAzZXJjdl90b3MpO1xcbitcXHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0bnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuQEAgLTIwOTgsMTAgKzIxNTAsMTAgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcXG4gXFx0cG9ydC1cXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcXG4tXFx0c29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4tXFx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4rXFx0bnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbiBcXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRcXHRudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcXG4gXFxuIFxcdHJldCA9IGtlcm5lbF9iaW5kKHBvcnQtXFx1MDAzZXNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVxcdTAwMjZwb3J0LVxcdTAwM2VhZGRyLFxcbiBcXHRcXHRcXHRzaXplb2YocG9ydC1cXHUwMDNlYWRkcikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTowMC4xMzYxOTc1NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA1OTkyNDY5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3RjcF9jcmVhdGVfY3RybFwiLFxuICAgIFwibnZtZXRfdGNwX2FkZF9wb3J0XCIsXG4gICAgXCJudm1ldF90Y3BfYWNjZXB0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBvdmVyIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyB0byB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAgZm9yIHNldHRpbmcgc29ja2V0IG9wdGlvbnMgaW5zdGVhZCBvZiBkaXJlY3QgZnVuY3Rpb24gY2FsbHMuIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIHRoZSBgSVBWNl9UQ0xBU1NgIHNvY2tldCBvcHRpb24gZm9yIElQdjYgc29ja2V0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0d29yayBzb2NrZXQgY29uZmlndXJhdGlvbiBvZiB0aGUgTlZNZSBUQ1AgdHJhbnNwb3J0LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbnRyb2xsZXIgY3JlYXRpb24gYW5kIHBvcnQgYWRkaXRpb24gcGF0aHMgd2hlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxNzRkNmU0OTYxOGMyZjYzZTNjZDRkMjFkNmY4ODZlYTUzZDQwNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgKzE3NzQsNTYgQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbitcdFx0XHRcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXG4rXHRcdFx0XHQgIHN0cmxlbihpZmFjZSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbit7XG4rXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4rXHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLCBzaXplb2YodGNsYXNzKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4ge1xuQEAgLTE4MTksMjQgKzE4NjksMjYgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4gXG4gXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4gXG4gXHQvKlxuIFx0ICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0XG4gXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXG4gXHQgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LlxuIFx0ICovXG4tXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMCkge1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0fVxuIFxuIFx0LyogU2V0IDEwIHNlY29uZHMgdGltZW91dCBmb3IgaWNyZXNwIHJlY3Ztc2cgKi9cbiBcdHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2dGltZW8gPSAxMCAqIEhaO1xuQEAgLTE4NjQsMTAgKzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFxuIFx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfSE9TVF9JRkFDRSkge1xuIFx0XHRjaGFyICppZmFjZSA9IG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlaG9zdF9pZmFjZTtcbi1cdFx0c29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTtcbiBcbi1cdFx0cmV0ID0gc29ja19zZXRzb2Nrb3B0KHF1ZXVlLVx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcbi1cdFx0XHRcdCAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTE2OTYsMTAgKzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gU0tfQ0FOX1JFVVNFO1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IHRvcyA9IGluZXRfc2soc2spLVx1MDAzZXJjdl90b3M7XG4rXG4rXHRpZiAodG9zIFx1MDAzZSAwKVxuK1x0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbitcdFx0dTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbitcbitcdFx0aWYgKHRjbGFzcyBcdTAwM2UgMClcbitcdFx0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXG4rXHRcdFx0XHRcdCAgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuK1x0XHRcdFx0XHQgICBzaXplb2YodGNsYXNzKSk7XG4rXHR9XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cdTAwM2Vzb2NrO1xuLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cdTAwM2Vzayk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXG5AQCAtMTcxNywxNCArMTc2OSwxNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKGluZXQtXHUwMDNlcmN2X3RvcyBcdTAwM2UgMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2ssIGluZXQtXHUwMDNlcmN2X3Rvcyk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVx1MDAzZXNrKTtcbiBcbiBcdHJldCA9IDA7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNnNvY2stXHUwMDNlc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5AQCAtMjA5OCwxMCArMjE1MCwxMCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcbiBcdHBvcnQtXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7XG4tXHRzb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0bnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MDAuMTM2MTk5MTIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEzNTU2NzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOVk1lIG92ZXIgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9udm1lL2hvc3QvdGNwLmNgIGFuZCBgZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGEgc29ja2V0IG9wdGlvbiBvdmVyaGF1bCwgcmVwbGFjaW5nIHRoZSBleGlzdGluZyBjYWxscyBsaWtlIGB0Y3Bfc29ja19zZXRfc3luY250YCwgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgZXRjLiwgd2l0aCBhIGN1c3RvbSB3cmFwcGVyIHRoYXQgdWx0aW1hdGVseSBjYWxscyBgZG9fc29ja19zZXRzb2Nrb3B0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFNlZW1zIGxpa2UgYSBtb3ZlIHRvd2FyZCBhIG1vcmUgY2VudHJhbGl6ZWQgc29ja2V0IG9wdGlvbiBtYW5hZ2VtZW50IGFwcHJvYWNoLCB3aGljaCBjb3VsZCBvZmZlciBiZW5lZml0cyBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHkgYW5kIGNvbnRyb2wuIEFkZGluZyBgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzYCBhbmQgYG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3NgIHRvIHNldCBgSVBWNl9UQ0xBU1NgIGlmIHRoZSBzb2NrZXQgaXMgSVB2NiBpcyBhbHNvIGFkZGVkLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGlzIHBhdGNoLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBjaGFuZ2VzIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCBhbmQgaXQgYWRkcyBJUHY2IHRyYWZmaWMgY2xhc3MgY29uZmlndXJhdGlvbiwgc28gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHZpcnR1YWxpemF0aW9uOyBjYW4gSSByZWFzb25hYmx5IHJlcHJvZHVjZSB0aGlzIGluIGEgdGVzdCBlbnZpcm9ubWVudD8gVGhhbmtmdWxseSwgdGhlIHRleHQgY29uZmlybXMgdGhhdCBOVk1lIG92ZXIgVENQIGlzIHRlc3RhYmxlIHZpYSBsb29wYmFjayBvciB2ZXRoIGludGVyZmFjZXMgaW4gUUVNVSwgc28gdGhhdOKAmXMgYSBwbHVzLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuIFNvLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgbmV3IG9yIG1vZGlmaWVkIGZ1bmN0aW9ucy4gYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCBhbmQgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AgYXJlIHdoZXJlIEnigJlsbCBuZWVkIHRvIHB1dCBteSBmb2N1cy4gSSdsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYmxpbmQgc3BvdHMgSSBtaWdodCBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MDYuMjcxNzY5NTE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTQyNjEzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3BfYWxsb2NfcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxOD1zdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODI3OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cXHRcXHRcXHRcXHRrZXlfc2VyaWFsX3QgcHNraWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMTM4PXN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE1NzpcXHRyZXQgPSBudm1lX3RjcF9hbGxvY19xdWV1ZShjdHJsLCAwLCBwc2tpZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE1OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE3Mj1zdGF0aWMgaW50IF9fbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTk3LVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBjdHJsLVxcdTAwM2VxdWV1ZV9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE5ODpcXHRcXHRyZXQgPSBudm1lX3RjcF9hbGxvY19xdWV1ZShjdHJsLCBpLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTktXFx0XFx0XFx0XFx0Y3RybC1cXHUwMDNldGxzX3Bza2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MDguNDY2MDM2NDMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg1NzcwNDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTlZNZS1vRiBUQ1AgUXVldWUgQWxsb2NhdGlvbjogRGlnZ2luZyBEZWVwZXIqKlxuXG5Pa2F5LCBzbyBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNhcnZlcyBvdXQgdGhlIHF1ZXVlcyBmb3IgTlZNZSBvdmVyIFRDUCwgZ290IGl0LiBJdCdzIGNhbGxlZCBmcm9tIGJvdGggYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgdGhlIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBpdCdzIGZ1bmRhbWVudGFsIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaG9zdCBkcml2ZXIuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gc2V0IHVwIHRob3NlIHF1ZXVlcyB0byBoYW5kbGUgY29tbWFuZHMuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNvY2tldHMgYXJlIGFzc29jaWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToxMS4zMjM3NDMwNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4NDU2NjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzM4PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzUxLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTc1MjpzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTMte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xODc2PXN0YXRpYyB2b2lkIG52bWV0X3RjcF90bHNfaGFuZHNoYWtlX2RvbmUodm9pZCAqZGF0YSwgaW50IHN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTkwMC1cXHRpZiAoIXN0YXR1cylcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5MDE6XFx0XFx0c3RhdHVzID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5MDItXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE5NjM9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA0MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIwNDE6XFx0cmV0ID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIwNDItXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MTQuNzA4MzE2Njc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MDgzNDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTlZNZS9UQ1AgUXVldWUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlLiBJIHJlbWVtYmVyIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfZG9uZWAgYW5kIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgLiBUaGF0J3MgcmlnaHQsIHRob3NlIGFyZSBrZXkgY29tcG9uZW50cyB3aXRoaW4gdGhlIE5WTWUgb3ZlciBUQ1AgdGFyZ2V0IGRyaXZlci4gU28sIGJhc2ljYWxseSwgaXQncyBjZW50cmFsIHRvIHNldHRpbmcgdXAgdGhlIHNvY2tldCBjb25uZWN0aW9uIGZvciBhIHF1ZXVlLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBMZXQncyB0cmFjZSBpdCBiYWNrLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgbnZtZXRfdGNwX2FkZF9wb3J0YCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToxNy42OTkxNTI3NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MTgwOTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1ldF90Y3BfYWRkX3BvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0yMDkwPXN0YXRpYyB2b2lkIG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDUtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMTA2OnN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDcte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0yMjgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZXRfdGNwX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4Ni1cXHQubXNkYmRcXHRcXHRcXHQ9IDEsXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMjg3OlxcdC5hZGRfcG9ydFxcdFxcdD0gbnZtZXRfdGNwX2FkZF9wb3J0LFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4OC1cXHQucmVtb3ZlX3BvcnRcXHRcXHQ9IG52bWV0X3RjcF9yZW1vdmVfcG9ydCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MTkuODcwOTcyNTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE1NDIwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgTlZNZSBvdmVyIFRDUCBUYXJnZXQ6IFRhcmdldGVkIEFyZWFzIGFuZCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbnZtZXRfdGNwX2FkZF9wb3J0YCwgd2hpY2ggaXMgdGhlIGBhZGRfcG9ydGAgY2FsbGJhY2sgZm9yIHRoZSBOVk1lIG92ZXIgVENQIHRhcmdldC4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgY2hhbmdlcyB3b3J0aCBmdXp6aW5nPyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkuIEkgc2VlIGNoYW5nZXMgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSBjb25maWd1cmVkLCBhbmQgYSBuZXcgc2V0dGluZyBmb3IgYElQVjZfVENMQVNTYCBoYXMgYmVlbiBhZGRlZC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgYXJlYXMgdGhhdCBjb3VsZCBiZSBzdXNjZXB0aWJsZSB0byBzdWJ0bGUgYnVncy5cblxuU28sIHdoZXJlIHNob3VsZCBJIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cz8gSSBpbml0aWFsbHkgdGhvdWdodCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgLCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCwgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIHdlcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMuIEFoLCB3YWl0LCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgSSBjYW4gYWN0dWFsbHkgdHJpZ2dlciBmcm9tIHRoZSBvdXRzaWRlLiBPa2F5LCBhZnRlciBhIHF1aWNrIGxvb2ssIGl0IHNlZW1zIGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgaXMgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IGFzIGl0IGlzIGNhbGxlZCBmcm9tIGBudm1lX3RjcF9zZXR1cF9jdHJsYC4gVGhpcyBpcyB0aGUgb25lIHRvIHRhcmdldCFcblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToyMy41ODYzOTU1ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjAwMDQ2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3Bfc2V0dXBfY3RybFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDMxPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDM1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0MzY6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Mzcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjUxOT1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1MjctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjUyODpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTI5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNTg5PXN0YXRpYyB2b2lkIG52bWVfcmVzZXRfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MDgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYwOTpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjEwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0zMDQ0PXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX3RjcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDYzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMwNjQ6XFx0cmV0ID0gbnZtZV90Y3Bfc2V0dXBfY3RybChcXHUwMDI2Y3RybC1cXHUwMDNlY3RybCwgdHJ1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzA2NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToyNS43MDY0MTUwMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMjEzMjg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gQ29udHJvbGxlciBDcmVhdGlvbiAobnZtZV90Y3BfY3JlYXRlX2N0cmwpKipcblxuQWxyaWdodCwgc28gYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgdGFsa2luZyBhYm91dCBoZXJlLiBUaGlua2luZyBhYm91dCBpdCwgdGhpcyBpcyB0aGUgYmlnIG9uZSwgdGhlIGNvcmUgZW50cnkgcG9pbnQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucywgdGhlIHN0YXJ0aW5nIGd1biBmb3IgYnJpbmdpbmcgYSBuZXcgY29udHJvbGxlciBpbnRvIGV4aXN0ZW5jZSwgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUuIEl0J3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwIGZvciBhIE5WTWUvVENQIGNvbnRyb2xsZXIsIHJpZ2h0PyBFdmVyeXRoaW5nIGVsc2UgcHJvYmFibHkgZmxvd3MgZnJvbSB0aGlzIHBvaW50LiBXZSdyZSB0YWxraW5nIGFib3V0IGtpY2tpbmcgb2ZmIGFsbCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIG5lY2Vzc2FyeSB0byBlc3RhYmxpc2ggYSBmdW5jdGlvbmFsIE5WTWUgY29udHJvbGxlciBpbnN0YW5jZS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgXCJob3dcIiBvZiBtYWtpbmcgdGhpbmdzIHdvcmssIGFuZCBiZWluZyByZWFkeSB0byByZXNwb25kIHRvIHJlcXVlc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzYxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MjguNTM4NTUyMDIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2MjQ3ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfdGNwX2NyZWF0ZV9jdHJsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI5NjI9c3RhdGljIHN0cnVjdCBudm1lX3RjcF9jdHJsICpudm1lX3RjcF9hbGxvY19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwNDMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA0NDpzdGF0aWMgc3RydWN0IG52bWVfY3RybCAqbnZtZV90Y3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwNDUtXFx0XFx0c3RydWN0IG52bWZfY3RybF9vcHRpb25zICpvcHRzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzA4Nj1zdGF0aWMgc3RydWN0IG52bWZfdHJhbnNwb3J0X29wcyBudm1lX3RjcF90cmFuc3BvcnQgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDk1LVxcdFxcdFxcdCAgTlZNRl9PUFRfS0VZUklORyB8IE5WTUZfT1BUX1RMU19LRVkgfCBOVk1GX09QVF9DT05DQVQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA5NjpcXHQuY3JlYXRlX2N0cmxcXHQ9IG52bWVfdGNwX2NyZWF0ZV9jdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwOTctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MzAuNzM0ODA5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk1NDAwNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRm9jdXNpbmcgRnV6emluZyBFZmZvcnRzIGluIE5WTWUtb0YgT3ZlciBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IHRoZSBmdXp6aW5nIGVmZm9ydHMgZm9yIG91ciBOVk1lLW9GIG92ZXIgVENQIGltcGxlbWVudGF0aW9uLiBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBJdCdzIG5vdCBqdXN0IHNvbWUgaW50ZXJuYWwgZnVuY3Rpb24sIGJ1dCBhIGNydWNpYWwgZW50cnkgcG9pbnQg4oCTIGEgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciBgY3JlYXRlX2N0cmxgIHdpdGhpbiB0aGUgYG52bWZfdHJhbnNwb3J0X29wc2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlLiBBIHdlbGwtcGxhY2VkIGZ1enplciBoaXR0aW5nIHRoYXQgZnVuY3Rpb24gY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIGEgd2hvbGUgaG9zdCBvZiB2dWxuZXJhYmlsaXRpZXMsIGdpdmVuIGl0cyByb2xlIGluIGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zLiBJdCdzIGEga2V5IHNwb3QgZm9yIGF0dGFjayBzdXJmYWNlLlxuXG5PbiB0aGUgdGFyZ2V0IHNpZGUsIEkgbmVlZCB0byByZW1lbWJlciBgbnZtZXRfdGNwX2FkZF9wb3J0YC4gSXQncyBhbHNvIGEgY2FsbGJhY2ssIGFuZCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgaW52ZXN0aWdhdGlvbiBhbmQgcG90ZW50aWFsIGZ1enppbmcgYXMgd2VsbCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB3ZWFrbmVzc2VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MzQuMjMwMjExOTQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwNjcxNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWV0X3RjcF9hZGRfcG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIwOTA9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwNS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDY6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwNy17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg2LVxcdC5tc2RiZFxcdFxcdFxcdD0gMSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIyODc6XFx0LmFkZF9wb3J0XFx0XFx0PSBudm1ldF90Y3BfYWRkX3BvcnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg4LVxcdC5yZW1vdmVfcG9ydFxcdFxcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTozNi40MTA4ODc2NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2MTg5OTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgTlZNZS1vRiBUQ1AgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG52bWV0X3RjcF9hZGRfcG9ydGAgZnVuY3Rpb24uIFJpZ2h0LCBpdCdzIHRoZSByZWdpc3RlcmVkIGBhZGRfcG9ydGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbnZtZXRfZmFicmljc19vcHNgIHN0cnVjdHVyZSwgc28gdGhhdCdzIGl0cyBwcmltYXJ5IHJvbGUuIEl0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IGZvciB0aGUgVENQIHRyYW5zcG9ydCwgZ290IGl0LiBJdCBoYW5kbGVzIHRoZSBpbml0aWFsIHBvcnQgc2V0dXAgZm9yIE5WTWUgb3ZlciBUQ1AsIGxpbmtpbmcgaXQgaW50byB0aGUgZnJhbWV3b3JrLlxuXG5Ob3csIEknbSBwaXZvdGluZyBzbGlnaHRseSBhbmQgdGhpbmtpbmcgYWJvdXQgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AuIFRoYXQgbWV0aG9kLCBpZiBtZW1vcnkgc2VydmVzLCBpcyBjYWxsZWQgZnJvbSBgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlYC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBzZXRzIHVwIHRoZSBhY3R1YWwgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHF1ZXVlLiAgU28gd2UgZ28gZnJvbSBwb3J0IHRvIHF1ZXVlIHRvIHNvY2tldCwgYW5kIHRoYXQgcXVldWUgaXMgdGhlIHBpZWNlIHRoYXQgbWFwcyB0byBhIHNwZWNpZmljIEkvTyBjb250ZXh0LiBXZSBhcmUgc3RhcnRpbmcgdG8gcHV0IHRvZ2V0aGVyIHRoZSBlbnRpcmUgZGF0YSBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3OTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTozOS4zNzI3OTAwOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjcxOTM2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfdGNwX2FsbG9jX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTk2MD1zdGF0aWMgdm9pZCBudm1ldF90Y3BfdGxzX2hhbmRzaGFrZV90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykge31cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTk2Mi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5NjM6c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5NjQtXFx0XFx0c3RydWN0IHNvY2tldCAqbmV3c29jaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA3Mj1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWNjZXB0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDg1LVxcdFxcdH1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIwODY6XFx0XFx0bnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHBvcnQsIG5ld3NvY2spO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA4Ny1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUxOjQxLjUzOTk5MjcwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5MTMzOTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTlZNZS1vRi9UQ1AgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IE5WTWUgb3ZlciBUQ1AgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQuIEknbSBmb2N1c2luZyBvbiB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGtleSDigJMgaXQncyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgYW5kIHRoZSBuYW1lJ3MgcHJldHR5IGNsZWFyOyBpdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yICphY2NlcHRpbmcqIG5ldyBjb25uZWN0aW9ucy4gU28sIGZyb20gYSBoaWdoIGxldmVsLCBJJ20gdGhpbmtpbmcgbXkgbWFpbiBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhcmUgZ29pbmcgdG8gYmUgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCwgYG52bWV0X3RjcF9hZGRfcG9ydGAsIGFuZCBvZiBjb3Vyc2UsIHRoYXQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgaXRzZWxmLlxuXG5Ob3csIGJlZm9yZSBJIGdvIG11Y2ggZnVydGhlciwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBuZWNlc3NhcnkgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb25zLiBTZWVtcyBvYnZpb3VzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05WTUVfVENQYCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVF9UQ1BgIGFyZSBib3RoIGVuYWJsZWQuIEdvdHRhIGdldCB0aGUgZm91bmRhdGlvbnMgcmlnaHQsIHlvdSBrbm93P1xuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NDUuMTU5MTMwNzgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg5ODUyNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTY3PWNvbmZpZyBOVk1FX0ZDXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTgyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6ODM6Y29uZmlnIE5WTUVfVENQXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy04NC1cXHR0cmlzdGF0ZSBcXFwiTlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctOTktXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoxMDA6Y29uZmlnIE5WTUVfVENQX1RMU1xcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTAxLVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTo0Ny4yNDg5OTA4MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDQxMTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE5WTWUvVENQIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBOVk1lL1RDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGtlcm5lbCdzIE5WTWUgaG9zdCBkcml2ZXIuIFRpbWUgdG8gZ28gc3BlbHVua2luZyBpbiBgZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ2AuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGZsYWcsIGxpa2VseSBuYW1lZCBgTlZNRV9UQ1BgLCBhbmQgSSdtIGFudGljaXBhdGluZyB0aGUgdXN1YWwgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZSBzZWxlY3Rpb24sIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29ya2luZyBvciBzdG9yYWdlIHN1YnN5c3RlbXMsIGFuZCB3aGF0IGtpbmQgb2YgZGVmYXVsdHMgYXJlIGluIHBsYXkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlcmUncyBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgYmFzZSBOVk1lIGhvc3QgZHJpdmVyIGFuZCB0aGUgVENQIHRyYW5zcG9ydCBsYXllciwgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIGhvdyBlbmFibGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaW1wYWN0cyB0aGUgb3ZlcmFsbCBidWlsZC4gRXNzZW50aWFsbHksIEknbSBjaGVja2luZyB0aGUgZmluZSBwcmludCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTAuNTU5NDA1MjEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBOVk1FX1RDUFxcbiAgODQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDg3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDg5OlxcdFxcdHNlbGVjdCBOVk1FX0ZBQlJJQ1NcXG4gIDkwOlxcdFxcdGhlbHBcXG4gIDkxOlxcdFxcdCAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTlZNZSBvdmVyIEZhYnJpY3MgcHJvdG9jb2wgdXNpbmdcXG4gIDkyOlxcdFxcdCAgdGhlIFRDUCB0cmFuc3BvcnQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHJlbW90ZSBibG9jayBkZXZpY2VzXFxuICA5MzpcXHRcXHQgIGV4cG9ydGVkIHVzaW5nIHRoZSBOVk1lIHByb3RvY29sIHNldC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxcbiAgOTY6XFx0XFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTAuNTU5NDk1MjAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzU2MTczNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYXNzdW1wdGlvbiBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipOVk1lLW9GIFRDUCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIGBOVk1FX1RDUGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gSXQncyBhbG1vc3QgYSBnaXZlbiwgYnV0IEkgd2FudCB0byBiZSB0aG9yb3VnaC4gV2UncmUgb2J2aW91c2x5IGdvaW5nIHRvIGJlIHJlbHlpbmcgb24gYElORVRgIGZvciB0aGUgVENQL0lQIHN0YWNrLiBUaGF0J3MgZnVuZGFtZW50YWwsIG5vIHN1cnByaXNlIHRoZXJlLiBBbmQgdGhlbiwgd2UnbGwgbmVlZCB0aGUgYEJMT0NLYCBsYXllci4gT2YgY291cnNlISBXZSBuZWVkIHRoYXQgaW50ZXJmYWNlIGZvciBoYW5kbGluZyB0aGUgYmxvY2sgc3RvcmFnZSBhc3BlY3RzIG9mIE5WTWUuIE5vIHN1cnByaXNlcyBzbyBmYXIuIE5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgb24gYE5WTUVfVEFSR0VUX1RDUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHRhcmdldCBzaWRlIGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3Ig4oCTIHRoYXQgd2UncmUgY292ZXJpbmcgYWxsIGJhc2VzIGluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIEdvdHRhIGJlIGNvbXBsZXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTMuNTk1MTE1MTI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY2ODgyMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnPTc0PWNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1BcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cXHRib29sIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUxOjU1LjY2MjAwMjk5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ0NDU2ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVk1lL1RDUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE5WTWUvVENQLCBzcGVjaWZpY2FsbHkgdGhlIGBOVk1FX1RBUkdFVF9UQ1BgIHNlY3Rpb24uIExldCdzIHB1bGwgdXAgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzcGVjdHMgb2YgdGhlIFRDUCB0cmFuc3BvcnQgSSBjYW4gY29uZmlndXJlLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IGdldCBhIGZlZWwgZm9yIGhvdyBtb2R1bGFyIHRoaXMgY29tcG9uZW50IGlzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgTlZNZSB0YXJnZXQgZnJhbWV3b3JrOyBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZC4gVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGlsbHVtaW5hdGUgdGhvc2UgcG9pbnRzLCBkZXRhaWxpbmcgdGhlIHZhcmlvdXMgY29tcGlsZS10aW1lIHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIE5WTWUtb3Zlci1UQ1AgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUxOjU4LjYwNjQ2MjA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NjpcXHRcXG4gIDg3OlxcdGNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuICA4OTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBlbmFibGVzIHRoZSBOVk1lIFRDUCB0YXJnZXQgc3VwcG9ydCwgd2hpY2ggYWxsb3dzIGV4cG9ydGluZyBOVk1lXFxuICA5MzpcXHRcXHQgIGRldmljZXMgb3ZlciBUQ1AuXFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDk2OlxcdFxcbiAgOTc6XFx0Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcXG4gIDk4OlxcdFxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4gIDk5OlxcdFxcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRfVENQXFxuIDEwMDpcXHRcXHRzZWxlY3QgTkVUX0hBTkRTSEFLRVxcbiAxMDE6XFx0XFx0c2VsZWN0IFRMU1xcbiAxMDI6XFx0XFx0aGVscFxcbiAxMDM6XFx0XFx0ICBFbmFibGVzIFRMUyBlbmNyeXB0aW9uIGZvciB0aGUgTlZNZSBUQ1AgdGFyZ2V0IHVzaW5nIHRoZSBuZXRsaW5rIGhhbmRzaGFrZSBBUEkuXFxuIDEwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTguNjA2NTI2MjE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDgwMzA5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgVmVyaWZpY2F0aW9uIC0gTlZNRV9UQVJHRVRfVENQKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5WTUVfVEFSR0VUX1RDUGAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCByZWxpZXMgb24gYElORVRgIGFuZCBgTlZNRV9UQVJHRVRgLiBHaXZlbiB0aGF0LCBteSBmaXJzdCB0aG91Z2h0IGlzLCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gYE5WTUVfVEFSR0VUX1RDUGAgaXRzZWxmLCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIGBOVk1FX1RBUkdFVGAuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEVuc3VyaW5nIHRoYXQgYmFzZSBjb21wb25lbnQgaXMgc291bmQgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGFueXRoaW5nIHRoYXQgYXJpc2VzIHdpdGggdGhlIFRDUCBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYE5WTUVfVEFSR0VUYCBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjAxLjQxNDU1OTM5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MjQ1MTk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9UQVJHRVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIk5WTWUgVGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjIwOmNvbmZpZyBOVk1FX1RBUkdFVF9ERUJVR0ZTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTIxLSAgICAgICAgYm9vbCBcXFwiTlZNZSBUYXJnZXQgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyOTpjb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMzAtXFx0Ym9vbCBcXFwiTlZNZSBUYXJnZXQgUGFzc3Rocm91Z2ggc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NDE6Y29uZmlnIE5WTUVfVEFSR0VUX0xPT1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIk5WTWUgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTEtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjUyOmNvbmZpZyBOVk1FX1RBUkdFVF9SRE1BXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBSRE1BIHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTYyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo2Mzpjb25maWcgTlZNRV9UQVJHRVRfRkNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjQtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEZDIHRhcmdldCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzMtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjc0OmNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEZDIFRyYW5zcG9ydCBMb29wYmFjayBUZXN0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cXHRib29sIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTA5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMTA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gaW4gdGFyZ2V0IHNpZGVcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTE5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhfREVCVUdcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTIxLVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTI4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BDSV9FUEZcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTMwLVxcdHRyaXN0YXRlIFxcXCJOVk1lIFBDSSBFbmRwb2ludCBGdW5jdGlvbiB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MDMuNTA3MDE3NzI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDA0NDUzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBgTlZNRV9UQVJHRVRgIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIE5WTUUgVGFyZ2V0IEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYE5WTUVfVEFSR0VUYCBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIG9mIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSByZXZlYWxzIGl0c2VsZiwgbGV0dGluZyB1cyBkZWZpbmUgc2V0dGluZ3Mgd2l0aCBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIGRlZmF1bHRzLCB0aGUgd2hvbGUgZW5jaGlsYWRhLCBhbmQgSSdtIGVhZ2VyIHRvIGRpc3NlY3QgaG93IGl0IGFsbCB3b3JrcyBoZXJlLCB3aXRoIHRoaXMgc3BlY2lmaWMgbW9kdWxlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbmQgaG93IHRoZXkncmUgc3RydWN0dXJlZC4gVGhpcyB3aWxsIHBhaW50IGEgY3J1Y2lhbCBwaWN0dXJlIG9mIGhvdyB0aGUgTlZNZSB0YXJnZXQgc3VwcG9ydCBmaXRzIGludG8gdGhlIGJpZ2dlciBrZXJuZWwgcGljdHVyZS4gRnJvbSBoZXJlIEkgY2FuIGxpa2VseSBpbmZlciBob3cgdGhlIHRhcmdldCBpcyBwcmVzZW50ZWQgdG8gdGhlIGVuZCB1c2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjA2LjQwNzQ2NTUyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIE5WTUVfVEFSR0VUXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuICAgODpcXHRcXHRzZWxlY3QgS0VZUyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuICAgOTpcXHRcXHRzZWxlY3QgU0dMX0FMTE9DXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZW5hYmxlZCB0YXJnZXQgc2lkZSBzdXBwb3J0IGZvciB0aGUgTlZNZSBwcm90b2NvbCwgdGhhdCBpc1xcbiAgMTI6XFx0XFx0ICBpdCBhbGxvd3MgdGhlIExpbnV4IGtlcm5lbCB0byBpbXBsZW1lbnQgTlZNZSBzdWJzeXN0ZW1zIGFuZFxcbiAgMTM6XFx0XFx0ICBjb250cm9sbGVycyBhbmQgZXhwb3J0IExpbnV4IGJsb2NrIGRldmljZXMgYXMgTlZNZSBuYW1lc3BhY2VzLlxcbiAgMTQ6XFx0XFx0ICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFuc3BvcnRzIGJlbG93IHRvIG1ha2UgdGhpc1xcbiAgMTU6XFx0XFx0ICBmdW5jdGlvbmFsaXR5IHVzZWZ1bC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUbyBjb25maWd1cmUgdGhlIE5WTWUgdGFyZ2V0IHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgbnZtZXRjbGlcXG4gIDE4OlxcdFxcdCAgdG9vbCBmcm9tIGh0dHA6Ly9naXQuaW5mcmFkZWFkLm9yZy91c2Vycy9oY2gvbnZtZXRjbGkuZ2l0LlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgTlZNRV9UQVJHRVRfREVCVUdGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjowNi40MDc1MjU4MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0NzQwMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gTlZNZS1UQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBOVk1lLVRDUCBkZXBlbmRlbmNpZXMuIEl0J3MgY2xlYXIgdGhhdCBgTlZNRV9UQVJHRVRgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIGNvcmUgY29uZmlncyByZXF1aXJlZCBhcmUgYE5WTUVfVENQYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgLiBBbmQgb2YgY291cnNlLCBgSVBWNmAgaXMgbmVlZGVkIGZvciBoYW5kbGluZyBgSVBWNl9UQ0xBU1NgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgYElQVjZgIGlzIHByb3Blcmx5IGVuYWJsZWQuIEkgc2VlIHRoYXQgaXQncyBjaGVja2VkIHdpdGggYElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYC4gSXQncyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhIHRvIGVuc3VyZSBgSVBWNmAgaXMgZW5hYmxlZCBkdXJpbmcgdGVzdGluZyB0byBjb3ZlciB0aGF0IGNvZGUgcGF0aC5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGluIHRlcm1zIG9mIHRoZWlyIHJvbGUgaW4gdGhlIHNldHVwIHByb2Nlc3M6XG5cbiogICBJIG9yaWdpbmFsbHkgd2FzIGZvY3VzaW5nIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBlbnRyeSBwb2ludHMuXG4qICAgSSBzZWUgdGhhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgYnV0IHRoYXQgaXMgdGhlIGVudHJ5IHBvaW50IHdoaWNoIGNhbGxzIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIHdoaWNoIGNhbGxzIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBTbywgSSdsbCBrZWVwIHRoYXQuXG4qICAgYG52bWV0X3RjcF9hZGRfcG9ydGAgYW5kIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3Igc2V0dGluZyB1cCB0aGUgc29ja2V0cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYCBpcyBzdGF0aWMuIFllcywgaXQgaXMgc3RhdGljLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgbm9uLXN0YXRpYyBvcHRpb24uIEkgc2VlIGBudm1ldF90Y3BfYWRkX3BvcnRgIGlzIGFsc28gc3RhdGljLCBidXQgaXQncyBhc3NpZ25lZCB0byBgYWRkX3BvcnRgIGluIGBudm1ldF9mYWJyaWNzX29wc2AuIEFuZCwgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyBzdGF0aWMgYXMgd2VsbCBhbmQgYXNzaWduZWQgdG8gYGNyZWF0ZV9jdHJsYCBpbiBgbnZtZl90cmFuc3BvcnRfb3BzYC5cblxuV2FpdCwgdGhlIHByb21wdCBzYWlkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIHRob3NlLiBGb3IgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCwgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgaXMgYG52bWZfY3JlYXRlX2N0cmxgIGluIGBkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHRoYXQgY29kZSBhcyB0aGF0J3MgdGhlIHJlYWwgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MTMuNzU0OTMxNzEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc2MDg5ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWZfY3JlYXRlX2N0cmxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzMDc9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKlxcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxMzA4Om52bWZfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYpXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzODU9c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDUtXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjE0MDY6XFx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDctXFx0aWYgKElTX0VSUihjdHJsKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjoxNy4xMzEwMjU3OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzODMxNDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQ29udHJvbGxlciBhbmQgUG9ydCBTZXR1cCAtIE15IFBlcnNwZWN0aXZlKipcblxuQWxyaWdodCwgc28gaWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBgbnZtZl9kZXZfd3JpdGVgIGZ1bmN0aW9uIGlzIHRoZSBnYXRla2VlcGVyLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igc3Bpbm5pbmcgdXAgYSBuZXcgY29udHJvbGxlci4gVGhhdCdzIGhvdyB3ZSBraWNrIG9mZiB0aGUgcHJvY2Vzcy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgb24gdGhlIHRhcmdldCBzaWRlLCB3aGVuIHdlJ3JlIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QsIGl0IHNlZW1zIGxpa2UgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgdGhlIGdvLXRvIGZ1bmN0aW9uLiBUaGlzIGlzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19hbnlfc3RvcmVgIG9yIHNpbWlsYXIgY2FsbGJhY2tzIHRoYXQgd2UgY29uZmlndXJlIHVzaW5nIGNvbmZpZ2ZzLiBTbywgdGhlIGNvbmZpZ2ZzIGNhbGxiYWNrcyB3b3VsZCBiZSBob3cgd2UgaGFuZGxlIHRoZSBwb3J0IGNyZWF0aW9uIGluIG91ciBzZXR1cC4gSXQgaXMgaG93IHdlIGhhbmRsZSBzZXR0aW5nIHVwIHRoZSBwb3J0IGZyb20gdGFyZ2V0LXNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTIwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MjAuMDY5MzQzNDkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg4NjgxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF9wb3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzUxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0PTE4OT1SZXR1cm5zIGEgcG9pbnRlciB0byBzdHJ1Y3Qgc29jX3VzYiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvci5cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjAxLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q6MjAyOlxcdHZvaWQgc25kX3NvY191c2JfYWRkX3BvcnQoc3RydWN0IHNuZF9zb2NfdXNiICp1c2IpO1xcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjAzLS4uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTIwNi1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjIwNzoqKnNuZF9zb2NfdXNiX2FkZF9wb3J0KCkqKiBhZGQgYW4gYWxsb2NhdGVkIFNvQyBVU0IgZGV2aWNlIHRvIHRoZSBTT0MgVVNCIGZyYW1ld29yay5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTIwOC1PbmNlIGFkZGVkLCB0aGlzIGRldmljZSBjYW4gYmUgcmVmZXJlbmNlZCBieSBmdXJ0aGVyIG9wZXJhdGlvbnMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0PTIyNj1iZSBzaG93biBiZWxvdzpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjM4LVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q6MjM5OlxcdFxcdHJldCA9IHNuZF9zb2NfdXNiX2FkZF9wb3J0KHVzYik7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yNDAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q9NDQwPWV4ZWN1dGUgdGhlIHJlZ2lzdGVyZWQgZnVuY3Rpb24gY2FsbHMgdG8gdGhlIERQQ00gQkUgREFJIGxpbmsuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTQ1NS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjQ1NjpcXHRyZXQgPSBzbmRfc29jX3VzYl9hZGRfcG9ydCh1c2IpO1xcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtNDU3LS4uXFxuLS1cXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jPTM5Nz1zdGF0aWMgaW50IHBhdGFfaWNzaWRlX3JlZ2lzdGVyX3Y2KHN0cnVjdCBwYXRhX2ljc2lkZV9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy00MzktXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYzo0NDA6c3RhdGljIGludCBwYXRhX2ljc2lkZV9hZGRfcG9ydHMoc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gKmluZm8pXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy00NDEte1xcbi0tXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYz00ODA9c3RhdGljIGludCBwYXRhX2ljc2lkZV9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLFxcbi0tXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDMtXFx0aWYgKHJldCA9PSAwKVxcbmRyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmM6NTQ0OlxcdFxcdHJldCA9IHBhdGFfaWNzaWRlX2FkZF9wb3J0cyhcXHUwMDI2aW5mbyk7XFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDUtXFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xMzE2PXN0YXRpYyB2b2lkIHNlbmRfc2lnaW9fdG9fcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTEzMjEtXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTMyMjpzdGF0aWMgaW50IGFkZF9wb3J0KHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYsIHUzMiBpZClcXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xMzIzLXtcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE1MjM9c3RhdGljIHZvaWQgaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE1NTgtXFx0XFx0fVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjE1NTk6XFx0XFx0YWRkX3BvcnQocG9ydGRldiwgdmlydGlvMzJfdG9fY3B1KHZkZXYsIGNwa3QtXFx1MDAzZWlkKSk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTU2MC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE5NTk9c3RhdGljIGludCB2aXJ0Y29uc19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTIwNTItXFx0XFx0ICovXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MjA1MzpcXHRcXHRhZGRfcG9ydChwb3J0ZGV2LCAwKTtcXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0yMDU0LVxcdH1cXG4tLVxcbmRyaXZlcnMvY3hsL2FjcGkuYz02ODc9c3RhdGljIGludCBhZGRfaG9zdF9icmlkZ2VfdXBvcnQoc3RydWN0IGRldmljZSAqbWF0Y2gsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvY3hsL2FjcGkuYy03MzQtXFxuZHJpdmVycy9jeGwvYWNwaS5jOjczNTpcXHRwb3J0ID0gZGV2bV9jeGxfYWRkX3BvcnQoaG9zdCwgYnJpZGdlLCBjb21wb25lbnRfcmVnX3BoeXMsIGRwb3J0KTtcXG5kcml2ZXJzL2N4bC9hY3BpLmMtNzM2LVxcdGlmIChJU19FUlIocG9ydCkpXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYz04Mzg9c3RhdGljIGludCBjeGxfcG9ydF9hZGQoc3RydWN0IGN4bF9wb3J0ICpwb3J0LFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtODgxLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjg4MjpzdGF0aWMgc3RydWN0IGN4bF9wb3J0ICpfX2Rldm1fY3hsX2FkZF9wb3J0KHN0cnVjdCBkZXZpY2UgKmhvc3QsXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtODgzLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MTYtLyoqXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTE3OiAqIGRldm1fY3hsX2FkZF9wb3J0IC0gcmVnaXN0ZXIgYSBjeGxfcG9ydCBpbiBDWEwgbWVtb3J5IGRlY29kZSBoaWVyYXJjaHlcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MTgtICogQGhvc3Q6IGhvc3QgZGV2aWNlIGZvciBkZXZtIG9wZXJhdGlvbnNcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkyMi0gKi9cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5MjM6c3RydWN0IGN4bF9wb3J0ICpkZXZtX2N4bF9hZGRfcG9ydChzdHJ1Y3QgZGV2aWNlICpob3N0LFxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkyNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MjktXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTMwOlxcdHBvcnQgPSBfX2Rldm1fY3hsX2FkZF9wb3J0KGhvc3QsIHVwb3J0X2RldiwgY29tcG9uZW50X3JlZ19waHlzLFxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkzMS1cXHRcXHRcXHRcXHQgICBwYXJlbnRfZHBvcnQpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTQ5LX1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5NTA6RVhQT1JUX1NZTUJPTF9OU19HUEwoZGV2bV9jeGxfYWRkX3BvcnQsIFxcXCJDWExcXFwiKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05NTEtXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9OTUyPXN0cnVjdCBjeGxfcm9vdCAqZGV2bV9jeGxfYWRkX3Jvb3Qoc3RydWN0IGRldmljZSAqaG9zdClcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTk1NS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5NTY6XFx0cG9ydCA9IGRldm1fY3hsX2FkZF9wb3J0KGhvc3QsIGhvc3QsIENYTF9SRVNPVVJDRV9OT05FLCBOVUxMKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05NTctXFx0aWYgKElTX0VSUihwb3J0KSlcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jPTE0NTA9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX2VuZHBvaW50X2F1dG9yZW1vdmUsIFxcXCJDWExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE0NTYtICogdGhyb3VnaCAtXFx1MDAzZXJlbW92ZSgpLiBUaGlzIFxcXCJib3R0b20tdXBcXFwiIHJlbW92YWwgc2VsZWN0aXZlbHkgcmVtb3ZlcyBpbmRpdmlkdWFsXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTQ1NzogKiBjaGlsZCBwb3J0cyBtYW51YWxseS4gVGhpcyBkZXBlbmRzIG9uIGRldm1fY3hsX2FkZF9wb3J0KCkgdG8gbm90IGNoYW5nZSBpc1xcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE0NTgtICogZGV2bSBhY3Rpb24gcmVnaXN0cmF0aW9uIG9yZGVyLCBhbmQgZm9yIGRwb3J0cyB0byBoYXZlIGFscmVhZHkgYmVlblxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9MTY2Nz1zdGF0aWMgc3RydWN0IGN4bF9kcG9ydCAqZGV2bV9jeGxfY3JlYXRlX3BvcnQoc3RydWN0IGRldmljZSAqZXBfZGV2LFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTY4Ni1cXHRcXHRjb21wb25lbnRfcmVnX3BoeXMgPSBmaW5kX2NvbXBvbmVudF9yZWdpc3RlcnModXBvcnRfZGV2KTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzoxNjg3OlxcdFxcdHBvcnQgPSBkZXZtX2N4bF9hZGRfcG9ydChcXHUwMDI2cGFyZW50X3BvcnQtXFx1MDAzZWRldiwgdXBvcnRfZGV2LFxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE2ODgtXFx0XFx0XFx0XFx0XFx0IGNvbXBvbmVudF9yZWdfcGh5cywgcGFyZW50X2Rwb3J0KTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE3MTMtXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTcxNDpzdGF0aWMgaW50IGFkZF9wb3J0X2F0dGFjaF9lcChzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQsXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTcxNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYz0xNzk5PWludCBkZXZtX2N4bF9lbnVtZXJhdGVfcG9ydHMoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kKVxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTg2My1cXHRcXHRcXHQgKiB0aGF0J3Mgb2ssIGl0IHdhcyBhZGRlZCBvbiBhIHByZXZpb3VzIHBhc3MuXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTg2NDpcXHRcXHRcXHQgKiBPdGhlcndpc2UsIHJldHJ5IGluIGFkZF9wb3J0X2F0dGFjaF9lcCgpIGFmdGVyIHRha2luZ1xcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NjUtXFx0XFx0XFx0ICogdGhlIHBhcmVudF9wb3J0IGxvY2sgYXMgdGhlIGN1cnJlbnQgcG9ydCBtYXkgYmUgYmVpbmdcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NzktXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTg4MDpcXHRcXHRyYyA9IGFkZF9wb3J0X2F0dGFjaF9lcChjeGxtZCwgdXBvcnRfZGV2LCBkcG9ydF9kZXYpO1xcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4ODEtXFx0XFx0LyogcG9ydCBtaXNzaW5nLCB0cnkgdG8gYWRkIHBhcmVudCAqL1xcbi0tXFxuZHJpdmVycy9jeGwvY3hsLmg9NzI4PXN0cnVjdCBwY2lfYnVzICpjeGxfcG9ydF90b19wY2lfYnVzKHN0cnVjdCBjeGxfcG9ydCAqcG9ydCk7XFxuZHJpdmVycy9jeGwvY3hsLmg6NzI5OnN0cnVjdCBjeGxfcG9ydCAqZGV2bV9jeGxfYWRkX3BvcnQoc3RydWN0IGRldmljZSAqaG9zdCxcXG5kcml2ZXJzL2N4bC9jeGwuaC03MzAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZSAqdXBvcnRfZGV2LFxcbi0tXFxuZHJpdmVycy9jeGwvcG9ydC5jPTI4Nj1pbnQgZGV2bV9jeGxfYWRkX2VuZHBvaW50KHN0cnVjdCBkZXZpY2UgKmhvc3QsIHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZCxcXG4tLVxcbmRyaXZlcnMvY3hsL3BvcnQuYy0zMDUtXFx0LyogTm90ZTogZW5kcG9pbnQgcG9ydCBjb21wb25lbnQgcmVnaXN0ZXJzIGFyZSBkZXJpdmVkIGZyb20gQGN4bGRzICovXFxuZHJpdmVycy9jeGwvcG9ydC5jOjMwNjpcXHRlbmRwb2ludCA9IGRldm1fY3hsX2FkZF9wb3J0KGhvc3QsIFxcdTAwMjZjeGxtZC1cXHUwMDNlZGV2LCBDWExfUkVTT1VSQ0VfTk9ORSxcXG5kcml2ZXJzL2N4bC9wb3J0LmMtMzA3LVxcdFxcdFxcdFxcdCAgICAgcGFyZW50X2Rwb3J0KTtcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwuYz03MTg9c3RydWN0IGRmbF9mZWF0dXJlX2luZm8ge1xcbi0tXFxuZHJpdmVycy9mcGdhL2RmbC5jLTczMC1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmM6NzMxOnN0YXRpYyB2b2lkIGRmbF9mcGdhX2NkZXZfYWRkX3BvcnRfZGF0YShzdHJ1Y3QgZGZsX2ZwZ2FfY2RldiAqY2RldixcXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtNzMyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZmxfZmVhdHVyZV9kZXZfZGF0YSAqZmRhdGEpXFxuLS1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmM9OTIyPXN0YXRpYyBpbnQgYnVpbGRfaW5mb19jb21taXRfZGV2KHN0cnVjdCBidWlsZF9mZWF0dXJlX2RldnNfaW5mbyAqYmluZm8pXFxuLS1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtOTM1LVxcdGlmIChiaW5mby1cXHUwMDNldHlwZSA9PSBQT1JUX0lEKVxcbmRyaXZlcnMvZnBnYS9kZmwuYzo5MzY6XFx0XFx0ZGZsX2ZwZ2FfY2Rldl9hZGRfcG9ydF9kYXRhKGJpbmZvLVxcdTAwM2VjZGV2LCBmZGF0YSk7XFxuZHJpdmVycy9mcGdhL2RmbC5jLTkzNy1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jPTQ2OT1zdGF0aWMgdm9pZCBkd2FwYl9jb25maWd1cmVfaXJxcyhzdHJ1Y3QgZHdhcGJfZ3BpbyAqZ3BpbyxcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMtNTI2LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmM6NTI3OnN0YXRpYyBpbnQgZHdhcGJfZ3Bpb19hZGRfcG9ydChzdHJ1Y3QgZHdhcGJfZ3BpbyAqZ3BpbyxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTUyOC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGR3YXBiX3BvcnRfcHJvcGVydHkgKnBwLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYz03MzI9c3RhdGljIGludCBkd2FwYl9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTc2NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ3Bpby1cXHUwMDNlbnJfcG9ydHM7IGkrKykge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmM6NzY2OlxcdFxcdGVyciA9IGR3YXBiX2dwaW9fYWRkX3BvcnQoZ3BpbywgXFx1MDAyNnBkYXRhLVxcdTAwM2Vwcm9wZXJ0aWVzW2ldLCBpKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTc2Ny1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jPTIzMTc9c3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKlxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYzoyMzE4OmRybV9kcF9tc3RfYWRkX3BvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjMxOS1cXHRcXHQgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM9MjM1MD1kcm1fZHBfbXN0X2hhbmRsZV9saW5rX2FkZHJlc3NfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM2Mi1cXHRpZiAoIXBvcnQpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6MjM2MzpcXHRcXHRwb3J0ID0gZHJtX2RwX21zdF9hZGRfcG9ydChkZXYsIG1nciwgbXN0YixcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM2NC1cXHRcXHRcXHRcXHRcXHQgICBwb3J0X21zZy1cXHUwMDNlcG9ydF9udW1iZXIpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTIzNzQtXFx0XFx0ZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6MjM3NTpcXHRcXHRwb3J0ID0gZHJtX2RwX21zdF9hZGRfcG9ydChkZXYsIG1nciwgbXN0YixcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM3Ni1cXHRcXHRcXHRcXHRcXHQgICBwb3J0X21zZy1cXHUwMDNlcG9ydF9udW1iZXIpO1xcbi0tXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jPTE1MT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoc3NpX3NzdF9kaXZfZm9wcywgc3NpX2Rpdl9nZXQsIHNzaV9kaXZfc2V0LCBcXFwiJWxsdVxcXFxuXFxcIik7XFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jLTE1Mi1cXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM6MTUzOnN0YXRpYyB2b2lkIHNzaV9kZWJ1Z19hZGRfcG9ydChzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0LFxcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYy0xNTQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkaXIpXFxuLS1cXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM9MTEwNj1zdGF0aWMgaW50IHNzaV9wb3J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkKVxcbi0tXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jLTEyMDAtI2lmZGVmIENPTkZJR19ERUJVR19GU1xcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYzoxMjAxOlxcdHNzaV9kZWJ1Z19hZGRfcG9ydChvbWFwX3BvcnQsIG9tYXBfc3NpLVxcdTAwM2VkaXIpO1xcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYy0xMjAyLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM9MjQwNj1pbnQgaXJkbWFfYWxsb2NfbG9jYWxfbWFjX2VudHJ5KHN0cnVjdCBpcmRtYV9wY2lfZiAqcmYsIHUxNiAqbWFjX3RibF9pZHgpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDM0LSAqIEBhY2NlbF9sb2NhbF9wb3J0OiBwb3J0IGZvciBhcGJ2dFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0MzU6ICogQGFkZF9wb3J0OiBhZGQgb3JkZWxldGUgcG9ydFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0MzYtICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM9MjQzNz1zdGF0aWMgaW50IGlyZG1hX2NxcF9tYW5hZ2VfYXBidnRfY21kKHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2LFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0Mzg6XFx0XFx0XFx0XFx0ICAgICAgdTE2IGFjY2VsX2xvY2FsX3BvcnQsIGJvb2wgYWRkX3BvcnQpXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQzOS17XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDQ0LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0NDU6XFx0Y3FwX3JlcXVlc3QgPSBpcmRtYV9hbGxvY19hbmRfZ2V0X2NxcF9yZXF1ZXN0KFxcdTAwMjZpd2Rldi1cXHUwMDNlcmYtXFx1MDAzZWNxcCwgYWRkX3BvcnQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NDYtXFx0aWYgKCFjcXBfcmVxdWVzdClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTAtXFx0aW5mbyA9IFxcdTAwMjZjcXBfaW5mby1cXHUwMDNlaW4udS5tYW5hZ2VfYXBidnRfZW50cnkuaW5mbztcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYzoyNDUxOlxcdGluZm8tXFx1MDAzZWFkZCA9IGFkZF9wb3J0O1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTItXFx0aW5mby1cXHUwMDNlcG9ydCA9IGFjY2VsX2xvY2FsX3BvcnQ7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDU3LVxcdGliZGV2X2RiZyhcXHUwMDI2aXdkZXYtXFx1MDAzZWliZGV2LCBcXFwiREVWOiAlczogcG9ydD0weCUwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQ1ODpcXHRcXHQgICghYWRkX3BvcnQpID8gXFxcIkRFTEVURVxcXCIgOiBcXFwiQUREXFxcIiwgYWNjZWxfbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQ1OS1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9MjE1PXZvaWQgZGVsX3N5c2ZzX3BvcnRfbWNnX2F0dHIoc3RydWN0IG1seDRfaWJfZGV2ICpkZXZpY2UsIGludCBwb3J0X251bSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMjIyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6MjIzOnN0YXRpYyBpbnQgYWRkX3BvcnRfZW50cmllcyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldmljZSwgaW50IHBvcnRfbnVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMjI0LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMzQ5LWVycjpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjM1MDpcXHRwcl9lcnIoXFxcImFkZF9wb3J0X2VudHJpZXMgRkFJTEVEOiBmb3IgcG9ydDolZCwgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMzUxLVxcdCAgICAgICBwb3J0X251bSwgcmV0KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9NjExPXN0YXRpYyB2b2lkIHJlbW92ZV92Zl9zbWlfZW50cmllcyhzdHJ1Y3QgbWx4NF9wb3J0ICpwKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy02MjItXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYzo2MjM6c3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgaW50IHBvcnRfbnVtLCBpbnQgc2xhdmUpXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy02MjQte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYz03MDE9c3RhdGljIGludCByZWdpc3Rlcl9vbmVfcGtleV90cmVlKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBpbnQgc2xhdmUpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTczNS1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjczNjpcXHRcXHRlcnIgPSBhZGRfcG9ydChkZXYsIHBvcnQsIHNsYXZlKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTczNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYz04MDY9aW50IG1seDRfaWJfZGV2aWNlX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy04MjctXFx0cmRtYV9mb3JfZWFjaF9wb3J0KFxcdTAwMjZkZXYtXFx1MDAzZWliX2RldiwgaSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6ODI4OlxcdFxcdHJldCA9IGFkZF9wb3J0X2VudHJpZXMoZGV2LCBpKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTgyOS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jPTI1OT1zdGF0aWMgc3RydWN0IG9jcmRtYV9kZXYgKm9jcmRtYV9hZGQoc3RydWN0IGJlX2Rldl9pbmZvICpkZXZfaW5mbylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX21haW4uYy0yOTUtXFx0LyogSW5pdCBzdGF0cyAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX21haW4uYzoyOTY6XFx0b2NyZG1hX2FkZF9wb3J0X3N0YXRzKGRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jLTI5Ny1cXHQvKiBJbnRlcnJ1cHQgTW9kZXJhdGlvbiAqL1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYz03NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NyZG1hX2RiZ19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5jLTc1Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5jOjc1ODp2b2lkIG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3N0YXRzLmMtNzU5LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3N0YXRzLmg9NzA9dm9pZCBvY3JkbWFfcmVtX3BvcnRfc3RhdHMoc3RydWN0IG9jcmRtYV9kZXYgKmRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuaDo3MTp2b2lkIG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5oLTcyLXZvaWQgb2NyZG1hX3BtYV9jb3VudGVycyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2LCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTI1Nzc9c3RhdGljIGludCBpcG9pYl9pbnRlcmNlcHRfZGV2X2lkX2F0dHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTI1ODItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MjU4MzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwb2liX2FkZF9wb3J0KGNvbnN0IGNoYXIgKmZvcm1hdCxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yNTg0LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWJfZGV2aWNlICpoY2EsIHUzMiBwb3J0KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjY2MD1zdGF0aWMgaW50IGlwb2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjY3Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyNjc3OlxcdFxcdGRldiA9IGlwb2liX2FkZF9wb3J0KFxcXCJpYiVkXFxcIiwgZGV2aWNlLCBwKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yNjc4LVxcdFxcdGlmICghSVNfRVJSKGRldikpIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTM5Njg9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzk3NC1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYzozOTc1OnN0YXRpYyBzdHJ1Y3Qgc3JwX2hvc3QgKnNycF9hZGRfcG9ydChzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2aWNlLCB1MzIgcG9ydClcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zOTc2LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTQwMTk9c3RhdGljIGludCBzcnBfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy00MDg4LVxcdHJkbWFfZm9yX2VhY2hfcG9ydCAoZGV2aWNlLCBwKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM6NDA4OTpcXHRcXHRob3N0ID0gc3JwX2FkZF9wb3J0KHNycF9kZXYsIHApO1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTQwOTAtXFx0XFx0aWYgKGhvc3QpXFxuLS1cXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmM9NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBnYW1lcG9ydF9idXM7XFxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTQzLVxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzo0NDpzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTtcXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNDUtc3RhdGljIHZvaWQgZ2FtZXBvcnRfYXR0YWNoX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jPTMxOT1zdGF0aWMgdm9pZCBnYW1lcG9ydF9oYW5kbGVfZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYy0zMzUtXFx0XFx0Y2FzZSBHQU1FUE9SVF9SRUdJU1RFUl9QT1JUOlxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzozMzY6XFx0XFx0XFx0Z2FtZXBvcnRfYWRkX3BvcnQoZXZlbnQtXFx1MDAzZW9iamVjdCk7XFxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTMzNy1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYz01NTU9c3RhdGljIHZvaWQgZ2FtZXBvcnRfaW5pdF9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNTc5LSAqL1xcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzo1ODA6c3RhdGljIHZvaWQgZ2FtZXBvcnRfYWRkX3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydClcXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNTgxLXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zMj1zdGF0aWMgTElTVF9IRUFEKHNlcmlvX2xpc3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zMy1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzQ6c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1LXN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MTg2PXN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTk2LVxcdFxcdGNhc2UgU0VSSU9fUkVHSVNURVJfUE9SVDpcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MTk3OlxcdFxcdFxcdHNlcmlvX2FkZF9wb3J0KGV2ZW50LVxcdTAwM2VvYmplY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0xOTgtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NDY3PXN0YXRpYyB2b2lkIHNlcmlvX2luaXRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQ5NS0gKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDk2OnN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQ5Ny17XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTg1PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2Rpb191YXJ0X3RhYmxlX2xvY2spO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtODYtXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYzo4NzpzdGF0aWMgaW50IHNkaW9fdWFydF9hZGRfcG9ydChzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQpXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy04OC17XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTEwMTg9c3RhdGljIGludCBzZGlvX3VhcnRfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyxcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTA3NS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jOjEwNzY6XFx0cmV0ID0gc2Rpb191YXJ0X2FkZF9wb3J0KHBvcnQpO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTA3Ny1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM9NjcyPXN0YXRpYyB2b2lkIGxhbjkzMDNfYWxyX3NldF9lbnRyeShzdHJ1Y3QgbGFuOTMwMyAqY2hpcCwgY29uc3QgdTggKm1hYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy03MDEtLyogQWRkIHBvcnQgdG8gc3RhdGljIEFMUiBlbnRyeSwgY3JlYXRlIG5ldyBzdGF0aWMgZW50cnkgaWYgbmVlZGVkICovXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jOjcwMjpzdGF0aWMgaW50IGxhbjkzMDNfYWxyX2FkZF9wb3J0KHN0cnVjdCBsYW45MzAzICpjaGlwLCBjb25zdCB1OCAqbWFjLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtNzAzLVxcdFxcdFxcdFxcdGJvb2wgc3RwX292ZXJyaWRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTgyNz1zdGF0aWMgdm9pZCBsYW45MzAzX2JyaWRnZV9wb3J0cyhzdHJ1Y3QgbGFuOTMwMyAqY2hpcClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy04MzQtXFx0XFx0XFx0XFx0IGNoaXAtXFx1MDAzZXN3ZV9wb3J0X3N0YXRlKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6ODM1OlxcdGxhbjkzMDNfYWxyX2FkZF9wb3J0KGNoaXAsIGV0aF9zdHBfYWRkciwgMCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTgzNi19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM9MTIxMz1zdGF0aWMgaW50IGxhbjkzMDNfcG9ydF9mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtMTIyMC1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6MTIyMTpcXHRyZXR1cm4gbGFuOTMwM19hbHJfYWRkX3BvcnQoY2hpcCwgYWRkciwgcG9ydCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy0xMjIyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz0xMjY3PXN0YXRpYyBpbnQgbGFuOTMwM19wb3J0X21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy0xMjc5LVxcdFxcdG1kYi1cXHUwMDNldmlkKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6MTI4MDpcXHRyZXR1cm4gbGFuOTMwM19hbHJfYWRkX3BvcnQoY2hpcCwgbWRiLVxcdTAwM2VhZGRyLCBwb3J0LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTEyODEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYz0xMDYyPXN0YXRpYyB2b2lkIGlkcGZfYWRkX2VtcHR5X3F1ZXVlX3N0YXRzKHU2NCAqKmRhdGEsIHUxNiBxdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTA3Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jOjEwNzg6ICogaWRwZl9hZGRfcG9ydF9zdGF0cyAtIENvcHkgcG9ydCBzdGF0cyBpbnRvIGV0aHRvb2wgYnVmZmVyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDc5LSAqIEB2cG9ydDogdmlydHVhbCBwb3J0IHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDgxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM6MTA4MjpzdGF0aWMgdm9pZCBpZHBmX2FkZF9wb3J0X3N0YXRzKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwgdTY0ICoqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jLTEwODMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYz0xMjA0PXN0YXRpYyB2b2lkIGlkcGZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTIyNy1cXHRpZHBmX2NvbGxlY3RfcXVldWVfc3RhdHModnBvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM6MTIyODpcXHRpZHBmX2FkZF9wb3J0X3N0YXRzKHZwb3J0LCBcXHUwMDI2ZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMjI5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jPTI3MDU9c3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfc2hhcmVkX29mX3JlbW92ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI3MjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI3MjE6c3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfb2ZfYWRkX3BvcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMtMjcyMi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jPTI4MDg9c3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYy0yODI1LVxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChucCwgcG5wKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI4MjY6XFx0XFx0cmV0ID0gbXY2NDN4eF9ldGhfc2hhcmVkX29mX2FkZF9wb3J0KHBkZXYsIHBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI4MjctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYz01NDQzPXN0YXRpYyBpbnQgbWx4NWVfdnhsYW5fc2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHRhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01NDQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM6NTQ0ODpcXHRyZXR1cm4gbWx4NV92eGxhbl9hZGRfcG9ydChwcml2LVxcdTAwM2VtZGV2LVxcdTAwM2V2eGxhbiwgbnRvaHModGktXFx1MDAzZXBvcnQpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU0NDktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jPTQ3PXN0cnVjdCBtbHg1X3Z4bGFuX3BvcnQge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYzo1MjpzdGF0aWMgaW50IG1seDVfdnhsYW5fY29yZV9hZGRfcG9ydF9jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHUxNiBwb3J0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy01My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM9OTE9c3RhdGljIHN0cnVjdCBtbHg1X3Z4bGFuX3BvcnQgKnZ4bGFuX2xvb2t1cF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYzoxMDE6aW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jOjExMTpcXHRyZXQgPSBtbHg1X3Z4bGFuX2NvcmVfYWRkX3BvcnRfY21kKHZ4bGFuLVxcdTAwM2VtZGV2LCBwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTEyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYz0xNDc9c3RydWN0IG1seDVfdnhsYW4gKm1seDVfdnhsYW5fY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jLTE2Mi1cXHQvKiBIYXJkd2FyZSBhZGRzIDQ3ODkgKElBTkFfVlhMQU5fVURQX1BPUlQpIGJ5IGRlZmF1bHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM6MTYzOlxcdG1seDVfdnhsYW5fYWRkX3BvcnQodnhsYW4sIElBTkFfVlhMQU5fVURQX1BPUlQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xNjQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmg9NTU9dm9pZCBtbHg1X3Z4bGFuX2Rlc3Ryb3koc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmg6NTY6aW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oLTU3LWludCBtbHg1X3Z4bGFuX2RlbF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X3Z4bGFuX2Rlc3Ryb3koc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuKSB7IHJldHVybjsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uaDo2NDpzdGF0aWMgaW5saW5lIGludCBtbHg1X3Z4bGFuX2FkZF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpIHsgcmV0dXJuIC1FT1BOT1RTVVBQOyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oLTY1LXN0YXRpYyBpbmxpbmUgaW50IG1seDVfdnhsYW5fZGVsX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCkgeyByZXR1cm4gLUVPUE5PVFNVUFA7IH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oPTEyNzE9TUxYU1dfSVRFTTMyX0lOREVYRUQocmVnLCBzbGRyLCBzeXN0ZW1fcG9ydCwgMHgwOCwgMCwgMTYsIDQsIDAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9yZWcuaC0xMjcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oOjEyNzM6c3RhdGljIGlubGluZSB2b2lkIG1seHN3X3JlZ19zbGRyX2xhZ19hZGRfcG9ydF9wYWNrKGNoYXIgKnBheWxvYWQsIHU4IGxhZ19pZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9yZWcuaC0xMjc0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MTYgbG9jYWxfcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9NDQ0OT1zdGF0aWMgaW50IG1seHN3X3NwX2xhZ19kaXN0X3BvcnRfYWRkKHN0cnVjdCBtbHhzd19zcF9wb3J0ICptbHhzd19zcF9wb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy00NDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM6NDQ1NTpcXHRtbHhzd19yZWdfc2xkcl9sYWdfYWRkX3BvcnRfcGFjayhzbGRyX3BsLCBsYWdfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy00NDU2LVxcdFxcdFxcdFxcdFxcdCBtbHhzd19zcF9wb3J0LVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jPTEzMz1zdGF0aWMgdm9pZCBlZnhfZGV2bGlua19kZWxfcG9ydChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbF9wb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtMTM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jOjE0MDpzdGF0aWMgaW50IGVmeF9kZXZsaW5rX2FkZF9wb3J0KHN0cnVjdCBlZnhfbmljICplZngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtMTQxLVxcdFxcdFxcdFxcdHN0cnVjdCBtYWVfbXBvcnRfZGVzYyAqbXBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2RldmxpbmsuYz02MzY9c3RhdGljIHN0cnVjdCBkZXZsaW5rX3BvcnQgKmVmMTAwX3NldF9kZXZsaW5rX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTMyIGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jLTY2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2RldmxpbmsuYzo2NjY6XFx0cmMgPSBlZnhfZGV2bGlua19hZGRfcG9ydChlZngsIG1wb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2RldmxpbmsuYy02NjctXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz01MDA9c3RhdGljIGludCB0Y19hZGRfaXA0X2Zsb3coc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjUzNTpzdGF0aWMgaW50IHRjX2FkZF9wb3J0c19mbG93KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy01MzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9NjAyPXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNjA3LVxcdHsgLmZuID0gdGNfYWRkX2lwNF9mbG93IH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6NjA4OlxcdHsgLmZuID0gdGNfYWRkX3BvcnRzX2Zsb3cgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy02MDktfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTYyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MzAtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjMxOnN0YXRpYyBpbnQgcGh5X2FkZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MzIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTUtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjk2OlxcdHJldCA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY5Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNDI4PXN0YXRpYyBpbnQgcGh5X2RlZmF1bHRfc2V0dXBfc2luZ2xlX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzQ1Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM0NTg6XFx0cGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNDU5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNDYzPXN0YXRpYyBpbnQgb2ZfcGh5X3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM0OTEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNDkyOlxcdFxcdGVyciA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzQ5My1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwNj1zdGF0aWMgdm9pZCBfX3RlYW1fb3B0aW9uX2luc3RfZGVsX3BvcnQoc3RydWN0IHRlYW0gKnRlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxNy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxODpzdGF0aWMgaW50IF9fdGVhbV9vcHRpb25faW5zdF9hZGRfcG9ydChzdHJ1Y3QgdGVhbSAqdGVhbSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIxMj1zdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTMzOC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjEzMzk6XFx0ZXJyID0gX190ZWFtX29wdGlvbl9pbnN0X2FkZF9wb3J0KHRlYW0sIHBvcnQpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTM0MC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0zMTY9aW50IG52bWV0X2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMzUyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjM1MzpcXHRyZXQgPSBvcHMtXFx1MDAzZWFkZF9wb3J0KHBvcnQpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTM1NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jPTI4NjM9c3RhdGljIGludFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYzoyODY0Om52bWV0X2ZjX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYy0yODY1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYz0yOTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZXRfZmNfdGd0X2ZjcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2ZjLmMtMjk5NC1cXHQubXNkYmRcXHRcXHRcXHQ9IDEsXFxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jOjI5OTU6XFx0LmFkZF9wb3J0XFx0XFx0PSBudm1ldF9mY19hZGRfcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2ZjLmMtMjk5Ni1cXHQucmVtb3ZlX3BvcnRcXHRcXHQ9IG52bWV0X2ZjX3JlbW92ZV9wb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM9NTUyPXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX2xvb3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjQ4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjY0OTpzdGF0aWMgaW50IG52bWVfbG9vcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy02NTAte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM9NjcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZV9sb29wX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTY3NC1cXHQudHlwZVxcdFxcdD0gTlZNRl9UUlRZUEVfTE9PUCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYzo2NzU6XFx0LmFkZF9wb3J0XFx0PSBudm1lX2xvb3BfYWRkX3BvcnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjc2LVxcdC5yZW1vdmVfcG9ydFxcdD0gbnZtZV9sb29wX3JlbW92ZV9wb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTQxMT1zdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTQxOC1cXHR2b2lkICgqcXVldWVfcmVzcG9uc2UpKHN0cnVjdCBudm1ldF9yZXEgKnJlcSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oOjQxOTpcXHRpbnQgKCphZGRfcG9ydCkoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC00MjAtXFx0dm9pZCAoKnJlbW92ZV9wb3J0KShzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3BjaS1lcGYuYz0xMTkyPXN0YXRpYyB2b2lkIG52bWV0X3BjaV9lcGZfZHJhaW5fcXVldWUoc3RydWN0IG52bWV0X3BjaV9lcGZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9wY2ktZXBmLmMtMTIwNi1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MjIuMjU4MDMwMTQ3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTE5NjcwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTlZNZS1vRiBUYXJnZXQ6IEVudHJ5IFBvaW50IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIE5WTWUtb0YgdGFyZ2V0IHNpZGUsIGFuZCBpdCBzZWVtcyBsaWtlIGBudm1ldF9lbmFibGVfcG9ydGAgY291bGQgYmUgYSBwcm9taXNpbmcgZW50cnkgcG9pbnQuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBwb3J0IG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgbnZtZXRfZW5hYmxlX3BvcnRgIGRpcmVjdGx5IGNhbGxzIGBvcHMtXHUwMDNlYWRkX3BvcnQocG9ydClgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYG52bWV0X2VuYWJsZV9wb3J0YCBpcyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyBuZXcgcG9ydCBhZGRpdGlvbnMgdG8gdGhlIHN1YnN5c3RlbS4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19hbnlfc3RvcmVgIGFuZCBgbnZtZXRfcG9ydF9zdWJzeXNfc3RvcmVgLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgdGhhdCBpdCdzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgcG9ydCBicmluZy11cCBwcm9jZXNzLiBHaXZlbiB0aGVzZSBjYWxsIHBhdGhzIGFuZCB0aGUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYG9wcy1cdTAwM2VhZGRfcG9ydGAsIEkgdGhpbmsgZGlnZ2luZyBpbnRvIGBudm1ldF9lbmFibGVfcG9ydGAgd2lsbCBiZSB0aW1lIHdlbGwgc3BlbnQgaW4gbXkgZnV6emluZyBjYW1wYWlnbi4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGl0cyBpbnRlcm5hbHMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtYWxmb3JtZWQgcG9ydCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjoyNS43NzAwMDEyOTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjUxODcyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfZW5hYmxlX3BvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTEwNTQ9c3RhdGljIGludCBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTEwNzktXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnBvcnQtXFx1MDAzZXN1YnN5c3RlbXMpKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjEwODA6XFx0XFx0cmV0ID0gbnZtZXRfZW5hYmxlX3BvcnQocG9ydCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTEwODEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTMwND12b2lkIG52bWV0X3BvcnRfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LCBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zMTUtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MzE2OmludCBudm1ldF9lbmFibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zMTcte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTY0Nz12b2lkIG52bWV0X3BvcnRfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTY0OS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NjUwOmludCBudm1ldF9lbmFibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTY1MS12b2lkIG52bWV0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjI3Ljk5NTE5Njk0M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY1NDE3NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBOVk1lLW9GIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5WTWUtb0YgZHJpdmVyIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBwb3J0IGFuZCBjb250cm9sbGVyIGNyZWF0aW9uIHBhdGhzLiBJIHNlZSB0aGF0IGBudm1ldF9lbmFibGVfcG9ydGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGVuYWJsaW5nIGEgbmV3IHBvcnQuIFRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBpdCBzZWVtcyB0byBkZWxlZ2F0ZSB0byBgYWRkX3BvcnRgIGludGVybmFsbHkuIEZyb20gdGhlIGhvc3Qgc2lkZSwgSSdtIG5vdGluZyB0aGF0IGBudm1mX2Rldl93cml0ZWAgc2VlbXMgbGlrZSB0aGUgaW5pdGlhbCBob29rIGZvciBjcmVhdGluZyBhIGNvbnRyb2xsZXIuIE5vdyBJJ20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBob3N0IHNpZGUuIExvb2tzIGxpa2UgYG52bWZfY3JlYXRlX2N0cmxgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhhdCBpdCBjYWxscyBgY3JlYXRlX2N0cmxgIHRvIGZpbmlzaCBpdHMgdGFzay4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZXNlIGZ1bmN0aW9uIG5hbWVzIGFuZCBsb29rIGludG8gd2hhdCdzIGJlaW5nIHBhc3NlZCBhcm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTYwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MzEuNzYwNjE3ODE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNTY5NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWZfY3JlYXRlX2N0cmxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzMDc9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKlxcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxMzA4Om52bWZfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYpXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzODU9c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDUtXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjE0MDY6XFx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDctXFx0aWYgKElTX0VSUihjdHJsKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjozNC4wMTQxOTE2NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0OTI0OTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgTlZNZS9mIFdyaXRlIFBhdGgqKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbnZtZl9kZXZfd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmcm9tIHRoZSBob3N0IHNpZGUgZm9yIHdyaXRpbmcgZGF0YSB0byB0aGUgTlZNZSBkZXZpY2Ugb3ZlciBOVk1lLW9GLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQsIHRoYXQgZnVuY3Rpb24gbmFtZSAtIGBudm1mX2Rldl93cml0ZWAgLSBzZWVtcyB0byBzdWdnZXN0IGl0J3MgbW9yZSBvZiBhIGZpbGUgb3BlcmF0aW9uLiBUaGF0J3MgYSBsaXR0bGUgc3VycHJpc2luZyBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBOVk1lIHRyYW5zcG9ydCBwcm90b2NvbC4gSG1tLCBpcyB0aGVyZSBhbnkgb3RoZXIgcG9zc2libGUgZW50cnkgcG9pbnQgaW50byB0aGlzIHN5c3RlbT8gSSByZWNhbGwgYG52bWZfY3JlYXRlX2N0cmxgIGZyb20gdGhlIE5WTWUgbmFtZXNwYWNlIGNyZWF0aW9uLCBidXQgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdCdzIG5vdCB0aGUgZW50cnkuIFdlbGwsIGBudm1mX2Rldl93cml0ZWAgaXMgYWxzbyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBHdWVzcyBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBmdW5jdGlvbiwgYG52bWZfZGV2X3dyaXRlYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjozNy4yNjM0NDU0MDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk3NTExMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZl9kZXZfd3JpdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzODM9c3RhdGljIERFRklORV9NVVRFWChudm1mX2Rldl9tdXRleCk7XFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzODQtXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjEzODU6c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xMzg2LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudm1mX2Rldl9mb3BzID0ge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xNDgwLVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjE0ODE6XFx0LndyaXRlXFx0XFx0PSBudm1mX2Rldl93cml0ZSxcXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQ4Mi1cXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjM5LjM3MzIwMjE2MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzMDA1ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyJ3MgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE5WTWUgZHJpdmVyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSGV5LCBpZiBgbnZtZl9kZXZfd3JpdGVgIGlzICpzdGF0aWMqLCB3ZSBzaG91bGQganVzdCBiZSBvbiB0aGUgbG9va291dCBmb3IgYSBub24tc3RhdGljIG9uZSwgcmlnaHQ/XCIuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnkgcG9pbnRzLiBUaGF0J3MgdGhlIHByaW9yaXR5LlxuXG5TbywgdGhlIHNpdHVhdGlvbiBpczogaWYgdGhlIG9ubHkgd2F5IGluIGlzIHRocm91Z2ggdGhpcyBgc3RhdGljYCBmdW5jdGlvbiwgdGhlbiB0aGUgKm9ubHkqIGNob2ljZXMgYXJlIHRvIHVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5LCBvciB0byBtb3ZlIHRvIHVzaW5nIHN5c2NhbGxzIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUuXG5cbkFuZCB0aGVuIEkgcmVhbGl6ZSwgaGV5LCB3YWl0LCBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzLCBpbiBmYWN0LCAqc3RhdGljKiEgVGhhdCdzIGEgcG9pbnQuXG5cblNvIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpczogSSByZWFsbHkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIGNoZWNrIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AsIGFuZCBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGF0IGZpbGUgYXQgYWxsLiBUaGF0IHdpbGwgbGVhZCB0aGUgd2F5IHRvIG15IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDIxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjQzLjMxNjIxMDA0OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk1MTYwMTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjQzLjQxNTczODY2MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTEyNjY2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5WTWUgVENQIERyaXZlciBTeW1ib2wgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBOVk1lIFRDUCBkcml2ZXIgY29kZSwgYW5kIG15IGluaXRpYWwgc2VhcmNoIGluIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgdHVybmVkIHVwIGVtcHR5IOKAkyBubyBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0J3MgYSBiaXQgdW51c3VhbCwgdXN1YWxseSB0aGUgaG9zdCBzaWRlIGhhcyBzb21ldGhpbmcuIEd1ZXNzIHRoZSBhY3Rpb24gbWlnaHQgYmUgaW4gdGhlIHRhcmdldCBzaWRlIGltcGxlbWVudGF0aW9uLiBJJ2xsIHN3aXRjaCBteSBmb2N1cyBvdmVyIHRvIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYCBhbmQgc3RhcnQgbXkgZGVlcCBkaXZlIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBvdGhlciBoYWxmIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1Mjo0NS45Mjg0MDgwNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNTA4MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6NDYuMDA0NDY0ODc5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzIxNjY0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbm8gbHVjayBmaW5kaW5nIHRob3NlIHN5bWJvbHMgZXhwb3J0ZWQgaW4gdGhlIG9idmlvdXMgcGxhY2VzLiBUaGF0IG1lYW5zIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgc3RhdGljIGZ1bmN0aW9ucywgb3IgcGVyaGFwcyBsZXZlcmFnZSB0aGUgbW9yZSBnZW5lcmFsIE5WTWUgZnVuY3Rpb25zLiBJIHRoaW5rIGBudm1mX2Rldl93cml0ZWAgYW5kIGBudm1ldF9lbmFibGVfcG9ydGAgY291bGQgYmUgcHJvbWlzaW5nIOKAkyBlc3BlY2lhbGx5IGBudm1ldF9lbmFibGVfcG9ydGAsIHNpbmNlIHRoYXQgKmlzbid0KiBzdGF0aWMuIEhtbSwgaGFuZyBvbi4uLiBpcyBgbnZtZXRfZW5hYmxlX3BvcnRgIGFjdHVhbGx5IGV4cG9ydGVkPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGl0cyBleHBvcnQgc3RhdHVzOyBJJ2xsIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MjYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1Mjo0OS4xMzY2MzQ2OTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mjk2MDI2ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm52bWV0X2VuYWJsZV9wb3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1Mjo1MS41NjYyNDczNDlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTkyMTg2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRDUCBOVk1lIFRhcmdldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgTlZNZSBUQ1AgdGFyZ2V0IGFuZCB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGluZ3MgYWNjb3JkaW5nIHRvIHRoZSBwcmluY2lwbGUgb2YgdXNpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHdoZXJlIHBvc3NpYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGRpcmVjdGx5LCBhdm9pZGluZyB0aGUgZnV6emluZyB0aGF0IHdvdWxkIGNvbWUgd2l0aCBgbnZtZl9kZXZfd3JpdGVgLiBUaGVuLCBJIHdhbnRlZCB0byBjb21iaW5lIGl0IHdpdGggYG52bWV0X3RjcF9hZGRfcG9ydGAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBCdXQgdGhlbiBJIGhhZCB0byByZW1lbWJlciB0aGF0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgICppcyogc3RhdGljLiBMZXQgbWUgc2VlLCBgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5YCBpcyBhIHNvY2tldCBjYWxsYmFjaywgYW5kIGxldCdzIGdvIHdpdGggdGhlIHNpbXBsZXIgYXBwcm9hY2ggb2YgdXNpbmcgYG52bWVfdGNwX3NldHVwX2N0cmxgIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YC5cblxuTm93LCBsZXQncyByZXZpZXcgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50LiBUaGUgZ29hbCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJZiBhIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgY2FuJ3QgYmUgaW5saW5lZC4gU28gYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXJlIGdvb2Qgc2luY2UgdGhleSdyZSBhc3NpZ25lZCB0byBgbnZtZV90Y3BfdHJhbnNwb3J0LmNyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9vcHMuYWRkX3BvcnRgLCByZXNwZWN0aXZlbHkuIEJ1dCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCBhcmUgY2FsbGVkIGRpcmVjdGx5LCBub3QgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgc28gdGhleSBtaWdodCBiZSBpbmxpbmVkLlxuXG5MZXQncyB2ZXJpZnkgdGhhdCB0aGVzZSBvcHRpb25zIGFyZSBhcHByb3ByaWF0ZTpcbiogICBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzIGFjdHVhbGx5IHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBTbyBpdCBzaG91bGQgbm90IGJlIGlubGluZWQuXG4qICAgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIGl0IGFsc28gc2hvdWxkbid0IGJlIGlubGluZWQuXG5cbkdpdmVuIHRoYXQgYW5hbHlzaXMsIHdoYXQgb3RoZXIgb3B0aW9ucyBkbyB3ZSBoYXZlPyBUaGUgZ29hbCBpcyB0byBwcmVmZXIgdGhvc2UgZnVuY3Rpb25zLlxuXG5JIHRoaW5rIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLCBzaW5jZSBpdCdzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCB3b24ndCBiZSBpbmxpbmVkIGVpdGhlci5cblxuU28sIGxldCdzIGZvY3VzIG9uOlxuXG4qICAgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYFxuKiAgIGBudm1ldF90Y3BfYWRkX3BvcnRgXG4qICAgYG52bWV0X3RjcF9hY2NlcHRfd29ya2BcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXNlIHdvdWxkIGJlOlxuXG4qICAgYE5WTUVfVENQYFxuKiAgIGBOVk1FX1RBUkdFVF9UQ1BgXG4qICAgYElQVjZgXG5cbkknbSBkb3VibGUtY2hlY2tpbmcsIGJ1dCBgSVBWNmAgKmlzKiByZXF1aXJlZCBzaW5jZSB0aGUgY29kZSBwYXRoIGlzIG9ubHkgZW5hYmxlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi5cblxuRnVydGhlcm1vcmUsIGBOVk1FX1RBUkdFVGAgaXMgaW5kaXJlY3RseSByZXF1aXJlZCwgc2luY2UgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgTlZNRV9UQVJHRVRgLiBgTlZNRV9UQ1BgIGRlcGVuZHMgb24gYElORVRgIGFuZCBgQkxPQ0tgLiBBbmQgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBOVk1FX1RBUkdFVGAuIFNvLCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgYmVjb21lczpcblxuKiAgIGBOVk1FX1RDUGBcbiogICBgTlZNRV9UQVJHRVRgXG4qICAgYE5WTUVfVEFSR0VUX1RDUGBcbiogICBgSVBWNmBcblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBOVk1FX0NPUkVgIGlzbid0IHJlcXVpcmVkIGJ1dCBpdCdzIG5vdC4gSSd2ZSBnb3QgYSBzb2xpZCBwbGFuIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MDIuMjI1NDY4MTYxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBOVk1FX1RDUFxcbiAgODQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDg3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDg5OlxcdFxcdHNlbGVjdCBOVk1FX0ZBQlJJQ1NcXG4gIDkwOlxcdFxcdGhlbHBcXG4gIDkxOlxcdFxcdCAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTlZNZSBvdmVyIEZhYnJpY3MgcHJvdG9jb2wgdXNpbmdcXG4gIDkyOlxcdFxcdCAgdGhlIFRDUCB0cmFuc3BvcnQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHJlbW90ZSBibG9jayBkZXZpY2VzXFxuICA5MzpcXHRcXHQgIGV4cG9ydGVkIHVzaW5nIHRoZSBOVk1lIHByb3RvY29sIHNldC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxcbiAgOTY6XFx0XFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MDIuMjI1NTI2OTYxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzOTUxNDcwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUvVENQIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCB3aGF0IGl0IG1lYW5zIGZvciBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIGNvbmZpZ3VyZSB0aGVpciBuZXR3b3JrIHNvY2tldHMsIHNwZWNpZmljYWxseSBieSBzd2l0Y2hpbmcgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgZm9yIHNldHRpbmcgc29ja2V0IG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgZXhhbWluYXRpb24sIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGFkZGl0aW9uIG9mIElQdjYgVENMQVNTIHN1cHBvcnQuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgdGhhdCBvdXIgZnV6emluZyBzdHJhdGVneSBuZWVkcyB0byBhZGFwdC5cblxuTGV0J3MgYmVnaW4gd2l0aCB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcy4gRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBOVk1lL1RDUCBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGVkOiBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBgTlZNRV9UQVJHRVRfVENQYCwgYW5kIGBJUFY2YC4gR2l2ZW4gdGhhdCBgTlZNRV9GQUJSSUNTYCBpbXBsaWNpdGx5IHNlbGVjdHMgYE5WTUVfQ09SRWAsIEkgY2FuIHNraXAgZXhwbGljaXRseSBsaXN0aW5nIGBOVk1FX0NPUkVgLiBUaGUga2VybmVsIGNvbmZpZyBkZXBlbmRlbmNpZXMgd2VyZSBjcml0aWNhbCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9uIGluIGVudmlyb25tZW50cyB1dGlsaXppbmcgdGhlIFRDUCB0cmFuc3BvcnQsIHN1Y2ggYXMgdGhvc2UgdXRpbGl6aW5nIHZpcnR1YWxpemVkIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy5cblxuTm93LCB3aGVyZSBkbyBJIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cz8gVGhlIHBhdGNoIGhpZ2hsaWdodHMgdGhlIGNydWNpYWwgYXJlYXMgb2YgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4gVGhpcyBsZWFkcyBtZSB0byBwaW5wb2ludCB0aGUgZm9sbG93aW5nIGtleSBmdW5jdGlvbnM6IGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBteSBhc3N1bXB0aW9ucyBvbiBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYC4gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBpbmRlZWQgY2FsbCBgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlYCBhbmQgdGhlbiBjYWxscyBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCB3aGljaCBtZWFucyB0aGF0IHRoZSBzb2NrZXQgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aGVuIHVzaW5nIHRoaXMuIFNvIHllcywgdGhpcyBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgYW5kIGEgZ29vZCBlbnRyeSBwb2ludC5cblxuU2ltaWxhcmx5LCBJIHNob3VsZCBhbHNvIHZlcmlmeSB0aGF0IGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgYSBnb29kIGVudHJ5IHBvaW50LCB3aGljaCBjYWxscyBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgd2hpY2ggY2FsbHMgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYG52bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AsIHdoaWNoIGNhbGxzIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAuIFl1cCwgdGhhdCBjb25maXJtcyBpdC5cblxuV2l0aCB0aGlzIGFuYWx5c2lzIGNvbXBsZXRlLCBpdCdzIHRpbWUgdG8gZmxhZyB0aGVzZSBmdW5jdGlvbiBjYWxscyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24gd2l0aGluIG15IGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBoYW5kbGluZywgZXJyb3IgcGF0aHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBzb2NrZXQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIElQdjYgVENMQVNTLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzOSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MzoxMC42MjA2NzYxNjhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ3NjQ3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgb3ZlciBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgdG8gdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGluc3RlYWQgb2YgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IHNvY2tldHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc29ja2V0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5WTWUgVENQIHRyYW5zcG9ydCwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wYmFjayBvciB2ZXRoIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb250cm9sbGVyIGNyZWF0aW9uIGFuZCBwb3J0IGFkZGl0aW9uIHBhdGhzIHdoZXJlIHRoZXNlIHNvY2tldCBvcHRpb25zIGFyZSBjb25maWd1cmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgb3ZlciBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgdG8gdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGluc3RlYWQgb2YgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IHNvY2tldHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc29ja2V0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5WTWUgVENQIHRyYW5zcG9ydCwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wYmFjayBvciB2ZXRoIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb250cm9sbGVyIGNyZWF0aW9uIGFuZCBwb3J0IGFkZGl0aW9uIHBhdGhzIHdoZXJlIHRoZXNlIHNvY2tldCBvcHRpb25zIGFyZSBjb25maWd1cmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MzoxMC43MzU0NDgyMjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQ2MDkwMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MTAuNzM2MjQ0MjcyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjQ1Mjg5MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxNzRkNmU0OTYxOGMyZjYzZTNjZDRkMjFkNmY4ODZlYTUzZDQwNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgKzE3NzQsNTYgQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbitcdFx0XHRcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXG4rXHRcdFx0XHQgIHN0cmxlbihpZmFjZSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbit7XG4rXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4rXHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLCBzaXplb2YodGNsYXNzKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4ge1xuQEAgLTE4MTksMjQgKzE4NjksMjYgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4gXG4gXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4gXG4gXHQvKlxuIFx0ICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0XG4gXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXG4gXHQgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LlxuIFx0ICovXG4tXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMCkge1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0fVxuIFxuIFx0LyogU2V0IDEwIHNlY29uZHMgdGltZW91dCBmb3IgaWNyZXNwIHJlY3Ztc2cgKi9cbiBcdHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2dGltZW8gPSAxMCAqIEhaO1xuQEAgLTE4NjQsMTAgKzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFxuIFx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfSE9TVF9JRkFDRSkge1xuIFx0XHRjaGFyICppZmFjZSA9IG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlaG9zdF9pZmFjZTtcbi1cdFx0c29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTtcbiBcbi1cdFx0cmV0ID0gc29ja19zZXRzb2Nrb3B0KHF1ZXVlLVx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcbi1cdFx0XHRcdCAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTE2OTYsMTAgKzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gU0tfQ0FOX1JFVVNFO1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IHRvcyA9IGluZXRfc2soc2spLVx1MDAzZXJjdl90b3M7XG4rXG4rXHRpZiAodG9zIFx1MDAzZSAwKVxuK1x0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbitcdFx0dTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbitcbitcdFx0aWYgKHRjbGFzcyBcdTAwM2UgMClcbitcdFx0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXG4rXHRcdFx0XHRcdCAgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuK1x0XHRcdFx0XHQgICBzaXplb2YodGNsYXNzKSk7XG4rXHR9XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cdTAwM2Vzb2NrO1xuLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cdTAwM2Vzayk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXG5AQCAtMTcxNywxNCArMTc2OSwxNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKGluZXQtXHUwMDNlcmN2X3RvcyBcdTAwM2UgMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2ssIGluZXQtXHUwMDNlcmN2X3Rvcyk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVx1MDAzZXNrKTtcbiBcbiBcdHJldCA9IDA7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNnNvY2stXHUwMDNlc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5AQCAtMjA5OCwxMCArMjE1MCwxMCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcbiBcdHBvcnQtXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7XG4tXHRzb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0bnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MTAuNzM2MjQ1ODIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjQ1MjU4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5WTWUgVENQIFNvY2tldCBPcHRpb24gV3JhcHBlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIGBzb2NrXypgIGZ1bmN0aW9ucyDigJMgYHNvY2tfbm9fbGluZ2VyYCwgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCBhbmQgdGhlIGxpa2Ug4oCTIHdpdGggY3VzdG9tIHdyYXBwZXJzLiBUaGVzZSB3cmFwcGVycywgc3VjaCBhcyBgbnZtZV90Y3Bfc29ja19ub19saW5nZXJgLCBhcmUgdGhlbiB1c2luZyBgZG9fc29ja19zZXRzb2Nrb3B0YCB3aXRoIGBLRVJORUxfU09DS1BUUmAgdG8gYWN0dWFsbHkgc2V0IHRoZSBzb2NrZXQgb3B0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuIGBkb19zb2NrX3NldHNvY2tvcHRgIHRha2VzIGEgYHNvY2twdHJfdGAgY29uc3RydWN0ZWQgdmlhIGBLRVJORUxfU09DS1BUUmAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFyaWFibGVzIGJlaW5nIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEknbSBzZWVpbmcgbG9jYWwgdmFyaWFibGVzIGJlaW5nIHBhc3NlZCBpbiwgbGlrZSBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBhbiBgaW50IHZhbCA9IDE7YCwgYW5kIHRoZSBvdGhlcnMuIEkgY2FuIGNvbmZpcm0gdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbkknbSB0aGlua2luZywgXCJJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0cyB3YXkgaW4gdGhlcmU/XCIgQnV0IGl0IGxvb2tzIGxpa2UgZXZlcnl0aGluZydzIGluaXRpYWxpemVkLiBgc3RydWN0IGxpbmdlcmAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBgaW50IHZhbGAgaXMsIGBwcmlvcml0eWAsIGBpZmFjZWAsIGB0b3NgLCBhbmQgYHRjbGFzc2AgYXJlIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBidXQgdGhleSBhcmUgYWxsIGluaXRpYWxpemVkLiBUaGUgdmFsdWVzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYHRvc2AgYW5kIGB0Y2xhc3NgIHZhbHVlcyBsb29rIHRvIGJlIGluaXRpYWxpemVkIGFzIHdlbGwuIFxuXG5TaW5jZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBhIGtlcm5lbCBmdW5jdGlvbiwgS01TQU4gd291bGQgaGF2ZSBjYXVnaHQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbk9mIGNvdXJzZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBzaXplcyBhcmUgY29ycmVjdC4gSWYgd2UgYXJlIHBhc3NpbmcgaW5jb3JyZWN0IHNpemVzLCBgZG9fc29ja19zZXRzb2Nrb3B0YCBjb3VsZCByZWFkIGJleW9uZCB0aGUgaW50ZW5kZWQgYm91bmRzLiBCdXQsIHRoZSBzaXplcyBiZWluZyBwYXNzZWQgYXJlIGBzaXplb2YobGluZylgLCBgc2l6ZW9mKHByaW9yaXR5KWAsIGBzaXplb2YodmFsKWAsIGBzaXplb2YodG9zKWAsIGFuZCBgc2l6ZW9mKHRjbGFzcylgIOKAkyB0aGF0J3MgZ29vZCFcblxuVGhpcyBwYXRjaCBzZWVtcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcsIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBzb21lIGBzb2NrX3NldHNvY2tvcHRgIHZzLiBgZG9fc29ja19zZXRzb2Nrb3B0YCBudWFuY2VzIG9yIHBlcmhhcHMgcmVsYXRpbmcgdG8gYHNvY2twdHJfdGAgY2hhbmdlcyBvciB0aGUgcmVtb3ZhbCBvZiB0aG9zZSBgc29ja19zZXRfKmAgaGVscGVycy5cblxuU28sIGxldCdzIGJlIG1ldGhvZGljYWwuIExldCdzIG1ha2Ugc3VyZSB0aGUgdmFyaWFibGVzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIFRoZSBsaW5nZXIgc3RydWN0IGxvb2tzIGxpa2UgaXQgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLiBJcyB0aGVyZSBwYWRkaW5nIHRoYXQgY291bGQgYmUgY2F1c2luZyBhbiBpc3N1ZSB3aXRoIGBzdHJ1Y3QgbGluZ2VyYD8gTm8sIGEgYHN0cnVjdCBsaW5nZXJgIGNvbnRhaW5zIHR3byBgaW50YHMgc28sIGl0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbHNvLCB0aGlzIHBhdGNoIGlzIG9ubHkgc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIHRoZSBrZXJuZWw7IHRoZXJlIGFyZSBubyBjaGFuZ2VzIG9yIGFkZGl0aW9ucyB0byB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyBhbmQgbm8gbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBpc3N1ZXMuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgc2hpZnRzIHRoZSBtZXRob2Qgb2Ygc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIHRoZSBsZWdhY3kgaGVscGVycyB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCB0aGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgYW55IHNvcnQgb2YgaW5mb3JtYXRpb24gbGVhay5cblxuUmV2aWV3aW5nIHRoZSBydWxlczogVGhpcyBkb2Vzbid0IGludHJvZHVjZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gQWxsIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLiBJIHdpbGwgc2V0IGl0IHRvIGZhbHNlIGFuZCBkb2N1bWVudCBteSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTgsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUzOjIxLjk4MTUwODg2N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IGNhbGxzIHRvIHNvY2tldCBvcHRpb24gaGVscGVycyAobGlrZSBgc29ja19ub19saW5nZXJgLCBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBldGMuKSB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYEtFUk5FTF9TT0NLUFRSYC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKHN1Y2ggYXMgYHN0cnVjdCBsaW5nZXIgbGluZ2AsIGBpbnQgdmFsYCwgYHUzMiBwcmlvcml0eWAsIGB1OCB0b3NgLCBgdTggdGNsYXNzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGlzIG5vIHBhZGRpbmcgaW4gdGhlc2Ugc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 01:09:37 +0000 UTC FinishedAt: 2026-08-16 01:53:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3eb40771c00a8488fa6ed2cc1fe203477908bf38", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3eb40771c00a8488fa6ed2cc1fe203477908bf38", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NVME_TCP", "NVME_TARGET", "NVME_TARGET_TCP", "IPV6" ], "series_id": "66ec2139-b0b2-441d-a374-83fe0d6f009f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nvme_tcp_create_ctrl", "nvmet_tcp_add_port", "nvmet_tcp_accept_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV90Y3BfY3JlYXRlX2N0cmwmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O252bWV0X3RjcF9hY2NlcHRfd29yayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGRpcmVjdCBjYWxscyB0byBzb2NrZXQgb3B0aW9uIGhlbHBlcnMgKGxpa2UgYHNvY2tfbm9fbGluZ2VyYCwgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgZXRjLikgd2l0aCBjdXN0b20gd3JhcHBlcnMgdGhhdCB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBLRVJORUxfU09DS1BUUmAuIEFsbCBsb2NhbCB2YXJpYWJsZXMgcGFzc2VkIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIChzdWNoIGFzIGBzdHJ1Y3QgbGluZ2VyIGxpbmdgLCBgaW50IHZhbGAsIGB1MzIgcHJpb3JpdHlgLCBgdTggdG9zYCwgYHU4IHRjbGFzc2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGVyZSBpcyBubyBwYWRkaW5nIGluIHRoZXNlIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5LCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxNzRkNmU0OTYxOGMyZjYzZTNjZDRkMjFkNmY4ODZlYTUzZDQwNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG5pbmRleCBiYTVjN2IzZTJhN2M2Li42NTdhY2FlOWU0YTQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG5AQCAtMTc3NCw2ICYjNDM7MTc3NCw1NiBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuJiM0MztcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkoc3RydWN0IHNvY2sgKnNrLCB1MzIgcHJpb3JpdHkpXG4mIzQzO3tcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksXG4mIzQzO1x0XHRcdCAgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnByaW9yaXR5KSwgc2l6ZW9mKHByaW9yaXR5KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHN0cnVjdCBzb2NrICpzaywgY2hhciAqaWZhY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsXG4mIzQzO1x0XHRcdFx0ICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSxcbiYjNDM7XHRcdFx0XHQgIHN0cmxlbihpZmFjZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSAxO1xuJiM0MztcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXG4mIzQzO1x0XHRcdCAgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfU1lOQ05ULFxuJiM0MztcdFx0XHRcdCAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdG9zKVxuJiM0Mzt7XG4mIzQzO1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4mIzQzO1x0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbiYjNDM7XHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4mIzQzO1x0XHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dGNsYXNzKSwgc2l6ZW9mKHRjbGFzcykpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFx0XHRcdFx0a2V5X3NlcmlhbF90IHBza2lkKVxuIHtcbkBAIC0xODE5LDI0ICYjNDM7MTg2OSwyNiBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuICNlbmRpZlxuIFxuIFx0LyogU2luZ2xlIHN5biByZXRyeSAqL1xuLVx0dGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCAxKTtcbiYjNDM7XHRudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4gXG4gXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFxuIFx0LypcbiBcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxuIFx0ICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZFxuIFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cbiBcdCAqL1xuLVx0c29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0bnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4gXG4gXHRpZiAoc29fcHJpb3JpdHkgXHUwMDNlIDApXG4tXHRcdHNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiYjNDM7XHRcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuJiM0MztcdGlmIChuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdG52bWVfdGNwX3NvY2tfc2V0X3RvcyhxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBuY3RybC1cdTAwM2VvcHRzLVx1MDAzZXRvcyk7XG4mIzQzO1x0XHRudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNldCAxMCBzZWNvbmRzIHRpbWVvdXQgZm9yIGljcmVzcCByZWN2bXNnICovXG4gXHRxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcbkBAIC0xODY0LDEwICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXG4gXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2VtYXNrIFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XG4gXHRcdGNoYXIgKmlmYWNlID0gbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2Vob3N0X2lmYWNlO1xuLVx0XHRzb2NrcHRyX3Qgb3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoaWZhY2UpO1xuIFxuLVx0XHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXHUwMDNlc29jaywgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLFxuLVx0XHRcdFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcbiYjNDM7XHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwmIzM0O2ZhaWxlZCB0byBiaW5kIHRvIGludGVyZmFjZSAlcyBxdWV1ZSAlZCBlcnIgJWRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbmluZGV4IDc1YTI3NmQ3M2JlM2UuLmQzNDI0OWNmMzc1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5AQCAtMTY5NiwxMCAmIzQzOzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuJiM0MztcbiYjNDM7XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuJiM0Mzt7XG4mIzQzO1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxuJiM0MztcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSBTS19DQU5fUkVVU0U7XG4mIzQzO1xuJiM0MztcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsXG4mIzQzO1x0XHRcdCAgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IDE7XG4mIzQzO1xuJiM0MztcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbiYjNDM7XHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHU4IHRvcyA9IGluZXRfc2soc2spLVx1MDAzZXJjdl90b3M7XG4mIzQzO1xuJiM0MztcdGlmICh0b3MgXHUwMDNlIDApXG4mIzQzO1x0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4mIzQzO1x0XHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHR1OCB0Y2xhc3MgPSBpcDZfdGNsYXNzKGluZXQ2X3NrKHNrKS1cdTAwM2VyY3ZfZmxvd2luZm8pO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0Y2xhc3MgXHUwMDNlIDApXG4mIzQzO1x0XHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcbiYjNDM7XHRcdFx0XHRcdCAgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuJiM0MztcdFx0XHRcdFx0ICAgc2l6ZW9mKHRjbGFzcykpO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jayA9IHF1ZXVlLVx1MDAzZXNvY2s7XG4tXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLVx1MDAzZXNrKTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBrZXJuZWxfZ2V0c29ja25hbWUoc29jayxcbkBAIC0xNzE3LDE0ICYjNDM7MTc2OSwxNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuJiM0MztcdG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzb2NrLVx1MDAzZXNrKTtcbiBcbiBcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkoc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuJiM0MztcdFx0bnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAoaW5ldC1cdTAwM2VyY3ZfdG9zIFx1MDAzZSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3Moc29jay1cdTAwM2VzaywgaW5ldC1cdTAwM2VyY3ZfdG9zKTtcbiYjNDM7XHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2spO1xuJiM0MztcdG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc29jay1cdTAwM2Vzayk7XG4gXG4gXHRyZXQgPSAwO1xuIFx0d3JpdGVfbG9ja19iaChcdTAwMjZzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuQEAgLTIwOTgsMTAgJiM0MzsyMTUwLDEwIEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBwb3J0O1xuIFx0cG9ydC1cdTAwM2VkYXRhX3JlYWR5ID0gcG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcbi1cdHNvY2tfc2V0X3JldXNlYWRkcihwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuLVx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0bnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbiBcdGlmIChzb19wcmlvcml0eSBcdTAwM2UgMClcbi1cdFx0c29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4mIzQzO1x0XHRudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4gXG4gXHRyZXQgPSBrZXJuZWxfYmluZChwb3J0LVx1MDAzZXNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNnBvcnQtXHUwMDNlYWRkcixcbiBcdFx0XHRzaXplb2YocG9ydC1cdTAwM2VhZGRyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05WTUVfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV90Y3BfY3JlYXRlX2N0cmwmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O252bWV0X3RjcF9hY2NlcHRfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBvdmVyIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyB0byB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAgZm9yIHNldHRpbmcgc29ja2V0IG9wdGlvbnMgaW5zdGVhZCBvZiBkaXJlY3QgZnVuY3Rpb24gY2FsbHMuIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIHRoZSBgSVBWNl9UQ0xBU1NgIHNvY2tldCBvcHRpb24gZm9yIElQdjYgc29ja2V0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0d29yayBzb2NrZXQgY29uZmlndXJhdGlvbiBvZiB0aGUgTlZNZSBUQ1AgdHJhbnNwb3J0LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbnRyb2xsZXIgY3JlYXRpb24gYW5kIHBvcnQgYWRkaXRpb24gcGF0aHMgd2hlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMTc0ZDZlNDk2MThjMmY2M2UzY2Q0ZDIxZDZmODg2ZWE1M2Q0MDY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDE6NTA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO2xpbmcpLCBzaXplb2YobGluZykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSwKJiM0MzsJCQkJICBzdHJsZW4oaWZhY2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcykKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0b3MpLCBzaXplb2YodG9zKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikKJiM0MzsJCWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsIElQVjZfVENMQVNTLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RjbGFzcyksIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCQkJCWtleV9zZXJpYWxfdCBwc2tpZCkKIHsKQEAgLTE4MTksMjQgJiM0MzsxODY5LDI2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAjZW5kaWYKIAogCS8qIFNpbmdsZSBzeW4gcmV0cnkgKi8KLQl0Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgMSk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIDEpOwogCiAJLyogU2V0IFRDUCBubyBkZWxheSAqLwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCS8qCiAJICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0CiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApCi0JCWlwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwlpZiAobmN0cmwtJmd0O29wdHMtJmd0O3RvcyAmZ3Q7PSAwKSB7CiYjNDM7CQludm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtJmd0O3NvY2stJmd0O3NrLCBuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zKTsKJiM0MzsJCW52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwl9CiAKIAkvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqLwogCXF1ZXVlLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2dGltZW8gPSAxMCAqIEhaOwpAQCAtMTg2NCwxMCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCiAJaWYgKG5jdHJsLSZndDtvcHRzLSZndDttYXNrICZhbXA7IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHsKIAkJY2hhciAqaWZhY2UgPSBuY3RybC0mZ3Q7b3B0cy0mZ3Q7aG9zdF9pZmFjZTsKLQkJc29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTsKIAotCQlyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtJmd0O3NvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKLQkJCQkgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpOwomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgaWZhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiAJCQkgICYjMzQ7ZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwppbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTE2OTYsMTAgJiM0MzsxNjk2LDYyIEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKQogCXJlYWRfdW5sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7bGluZyksIHNpemVvZihsaW5nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSBTS19DQU5fUkVVU0U7CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwl1OCB0b3MgPSBpbmV0X3NrKHNrKS0mZ3Q7cmN2X3RvczsKJiM0MzsKJiM0MzsJaWYgKHRvcyAmZ3Q7IDApCiYjNDM7CQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RvcyksIHNpemVvZih0b3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikgewomIzQzOwkJdTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktJmd0O3Jjdl9mbG93aW5mbyk7CiYjNDM7CiYjNDM7CQlpZiAodGNsYXNzICZndDsgMCkKJiM0MzsJCQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUFY2LAomIzQzOwkJCQkJICAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKCZhbXA7dGNsYXNzKSwKJiM0MzsJCQkJCSAgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS0mZ3Q7c29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLSZndDtzayk7CiAJaW50IHJldDsKIAogCXJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLApAQCAtMTcxNywxNCAmIzQzOzE3NjksMTQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpCiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwogCiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkoc29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJLyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi8KLQlpZiAoaW5ldC0mZ3Q7cmN2X3RvcyAmZ3Q7IDApCi0JCWlwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzaywgaW5ldC0mZ3Q7cmN2X3Rvcyk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stJmd0O3NrKTsKIAogCXJldCA9IDA7CiAJd3JpdGVfbG9ja19iaCgmYW1wO3NvY2stJmd0O3NrLSZndDtza19jYWxsYmFja19sb2NrKTsKQEAgLTIwOTgsMTAgJiM0MzsyMTUwLDEwIEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydCkKIAlwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gcG9ydDsKIAlwb3J0LSZndDtkYXRhX3JlYWR5ID0gcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHk7CiAJcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7Ci0Jc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKLQl0Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkocG9ydC0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJcmV0ID0ga2VybmVsX2JpbmQocG9ydC0mZ3Q7c29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopJmFtcDtwb3J0LSZndDthZGRyLAogCQkJc2l6ZW9mKHBvcnQtJmd0O2FkZHIpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOVk1lIG92ZXIgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9udm1lL2hvc3QvdGNwLmNgIGFuZCBgZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBhIHNvY2tldCBvcHRpb24gb3ZlcmhhdWwsIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgY2FsbHMgbGlrZSBgdGNwX3NvY2tfc2V0X3N5bmNudGAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4sIHdpdGggYSBjdXN0b20gd3JhcHBlciB0aGF0IHVsdGltYXRlbHkgY2FsbHMgYGRvX3NvY2tfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gU2VlbXMgbGlrZSBhIG1vdmUgdG93YXJkIGEgbW9yZSBjZW50cmFsaXplZCBzb2NrZXQgb3B0aW9uIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHdoaWNoIGNvdWxkIG9mZmVyIGJlbmVmaXRzIGluIHRlcm1zIG9mIG1haW50YWluYWJpbGl0eSBhbmQgY29udHJvbC4gQWRkaW5nIGBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3NgIGFuZCBgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzc2AgdG8gc2V0IGBJUFY2X1RDTEFTU2AgaWYgdGhlIHNvY2tldCBpcyBJUHY2IGlzIGFsc28gYWRkZWQsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCgpGdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBjaGFuZ2VzIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCBhbmQgaXQgYWRkcyBJUHY2IHRyYWZmaWMgY2xhc3MgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB2aXJ0dWFsaXphdGlvbjsgY2FuIEkgcmVhc29uYWJseSByZXByb2R1Y2UgdGhpcyBpbiBhIHRlc3QgZW52aXJvbm1lbnQ/IFRoYW5rZnVsbHksIHRoZSB0ZXh0IGNvbmZpcm1zIHRoYXQgTlZNZSBvdmVyIFRDUCBpcyB0ZXN0YWJsZSB2aWEgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzIGluIFFFTVUsIHNvIHRoYXTigJlzIGEgcGx1cy4KCk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIGZvY3VzIG9uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCwgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AsIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YC4gU28sIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBuZXcgb3IgbW9kaWZpZWQgZnVuY3Rpb25zLiBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCBhcmUgd2hlcmUgSeKAmWxsIG5lZWQgdG8gcHV0IG15IGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYmxpbmQgc3BvdHMgSSBtaWdodCBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfdGNwX2FsbG9jX3F1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTE4MTg9c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0xODI2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MTgyNzpzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cdFx0XHRcdGtleV9zZXJpYWxfdCBwc2tpZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMTM4PXN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTU2LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE1NzpcdHJldCA9IG52bWVfdGNwX2FsbG9jX3F1ZXVlKGN0cmwsIDAsIHBza2lkKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNTgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTIxNzI9c3RhdGljIGludCBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTctXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBjdHJsLVx1MDAzZXF1ZXVlX2NvdW50OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE5ODpcdFx0cmV0ID0gbnZtZV90Y3BfYWxsb2NfcXVldWUoY3RybCwgaSxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTktXHRcdFx0XHRjdHJsLVx1MDAzZXRsc19wc2tpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5WTWUtb0YgVENQIFF1ZXVlIEFsbG9jYXRpb246IERpZ2dpbmcgRGVlcGVyKioKCk9rYXksIHNvIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FydmVzIG91dCB0aGUgcXVldWVzIGZvciBOVk1lIG92ZXIgVENQLCBnb3QgaXQuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgdGhlIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhvc3QgZHJpdmVyLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRvIHNldCB1cCB0aG9zZSBxdWV1ZXMgdG8gaGFuZGxlIGNvbW1hbmRzLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0cyBhcmUgYXNzb2NpYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzM4PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc1MS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTc1MjpzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTc1My17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xODc2PXN0YXRpYyB2b2lkIG52bWV0X3RjcF90bHNfaGFuZHNoYWtlX2RvbmUodm9pZCAqZGF0YSwgaW50IHN0YXR1cyxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5MDAtXHRpZiAoIXN0YXR1cylcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTkwMTpcdFx0c3RhdHVzID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTkwMi1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE5NjM9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIwNDAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIwNDE6XHRyZXQgPSBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2socXVldWUpO1xuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDQyLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5WTWUvVENQIFF1ZXVlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUuIEkgcmVtZW1iZXIgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfZG9uZWAgYW5kIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgLiBUaGF0JiMzOTtzIHJpZ2h0LCB0aG9zZSBhcmUga2V5IGNvbXBvbmVudHMgd2l0aGluIHRoZSBOVk1lIG92ZXIgVENQIHRhcmdldCBkcml2ZXIuIFNvLCBiYXNpY2FsbHksIGl0JiMzOTtzIGNlbnRyYWwgdG8gc2V0dGluZyB1cCB0aGUgc29ja2V0IGNvbm5lY3Rpb24gZm9yIGEgcXVldWUuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG52bWV0X3RjcF9hZGRfcG9ydGAgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWV0X3RjcF9hZGRfcG9ydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIwOTA9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDY6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMTA3LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4Ni1cdC5tc2RiZFx0XHRcdD0gMSxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjI4NzpcdC5hZGRfcG9ydFx0XHQ9IG52bWV0X3RjcF9hZGRfcG9ydCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4OC1cdC5yZW1vdmVfcG9ydFx0XHQ9IG52bWV0X3RjcF9yZW1vdmVfcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgTlZNZSBvdmVyIFRDUCBUYXJnZXQ6IFRhcmdldGVkIEFyZWFzIGFuZCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudm1ldF90Y3BfYWRkX3BvcnRgLCB3aGljaCBpcyB0aGUgYGFkZF9wb3J0YCBjYWxsYmFjayBmb3IgdGhlIE5WTWUgb3ZlciBUQ1AgdGFyZ2V0LiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHdvcnRoIGZ1enppbmc/IEFuZCB0aGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseS4gSSBzZWUgY2hhbmdlcyBpbiBob3cgc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQsIGFuZCBhIG5ldyBzZXR0aW5nIGZvciBgSVBWNl9UQ0xBU1NgIGhhcyBiZWVuIGFkZGVkLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBhcmVhcyB0aGF0IGNvdWxkIGJlIHN1c2NlcHRpYmxlIHRvIHN1YnRsZSBidWdzLgoKU28sIHdoZXJlIHNob3VsZCBJIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cz8gSSBpbml0aWFsbHkgdGhvdWdodCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgLCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCwgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIHdlcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMuIEFoLCB3YWl0LCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgSSBjYW4gYWN0dWFsbHkgdHJpZ2dlciBmcm9tIHRoZSBvdXRzaWRlLiBPa2F5LCBhZnRlciBhIHF1aWNrIGxvb2ssIGl0IHNlZW1zIGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgaXMgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IGFzIGl0IGlzIGNhbGxlZCBmcm9tIGBudm1lX3RjcF9zZXR1cF9jdHJsYC4gVGhpcyBpcyB0aGUgb25lIHRvIHRhcmdldCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV90Y3Bfc2V0dXBfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDMxPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQzNS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0MzY6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjQzNy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjUxOT1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTI3LVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjUyODpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoY3RybCwgZmFsc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjUyOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjU4OT1zdGF0aWMgdm9pZCBudm1lX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjYwOC1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI2MDk6XHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MTAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwNDQ9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfdGNwX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDYzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA2NDpcdHJldCA9IG52bWVfdGNwX3NldHVwX2N0cmwoXHUwMDI2Y3RybC1cdTAwM2VjdHJsLCB0cnVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwNjUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzYxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqTXkgUGVyc3BlY3RpdmUgb24gQ29udHJvbGxlciBDcmVhdGlvbiAobnZtZV90Y3BfY3JlYXRlX2N0cmwpKioKCkFscmlnaHQsIHNvIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhlcmUuIFRoaW5raW5nIGFib3V0IGl0LCB0aGlzIGlzIHRoZSBiaWcgb25lLCB0aGUgY29yZSBlbnRyeSBwb2ludC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLCB0aGUgc3RhcnRpbmcgZ3VuIGZvciBicmluZ2luZyBhIG5ldyBjb250cm9sbGVyIGludG8gZXhpc3RlbmNlLCBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZS4gSXQmIzM5O3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwIGZvciBhIE5WTWUvVENQIGNvbnRyb2xsZXIsIHJpZ2h0PyBFdmVyeXRoaW5nIGVsc2UgcHJvYmFibHkgZmxvd3MgZnJvbSB0aGlzIHBvaW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBraWNraW5nIG9mZiBhbGwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgdG8gZXN0YWJsaXNoIGEgZnVuY3Rpb25hbCBOVk1lIGNvbnRyb2xsZXIgaW5zdGFuY2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSAmIzM0O2hvdyYjMzQ7IG9mIG1ha2luZyB0aGluZ3Mgd29yaywgYW5kIGJlaW5nIHJlYWR5IHRvIHJlc3BvbmQgdG8gcmVxdWVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfdGNwX2NyZWF0ZV9jdHJsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI5NjI9c3RhdGljIHN0cnVjdCBudm1lX3RjcF9jdHJsICpudm1lX3RjcF9hbGxvY19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDQzLVxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA0NDpzdGF0aWMgc3RydWN0IG52bWVfY3RybCAqbnZtZV90Y3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzA0NS1cdFx0c3RydWN0IG52bWZfY3RybF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTMwODY9c3RhdGljIHN0cnVjdCBudm1mX3RyYW5zcG9ydF9vcHMgbnZtZV90Y3BfdHJhbnNwb3J0ID0ge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwOTUtXHRcdFx0ICBOVk1GX09QVF9LRVlSSU5HIHwgTlZNRl9PUFRfVExTX0tFWSB8IE5WTUZfT1BUX0NPTkNBVCxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMwOTY6XHQuY3JlYXRlX2N0cmxcdD0gbnZtZV90Y3BfY3JlYXRlX2N0cmwsXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDk3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgRnV6emluZyBFZmZvcnRzIGluIE5WTWUtb0YgT3ZlciBUQ1AqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgdGhlIGZ1enppbmcgZWZmb3J0cyBmb3Igb3VyIE5WTWUtb0Ygb3ZlciBUQ1AgaW1wbGVtZW50YXRpb24uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIG5vdCBqdXN0IHNvbWUgaW50ZXJuYWwgZnVuY3Rpb24sIGJ1dCBhIGNydWNpYWwgZW50cnkgcG9pbnQg4oCTIGEgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciBgY3JlYXRlX2N0cmxgIHdpdGhpbiB0aGUgYG52bWZfdHJhbnNwb3J0X29wc2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlLiBBIHdlbGwtcGxhY2VkIGZ1enplciBoaXR0aW5nIHRoYXQgZnVuY3Rpb24gY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIGEgd2hvbGUgaG9zdCBvZiB2dWxuZXJhYmlsaXRpZXMsIGdpdmVuIGl0cyByb2xlIGluIGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zLiBJdCYjMzk7cyBhIGtleSBzcG90IGZvciBhdHRhY2sgc3VyZmFjZS4KCk9uIHRoZSB0YXJnZXQgc2lkZSwgSSBuZWVkIHRvIHJlbWVtYmVyIGBudm1ldF90Y3BfYWRkX3BvcnRgLiBJdCYjMzk7cyBhbHNvIGEgY2FsbGJhY2ssIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGludmVzdGlnYXRpb24gYW5kIHBvdGVudGlhbCBmdXp6aW5nIGFzIHdlbGwsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3NlcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZXRfdGNwX2FkZF9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA5MD1zdGF0aWMgdm9pZCBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwNS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MjEwNjpzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDcte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIG52bWV0X3RjcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg2LVx0Lm1zZGJkXHRcdFx0PSAxLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMjg3Olx0LmFkZF9wb3J0XHRcdD0gbnZtZXRfdGNwX2FkZF9wb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg4LVx0LnJlbW92ZV9wb3J0XHRcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgTlZNZS1vRiBUQ1AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbnZtZXRfdGNwX2FkZF9wb3J0YCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHRoZSByZWdpc3RlcmVkIGBhZGRfcG9ydGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbnZtZXRfZmFicmljc19vcHNgIHN0cnVjdHVyZSwgc28gdGhhdCYjMzk7cyBpdHMgcHJpbWFyeSByb2xlLiBJdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgZm9yIHRoZSBUQ1AgdHJhbnNwb3J0LCBnb3QgaXQuIEl0IGhhbmRsZXMgdGhlIGluaXRpYWwgcG9ydCBzZXR1cCBmb3IgTlZNZSBvdmVyIFRDUCwgbGlua2luZyBpdCBpbnRvIHRoZSBmcmFtZXdvcmsuCgpOb3csIEkmIzM5O20gcGl2b3Rpbmcgc2xpZ2h0bHkgYW5kIHRoaW5raW5nIGFib3V0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBUaGF0IG1ldGhvZCwgaWYgbWVtb3J5IHNlcnZlcywgaXMgY2FsbGVkIGZyb20gYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgc2V0cyB1cCB0aGUgYWN0dWFsIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBxdWV1ZS4gIFNvIHdlIGdvIGZyb20gcG9ydCB0byBxdWV1ZSB0byBzb2NrZXQsIGFuZCB0aGF0IHF1ZXVlIGlzIHRoZSBwaWVjZSB0aGF0IG1hcHMgdG8gYSBzcGVjaWZpYyBJL08gY29udGV4dC4gV2UgYXJlIHN0YXJ0aW5nIHRvIHB1dCB0b2dldGhlciB0aGUgZW50aXJlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1ldF90Y3BfYWxsb2NfcXVldWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xOTYwPXN0YXRpYyB2b2lkIG52bWV0X3RjcF90bHNfaGFuZHNoYWtlX3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3KSB7fVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTk2Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTk2MzpzdGF0aWMgdm9pZCBudm1ldF90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWV0X3RjcF9wb3J0ICpwb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xOTY0LVx0XHRzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA3Mj1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWNjZXB0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA4NS1cdFx0fVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMDg2Olx0XHRudm1ldF90Y3BfYWxsb2NfcXVldWUocG9ydCwgbmV3c29jayk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIwODctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTlZNZS1vRi9UQ1AgQ29ubmVjdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgTlZNZSBvdmVyIFRDUCBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGtleSDigJMgaXQmIzM5O3MgYSB3b3JrcXVldWUgZnVuY3Rpb24sIGFuZCB0aGUgbmFtZSYjMzk7cyBwcmV0dHkgY2xlYXI7IGl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yICphY2NlcHRpbmcqIG5ldyBjb25uZWN0aW9ucy4gU28sIGZyb20gYSBoaWdoIGxldmVsLCBJJiMzOTttIHRoaW5raW5nIG15IG1haW4gZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYXJlIGdvaW5nIHRvIGJlIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgb2YgY291cnNlLCB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGl0c2VsZi4KCk5vdywgYmVmb3JlIEkgZ28gbXVjaCBmdXJ0aGVyLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbnMuIFNlZW1zIG9idmlvdXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTlZNRV9UQ1BgIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX1RDUGAgYXJlIGJvdGggZW5hYmxlZC4gR290dGEgZ2V0IHRoZSBmb3VuZGF0aW9ucyByaWdodCwgeW91IGtub3c/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVk1FX1RDUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTY3PWNvbmZpZyBOVk1FX0ZDXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy04Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6ODM6Y29uZmlnIE5WTUVfVENQXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctOTktXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjEwMDpjb25maWcgTlZNRV9UQ1BfVExTXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOVk1lL1RDUCBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBOVk1lL1RDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBOVk1lIGhvc3QgZHJpdmVyLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZmxhZywgbGlrZWx5IG5hbWVkIGBOVk1FX1RDUGAsIGFuZCBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgdXN1YWwgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyB0aGUgc2VsZWN0aW9uLCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG5ldHdvcmtpbmcgb3Igc3RvcmFnZSBzdWJzeXN0ZW1zLCBhbmQgd2hhdCBraW5kIG9mIGRlZmF1bHRzIGFyZSBpbiBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVyZSYjMzk7cyBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgYmFzZSBOVk1lIGhvc3QgZHJpdmVyIGFuZCB0aGUgVENQIHRyYW5zcG9ydCBsYXllciwgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIGhvdyBlbmFibGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaW1wYWN0cyB0aGUgb3ZlcmFsbCBidWlsZC4gRXNzZW50aWFsbHksIEkmIzM5O20gY2hlY2tpbmcgdGhlIGZpbmUgcHJpbnQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBOVk1FX1RDUFxuICA4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclwmIzM0O1xuICA4NTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gIDg3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgODg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDg5Olx0XHRzZWxlY3QgTlZNRV9GQUJSSUNTXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIE5WTWUgb3ZlciBGYWJyaWNzIHByb3RvY29sIHVzaW5nXG4gIDkyOlx0XHQgIHRoZSBUQ1AgdHJhbnNwb3J0LiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSByZW1vdGUgYmxvY2sgZGV2aWNlc1xuICA5MzpcdFx0ICBleHBvcnRlZCB1c2luZyB0aGUgTlZNZSBwcm90b2NvbCBzZXQuXG4gIDk0Olx0XG4gIDk1Olx0XHQgIFRvIGNvbmZpZ3VyZSBhIE5WTWUgb3ZlciBGYWJyaWNzIGNvbnRyb2xsZXIgdXNlIHRoZSBudm1lLWNsaSB0b29sXG4gIDk2Olx0XHQgIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LW52bWUvbnZtZS1jbGkuXG4gIDk3Olx0XG4gIDk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGFzc3VtcHRpb24gSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipOVk1lLW9GIFRDUCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIGBOVk1FX1RDUGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIFdlJiMzOTtyZSBvYnZpb3VzbHkgZ29pbmcgdG8gYmUgcmVseWluZyBvbiBgSU5FVGAgZm9yIHRoZSBUQ1AvSVAgc3RhY2suIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwsIG5vIHN1cnByaXNlIHRoZXJlLiBBbmQgdGhlbiwgd2UmIzM5O2xsIG5lZWQgdGhlIGBCTE9DS2AgbGF5ZXIuIE9mIGNvdXJzZSEgV2UgbmVlZCB0aGF0IGludGVyZmFjZSBmb3IgaGFuZGxpbmcgdGhlIGJsb2NrIHN0b3JhZ2UgYXNwZWN0cyBvZiBOVk1lLiBObyBzdXJwcmlzZXMgc28gZmFyLiBOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY2hlY2sgb24gYE5WTUVfVEFSR0VUX1RDUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHRhcmdldCBzaWRlIGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3Ig4oCTIHRoYXQgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBiYXNlcyBpbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBHb3R0YSBiZSBjb21wbGV0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfVEFSR0VUX1RDUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc9NzQ9Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6OTc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTlZNZS9UQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlZNZS9UQ1AsIHNwZWNpZmljYWxseSB0aGUgYE5WTUVfVEFSR0VUX1RDUGAgc2VjdGlvbi4gTGV0JiMzOTtzIHB1bGwgdXAgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzcGVjdHMgb2YgdGhlIFRDUCB0cmFuc3BvcnQgSSBjYW4gY29uZmlndXJlLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IGdldCBhIGZlZWwgZm9yIGhvdyBtb2R1bGFyIHRoaXMgY29tcG9uZW50IGlzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIE5WTWUgdGFyZ2V0IGZyYW1ld29yazsgYW55IGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBpbGx1bWluYXRlIHRob3NlIHBvaW50cywgZGV0YWlsaW5nIHRoZSB2YXJpb3VzIGNvbXBpbGUtdGltZSBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBOVk1lLW92ZXItVENQIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODY6XHRcbiAgODc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQXG4gIDg4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgODk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA5MDpcdFx0ZGVwZW5kcyBvbiBOVk1FX1RBUkdFVFxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIE5WTWUgVENQIHRhcmdldCBzdXBwb3J0LCB3aGljaCBhbGxvd3MgZXhwb3J0aW5nIE5WTWVcbiAgOTM6XHRcdCAgZGV2aWNlcyBvdmVyIFRDUC5cbiAgOTQ6XHRcbiAgOTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTY6XHRcbiAgOTc6XHRjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuICA5ODpcdFx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbiAgOTk6XHRcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRfVENQXG4gMTAwOlx0XHRzZWxlY3QgTkVUX0hBTkRTSEFLRVxuIDEwMTpcdFx0c2VsZWN0IFRMU1xuIDEwMjpcdFx0aGVscFxuIDEwMzpcdFx0ICBFbmFibGVzIFRMUyBlbmNyeXB0aW9uIGZvciB0aGUgTlZNZSBUQ1AgdGFyZ2V0IHVzaW5nIHRoZSBuZXRsaW5rIGhhbmRzaGFrZSBBUEkuXG4gMTA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjcyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24gLSBOVk1FX1RBUkdFVF9UQ1AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBOVk1FX1RBUkdFVF9UQ1BgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBhbHdheXMgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCByZWxpZXMgb24gYElORVRgIGFuZCBgTlZNRV9UQVJHRVRgLiBHaXZlbiB0aGF0LCBteSBmaXJzdCB0aG91Z2h0IGlzLCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gYE5WTUVfVEFSR0VUX1RDUGAgaXRzZWxmLCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIGBOVk1FX1RBUkdFVGAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBFbnN1cmluZyB0aGF0IGJhc2UgY29tcG9uZW50IGlzIHNvdW5kIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBhbnl0aGluZyB0aGF0IGFyaXNlcyB3aXRoIHRoZSBUQ1AgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBgTlZNRV9UQVJHRVRgIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBUYXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyMDpjb25maWcgTlZNRV9UQVJHRVRfREVCVUdGU1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTIxLSAgICAgICAgYm9vbCBcJiMzNDtOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BBU1NUSFJVXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMzAtXHRib29sIFwmIzM0O05WTWUgVGFyZ2V0IFBhc3N0aHJvdWdoIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NDE6Y29uZmlnIE5WTUVfVEFSR0VUX0xPT1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O05WTWUgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTEtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NjM6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjQtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBGQyB0YXJnZXQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTczLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjc0OmNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEZDIFRyYW5zcG9ydCBMb29wYmFjayBUZXN0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6OTc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEwOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMTA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gaW4gdGFyZ2V0IHNpZGVcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTE5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEyMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQ0lfRVBGXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTMwLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBQQ0kgRW5kcG9pbnQgRnVuY3Rpb24gdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gYE5WTUVfVEFSR0VUYCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgTlZNRSBUYXJnZXQgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYE5WTUVfVEFSR0VUYCBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIG9mIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0gcmV2ZWFscyBpdHNlbGYsIGxldHRpbmcgdXMgZGVmaW5lIHNldHRpbmdzIHdpdGggZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBkZWZhdWx0cywgdGhlIHdob2xlIGVuY2hpbGFkYSwgYW5kIEkmIzM5O20gZWFnZXIgdG8gZGlzc2VjdCBob3cgaXQgYWxsIHdvcmtzIGhlcmUsIHdpdGggdGhpcyBzcGVjaWZpYyBtb2R1bGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQuIFRoaXMgd2lsbCBwYWludCBhIGNydWNpYWwgcGljdHVyZSBvZiBob3cgdGhlIE5WTWUgdGFyZ2V0IHN1cHBvcnQgZml0cyBpbnRvIHRoZSBiaWdnZXIga2VybmVsIHBpY3R1cmUuIEZyb20gaGVyZSBJIGNhbiBsaWtlbHkgaW5mZXIgaG93IHRoZSB0YXJnZXQgaXMgcHJlc2VudGVkIHRvIHRoZSBlbmQgdXNlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgTlZNRV9UQVJHRVRcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDY6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgNzpcdFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA4Olx0XHRzZWxlY3QgS0VZUyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXG4gICA5Olx0XHRzZWxlY3QgU0dMX0FMTE9DXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgZW5hYmxlZCB0YXJnZXQgc2lkZSBzdXBwb3J0IGZvciB0aGUgTlZNZSBwcm90b2NvbCwgdGhhdCBpc1xuICAxMjpcdFx0ICBpdCBhbGxvd3MgdGhlIExpbnV4IGtlcm5lbCB0byBpbXBsZW1lbnQgTlZNZSBzdWJzeXN0ZW1zIGFuZFxuICAxMzpcdFx0ICBjb250cm9sbGVycyBhbmQgZXhwb3J0IExpbnV4IGJsb2NrIGRldmljZXMgYXMgTlZNZSBuYW1lc3BhY2VzLlxuICAxNDpcdFx0ICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFuc3BvcnRzIGJlbG93IHRvIG1ha2UgdGhpc1xuICAxNTpcdFx0ICBmdW5jdGlvbmFsaXR5IHVzZWZ1bC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29uZmlndXJlIHRoZSBOVk1lIHRhcmdldCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlIG52bWV0Y2xpXG4gIDE4Olx0XHQgIHRvb2wgZnJvbSBodHRwOi8vZ2l0LmluZnJhZGVhZC5vcmcvdXNlcnMvaGNoL252bWV0Y2xpLmdpdC5cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgTlZNRV9UQVJHRVRfREVCVUdGU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gTlZNZS1UQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIE5WTWUtVENQIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgTlZNRV9UQVJHRVRgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIGNvcmUgY29uZmlncyByZXF1aXJlZCBhcmUgYE5WTUVfVENQYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgLiBBbmQgb2YgY291cnNlLCBgSVBWNmAgaXMgbmVlZGVkIGZvciBoYW5kbGluZyBgSVBWNl9UQ0xBU1NgLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJUFY2YCBpcyBwcm9wZXJseSBlbmFibGVkLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNoZWNrZWQgd2l0aCBgSVNfRU5BQkxFRChDT05GSUdfSVBWNilgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhIHRvIGVuc3VyZSBgSVBWNmAgaXMgZW5hYmxlZCBkdXJpbmcgdGVzdGluZyB0byBjb3ZlciB0aGF0IGNvZGUgcGF0aC4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaW4gdGVybXMgb2YgdGhlaXIgcm9sZSBpbiB0aGUgc2V0dXAgcHJvY2VzczoKCiogICBJIG9yaWdpbmFsbHkgd2FzIGZvY3VzaW5nIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBlbnRyeSBwb2ludHMuCiogICBJIHNlZSB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBidXQgdGhhdCBpcyB0aGUgZW50cnkgcG9pbnQgd2hpY2ggY2FsbHMgYG52bWV0X3RjcF9hbGxvY19xdWV1ZWAgd2hpY2ggY2FsbHMgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AuIFNvLCBJJiMzOTtsbCBrZWVwIHRoYXQuCiogICBgbnZtZXRfdGNwX2FkZF9wb3J0YCBhbmQgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciBzZXR0aW5nIHVwIHRoZSBzb2NrZXRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYCBpcyBzdGF0aWMuIFllcywgaXQgaXMgc3RhdGljLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIGJldHRlciBub24tc3RhdGljIG9wdGlvbi4gSSBzZWUgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgYWRkX3BvcnRgIGluIGBudm1ldF9mYWJyaWNzX29wc2AuIEFuZCwgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyBzdGF0aWMgYXMgd2VsbCBhbmQgYXNzaWduZWQgdG8gYGNyZWF0ZV9jdHJsYCBpbiBgbnZtZl90cmFuc3BvcnRfb3BzYC4KCldhaXQsIHRoZSBwcm9tcHQgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGZvciB0aG9zZS4gRm9yIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50IGlzIGBudm1mX2NyZWF0ZV9jdHJsYCBpbiBgZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGF0IGNvZGUgYXMgdGhhdCYjMzk7cyB0aGUgcmVhbCBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZl9jcmVhdGVfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTMwNz1zdGF0aWMgc3RydWN0IG52bWVfY3RybCAqXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM6MTMwODpudm1mX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmKVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYz0xMzg1PXN0YXRpYyBzc2l6ZV90IG52bWZfZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxNDA2Olx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNy1cdGlmIChJU19FUlIoY3RybCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMjAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipDb250cm9sbGVyIGFuZCBQb3J0IFNldHVwIC0gTXkgUGVyc3BlY3RpdmUqKgoKQWxyaWdodCwgc28gaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgYG52bWZfZGV2X3dyaXRlYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHNwaW5uaW5nIHVwIGEgbmV3IGNvbnRyb2xsZXIuIFRoYXQmIzM5O3MgaG93IHdlIGtpY2sgb2ZmIHRoZSBwcm9jZXNzLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuCgpOb3csIG9uIHRoZSB0YXJnZXQgc2lkZSwgd2hlbiB3ZSYjMzk7cmUgc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbiB0byB0aGUgaG9zdCwgaXQgc2VlbXMgbGlrZSBgbnZtZXRfdGNwX2FkZF9wb3J0YCBpcyB0aGUgZ28tdG8gZnVuY3Rpb24uIFRoaXMgaXMgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgYG52bWV0X3BvcnRfc3Vic3lzX2FsbG93X2FueV9zdG9yZWAgb3Igc2ltaWxhciBjYWxsYmFja3MgdGhhdCB3ZSBjb25maWd1cmUgdXNpbmcgY29uZmlnZnMuIFNvLCB0aGUgY29uZmlnZnMgY2FsbGJhY2tzIHdvdWxkIGJlIGhvdyB3ZSBoYW5kbGUgdGhlIHBvcnQgY3JlYXRpb24gaW4gb3VyIHNldHVwLiBJdCBpcyBob3cgd2UgaGFuZGxlIHNldHRpbmcgdXAgdGhlIHBvcnQgZnJvbSB0YXJnZXQtc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkX3BvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc1MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdD0xODk9UmV0dXJucyBhIHBvaW50ZXIgdG8gc3RydWN0IHNvY191c2Igb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3IuXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yMDEtXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjIwMjpcdHZvaWQgc25kX3NvY191c2JfYWRkX3BvcnQoc3RydWN0IHNuZF9zb2NfdXNiICp1c2IpO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yMDMtLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTIwNi1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q6MjA3Oioqc25kX3NvY191c2JfYWRkX3BvcnQoKSoqIGFkZCBhbiBhbGxvY2F0ZWQgU29DIFVTQiBkZXZpY2UgdG8gdGhlIFNPQyBVU0IgZnJhbWV3b3JrLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yMDgtT25jZSBhZGRlZCwgdGhpcyBkZXZpY2UgY2FuIGJlIHJlZmVyZW5jZWQgYnkgZnVydGhlciBvcGVyYXRpb25zLlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q9MjI2PWJlIHNob3duIGJlbG93OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjM4LVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdDoyMzk6XHRcdHJldCA9IHNuZF9zb2NfdXNiX2FkZF9wb3J0KHVzYik7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTI0MC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q9NDQwPWV4ZWN1dGUgdGhlIHJlZ2lzdGVyZWQgZnVuY3Rpb24gY2FsbHMgdG8gdGhlIERQQ00gQkUgREFJIGxpbmsuXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC00NTUtXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjQ1NjpcdHJldCA9IHNuZF9zb2NfdXNiX2FkZF9wb3J0KHVzYik7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTQ1Ny0uLlxuLS1cbmRyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmM9Mzk3PXN0YXRpYyBpbnQgcGF0YV9pY3NpZGVfcmVnaXN0ZXJfdjYoc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy00MzktXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jOjQ0MDpzdGF0aWMgaW50IHBhdGFfaWNzaWRlX2FkZF9wb3J0cyhzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyAqaW5mbylcbmRyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMtNDQxLXtcbi0tXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jPTQ4MD1zdGF0aWMgaW50IHBhdGFfaWNzaWRlX3Byb2JlKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMsXG4tLVxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDMtXHRpZiAocmV0ID09IDApXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jOjU0NDpcdFx0cmV0ID0gcGF0YV9pY3NpZGVfYWRkX3BvcnRzKFx1MDAyNmluZm8pO1xuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDUtXG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM9MTMxNj1zdGF0aWMgdm9pZCBzZW5kX3NpZ2lvX3RvX3BvcnQoc3RydWN0IHBvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTMyMS1cbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjEzMjI6c3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xMzIzLXtcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xNTIzPXN0YXRpYyB2b2lkIGhhbmRsZV9jb250cm9sX21lc3NhZ2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTU1OC1cdFx0fVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTU1OTpcdFx0YWRkX3BvcnQocG9ydGRldiwgdmlydGlvMzJfdG9fY3B1KHZkZXYsIGNwa3QtXHUwMDNlaWQpKTtcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE1NjAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE5NTk9c3RhdGljIGludCB2aXJ0Y29uc19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0yMDUyLVx0XHQgKi9cbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjIwNTM6XHRcdGFkZF9wb3J0KHBvcnRkZXYsIDApO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMjA1NC1cdH1cbi0tXG5kcml2ZXJzL2N4bC9hY3BpLmM9Njg3PXN0YXRpYyBpbnQgYWRkX2hvc3RfYnJpZGdlX3Vwb3J0KHN0cnVjdCBkZXZpY2UgKm1hdGNoLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9jeGwvYWNwaS5jLTczNC1cbmRyaXZlcnMvY3hsL2FjcGkuYzo3MzU6XHRwb3J0ID0gZGV2bV9jeGxfYWRkX3BvcnQoaG9zdCwgYnJpZGdlLCBjb21wb25lbnRfcmVnX3BoeXMsIGRwb3J0KTtcbmRyaXZlcnMvY3hsL2FjcGkuYy03MzYtXHRpZiAoSVNfRVJSKHBvcnQpKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jPTgzOD1zdGF0aWMgaW50IGN4bF9wb3J0X2FkZChzdHJ1Y3QgY3hsX3BvcnQgKnBvcnQsXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtODgxLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6ODgyOnN0YXRpYyBzdHJ1Y3QgY3hsX3BvcnQgKl9fZGV2bV9jeGxfYWRkX3BvcnQoc3RydWN0IGRldmljZSAqaG9zdCxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTg4My1cdFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2UgKnVwb3J0X2Rldixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MTYtLyoqXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5MTc6ICogZGV2bV9jeGxfYWRkX3BvcnQgLSByZWdpc3RlciBhIGN4bF9wb3J0IGluIENYTCBtZW1vcnkgZGVjb2RlIGhpZXJhcmNoeVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTE4LSAqIEBob3N0OiBob3N0IGRldmljZSBmb3IgZGV2bSBvcGVyYXRpb25zXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTIyLSAqL1xuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTIzOnN0cnVjdCBjeGxfcG9ydCAqZGV2bV9jeGxfYWRkX3BvcnQoc3RydWN0IGRldmljZSAqaG9zdCxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkyNC1cdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2UgKnVwb3J0X2Rldixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MjktXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5MzA6XHRwb3J0ID0gX19kZXZtX2N4bF9hZGRfcG9ydChob3N0LCB1cG9ydF9kZXYsIGNvbXBvbmVudF9yZWdfcGh5cyxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkzMS1cdFx0XHRcdCAgIHBhcmVudF9kcG9ydCk7XG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTQ5LX1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjk1MDpFWFBPUlRfU1lNQk9MX05TX0dQTChkZXZtX2N4bF9hZGRfcG9ydCwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTk1MS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jPTk1Mj1zdHJ1Y3QgY3hsX3Jvb3QgKmRldm1fY3hsX2FkZF9yb290KHN0cnVjdCBkZXZpY2UgKmhvc3QpXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTU1LVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTU2Olx0cG9ydCA9IGRldm1fY3hsX2FkZF9wb3J0KGhvc3QsIGhvc3QsIENYTF9SRVNPVVJDRV9OT05FLCBOVUxMKTtcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTk1Ny1cdGlmIChJU19FUlIocG9ydCkpXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9MTQ1MD1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfZW5kcG9pbnRfYXV0b3JlbW92ZSwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xNDU2LSAqIHRocm91Z2ggLVx1MDAzZXJlbW92ZSgpLiBUaGlzIFwmIzM0O2JvdHRvbS11cFwmIzM0OyByZW1vdmFsIHNlbGVjdGl2ZWx5IHJlbW92ZXMgaW5kaXZpZHVhbFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTQ1NzogKiBjaGlsZCBwb3J0cyBtYW51YWxseS4gVGhpcyBkZXBlbmRzIG9uIGRldm1fY3hsX2FkZF9wb3J0KCkgdG8gbm90IGNoYW5nZSBpc1xuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTQ1OC0gKiBkZXZtIGFjdGlvbiByZWdpc3RyYXRpb24gb3JkZXIsIGFuZCBmb3IgZHBvcnRzIHRvIGhhdmUgYWxyZWFkeSBiZWVuXG4tLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9MTY2Nz1zdGF0aWMgc3RydWN0IGN4bF9kcG9ydCAqZGV2bV9jeGxfY3JlYXRlX3BvcnQoc3RydWN0IGRldmljZSAqZXBfZGV2LFxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE2ODYtXHRcdGNvbXBvbmVudF9yZWdfcGh5cyA9IGZpbmRfY29tcG9uZW50X3JlZ2lzdGVycyh1cG9ydF9kZXYpO1xuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTY4NzpcdFx0cG9ydCA9IGRldm1fY3hsX2FkZF9wb3J0KFx1MDAyNnBhcmVudF9wb3J0LVx1MDAzZWRldiwgdXBvcnRfZGV2LFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTY4OC1cdFx0XHRcdFx0IGNvbXBvbmVudF9yZWdfcGh5cywgcGFyZW50X2Rwb3J0KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xNzEzLVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTcxNDpzdGF0aWMgaW50IGFkZF9wb3J0X2F0dGFjaF9lcChzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQsXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xNzE1LVx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2UgKnVwb3J0X2Rldixcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYz0xNzk5PWludCBkZXZtX2N4bF9lbnVtZXJhdGVfcG9ydHMoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NjMtXHRcdFx0ICogdGhhdCYjMzk7cyBvaywgaXQgd2FzIGFkZGVkIG9uIGEgcHJldmlvdXMgcGFzcy5cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjE4NjQ6XHRcdFx0ICogT3RoZXJ3aXNlLCByZXRyeSBpbiBhZGRfcG9ydF9hdHRhY2hfZXAoKSBhZnRlciB0YWtpbmdcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NjUtXHRcdFx0ICogdGhlIHBhcmVudF9wb3J0IGxvY2sgYXMgdGhlIGN1cnJlbnQgcG9ydCBtYXkgYmUgYmVpbmdcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0xODc5LVxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTg4MDpcdFx0cmMgPSBhZGRfcG9ydF9hdHRhY2hfZXAoY3hsbWQsIHVwb3J0X2RldiwgZHBvcnRfZGV2KTtcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4ODEtXHRcdC8qIHBvcnQgbWlzc2luZywgdHJ5IHRvIGFkZCBwYXJlbnQgKi9cbi0tXG5kcml2ZXJzL2N4bC9jeGwuaD03Mjg9c3RydWN0IHBjaV9idXMgKmN4bF9wb3J0X3RvX3BjaV9idXMoc3RydWN0IGN4bF9wb3J0ICpwb3J0KTtcbmRyaXZlcnMvY3hsL2N4bC5oOjcyOTpzdHJ1Y3QgY3hsX3BvcnQgKmRldm1fY3hsX2FkZF9wb3J0KHN0cnVjdCBkZXZpY2UgKmhvc3QsXG5kcml2ZXJzL2N4bC9jeGwuaC03MzAtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXG4tLVxuZHJpdmVycy9jeGwvcG9ydC5jPTI4Nj1pbnQgZGV2bV9jeGxfYWRkX2VuZHBvaW50KHN0cnVjdCBkZXZpY2UgKmhvc3QsIHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZCxcbi0tXG5kcml2ZXJzL2N4bC9wb3J0LmMtMzA1LVx0LyogTm90ZTogZW5kcG9pbnQgcG9ydCBjb21wb25lbnQgcmVnaXN0ZXJzIGFyZSBkZXJpdmVkIGZyb20gQGN4bGRzICovXG5kcml2ZXJzL2N4bC9wb3J0LmM6MzA2Olx0ZW5kcG9pbnQgPSBkZXZtX2N4bF9hZGRfcG9ydChob3N0LCBcdTAwMjZjeGxtZC1cdTAwM2VkZXYsIENYTF9SRVNPVVJDRV9OT05FLFxuZHJpdmVycy9jeGwvcG9ydC5jLTMwNy1cdFx0XHRcdCAgICAgcGFyZW50X2Rwb3J0KTtcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLmM9NzE4PXN0cnVjdCBkZmxfZmVhdHVyZV9pbmZvIHtcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtNzMwLVxuZHJpdmVycy9mcGdhL2RmbC5jOjczMTpzdGF0aWMgdm9pZCBkZmxfZnBnYV9jZGV2X2FkZF9wb3J0X2RhdGEoc3RydWN0IGRmbF9mcGdhX2NkZXYgKmNkZXYsXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtNzMyLVx0XHRcdFx0XHRzdHJ1Y3QgZGZsX2ZlYXR1cmVfZGV2X2RhdGEgKmZkYXRhKVxuLS1cbmRyaXZlcnMvZnBnYS9kZmwuYz05MjI9c3RhdGljIGludCBidWlsZF9pbmZvX2NvbW1pdF9kZXYoc3RydWN0IGJ1aWxkX2ZlYXR1cmVfZGV2c19pbmZvICpiaW5mbylcbi0tXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtOTM1LVx0aWYgKGJpbmZvLVx1MDAzZXR5cGUgPT0gUE9SVF9JRClcbmRyaXZlcnMvZnBnYS9kZmwuYzo5MzY6XHRcdGRmbF9mcGdhX2NkZXZfYWRkX3BvcnRfZGF0YShiaW5mby1cdTAwM2VjZGV2LCBmZGF0YSk7XG5kcml2ZXJzL2ZwZ2EvZGZsLmMtOTM3LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmM9NDY5PXN0YXRpYyB2b2lkIGR3YXBiX2NvbmZpZ3VyZV9pcnFzKHN0cnVjdCBkd2FwYl9ncGlvICpncGlvLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMtNTI2LVxuZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYzo1Mjc6c3RhdGljIGludCBkd2FwYl9ncGlvX2FkZF9wb3J0KHN0cnVjdCBkd2FwYl9ncGlvICpncGlvLFxuZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYy01MjgtXHRcdFx0ICAgICAgIHN0cnVjdCBkd2FwYl9wb3J0X3Byb3BlcnR5ICpwcCxcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jPTczMj1zdGF0aWMgaW50IGR3YXBiX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTc2NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdwaW8tXHUwMDNlbnJfcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jOjc2NjpcdFx0ZXJyID0gZHdhcGJfZ3Bpb19hZGRfcG9ydChncGlvLCBcdTAwMjZwZGF0YS1cdTAwM2Vwcm9wZXJ0aWVzW2ldLCBpKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMtNzY3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYz0yMzE3PXN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYzoyMzE4OmRybV9kcF9tc3RfYWRkX3BvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy0yMzE5LVx0XHQgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jPTIzNTA9ZHJtX2RwX21zdF9oYW5kbGVfbGlua19hZGRyZXNzX3BvcnQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy0yMzYyLVx0aWYgKCFwb3J0KSB7XG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6MjM2MzpcdFx0cG9ydCA9IGRybV9kcF9tc3RfYWRkX3BvcnQoZGV2LCBtZ3IsIG1zdGIsXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM2NC1cdFx0XHRcdFx0ICAgcG9ydF9tc2ctXHUwMDNlcG9ydF9udW1iZXIpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy0yMzc0LVx0XHRkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpO1xuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jOjIzNzU6XHRcdHBvcnQgPSBkcm1fZHBfbXN0X2FkZF9wb3J0KGRldiwgbWdyLCBtc3RiLFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTIzNzYtXHRcdFx0XHRcdCAgIHBvcnRfbXNnLVx1MDAzZXBvcnRfbnVtYmVyKTtcbi0tXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM9MTUxPURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShzc2lfc3N0X2Rpdl9mb3BzLCBzc2lfZGl2X2dldCwgc3NpX2Rpdl9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jLTE1Mi1cbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYzoxNTM6c3RhdGljIHZvaWQgc3NpX2RlYnVnX2FkZF9wb3J0KHN0cnVjdCBvbWFwX3NzaV9wb3J0ICpvbWFwX3BvcnQsXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMtMTU0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkaXIpXG4tLVxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jPTExMDY9c3RhdGljIGludCBzc2lfcG9ydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZClcbi0tXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMtMTIwMC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM6MTIwMTpcdHNzaV9kZWJ1Z19hZGRfcG9ydChvbWFwX3BvcnQsIG9tYXBfc3NpLVx1MDAzZWRpcik7XG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMtMTIwMi0jZW5kaWZcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYz0yNDA2PWludCBpcmRtYV9hbGxvY19sb2NhbF9tYWNfZW50cnkoc3RydWN0IGlyZG1hX3BjaV9mICpyZiwgdTE2ICptYWNfdGJsX2lkeClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDM0LSAqIEBhY2NlbF9sb2NhbF9wb3J0OiBwb3J0IGZvciBhcGJ2dFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQzNTogKiBAYWRkX3BvcnQ6IGFkZCBvcmRlbGV0ZSBwb3J0XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDM2LSAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM9MjQzNz1zdGF0aWMgaW50IGlyZG1hX2NxcF9tYW5hZ2VfYXBidnRfY21kKHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQzODpcdFx0XHRcdCAgICAgIHUxNiBhY2NlbF9sb2NhbF9wb3J0LCBib29sIGFkZF9wb3J0KVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQzOS17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQ0NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0NDU6XHRjcXBfcmVxdWVzdCA9IGlyZG1hX2FsbG9jX2FuZF9nZXRfY3FwX3JlcXVlc3QoXHUwMDI2aXdkZXYtXHUwMDNlcmYtXHUwMDNlY3FwLCBhZGRfcG9ydCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDQ2LVx0aWYgKCFjcXBfcmVxdWVzdClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDUwLVx0aW5mbyA9IFx1MDAyNmNxcF9pbmZvLVx1MDAzZWluLnUubWFuYWdlX2FwYnZ0X2VudHJ5LmluZm87XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYzoyNDUxOlx0aW5mby1cdTAwM2VhZGQgPSBhZGRfcG9ydDtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTItXHRpbmZvLVx1MDAzZXBvcnQgPSBhY2NlbF9sb2NhbF9wb3J0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTctXHRpYmRldl9kYmcoXHUwMDI2aXdkZXYtXHUwMDNlaWJkZXYsIFwmIzM0O0RFVjogJXM6IHBvcnQ9MHglMDR4XFxuXCYjMzQ7LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQ1ODpcdFx0ICAoIWFkZF9wb3J0KSA/IFwmIzM0O0RFTEVURVwmIzM0OyA6IFwmIzM0O0FERFwmIzM0OywgYWNjZWxfbG9jYWxfcG9ydCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDU5LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9MjE1PXZvaWQgZGVsX3N5c2ZzX3BvcnRfbWNnX2F0dHIoc3RydWN0IG1seDRfaWJfZGV2ICpkZXZpY2UsIGludCBwb3J0X251bSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTIyMi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6MjIzOnN0YXRpYyBpbnQgYWRkX3BvcnRfZW50cmllcyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldmljZSwgaW50IHBvcnRfbnVtKVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy0yMjQte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMzQ5LWVycjpcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6MzUwOlx0cHJfZXJyKFwmIzM0O2FkZF9wb3J0X2VudHJpZXMgRkFJTEVEOiBmb3IgcG9ydDolZCwgZXJyb3I6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy0zNTEtXHQgICAgICAgcG9ydF9udW0sIHJldCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYz02MTE9c3RhdGljIHZvaWQgcmVtb3ZlX3ZmX3NtaV9lbnRyaWVzKHN0cnVjdCBtbHg0X3BvcnQgKnApXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy02MjItXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjYyMzpzdGF0aWMgaW50IGFkZF9wb3J0KHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBpbnQgcG9ydF9udW0sIGludCBzbGF2ZSlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtNjI0LXtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jPTcwMT1zdGF0aWMgaW50IHJlZ2lzdGVyX29uZV9wa2V5X3RyZWUoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIGludCBzbGF2ZSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTczNS1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6NzM2Olx0XHRlcnIgPSBhZGRfcG9ydChkZXYsIHBvcnQsIHNsYXZlKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtNzM3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9ODA2PWludCBtbHg0X2liX2RldmljZV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldilcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTgyNy1cdHJkbWFfZm9yX2VhY2hfcG9ydChcdTAwMjZkZXYtXHUwMDNlaWJfZGV2LCBpKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjgyODpcdFx0cmV0ID0gYWRkX3BvcnRfZW50cmllcyhkZXYsIGkpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy04MjktXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jPTI1OT1zdGF0aWMgc3RydWN0IG9jcmRtYV9kZXYgKm9jcmRtYV9hZGQoc3RydWN0IGJlX2Rldl9pbmZvICpkZXZfaW5mbylcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9tYWluLmMtMjk1LVx0LyogSW5pdCBzdGF0cyAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jOjI5NjpcdG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhkZXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jLTI5Ny1cdC8qIEludGVycnVwdCBNb2RlcmF0aW9uICovXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYz03NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NyZG1hX2RiZ19vcHMgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYy03NTctXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5jOjc1ODp2b2lkIG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYy03NTkte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3N0YXRzLmg9NzA9dm9pZCBvY3JkbWFfcmVtX3BvcnRfc3RhdHMoc3RydWN0IG9jcmRtYV9kZXYgKmRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5oOjcxOnZvaWQgb2NyZG1hX2FkZF9wb3J0X3N0YXRzKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuaC03Mi12b2lkIG9jcmRtYV9wbWFfY291bnRlcnMoc3RydWN0IG9jcmRtYV9kZXYgKmRldiwgc3RydWN0IGliX21hZCAqb3V0X21hZCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjU3Nz1zdGF0aWMgaW50IGlwb2liX2ludGVyY2VwdF9kZXZfaWRfYXR0cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTI1ODItXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyNTgzOnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBvaWJfYWRkX3BvcnQoY29uc3QgY2hhciAqZm9ybWF0LFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjU4NC1cdFx0XHRcdFx0IHN0cnVjdCBpYl9kZXZpY2UgKmhjYSwgdTMyIHBvcnQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjY2MD1zdGF0aWMgaW50IGlwb2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTI2NzYtXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyNjc3Olx0XHRkZXYgPSBpcG9pYl9hZGRfcG9ydChcJiMzNDtpYiVkXCYjMzQ7LCBkZXZpY2UsIHApO1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjY3OC1cdFx0aWYgKCFJU19FUlIoZGV2KSkge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTM5Njg9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTM5NzQtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYzozOTc1OnN0YXRpYyBzdHJ1Y3Qgc3JwX2hvc3QgKnNycF9hZGRfcG9ydChzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2aWNlLCB1MzIgcG9ydClcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTM5NzYte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTQwMTk9c3RhdGljIGludCBzcnBfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtNDA4OC1cdHJkbWFfZm9yX2VhY2hfcG9ydCAoZGV2aWNlLCBwKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYzo0MDg5Olx0XHRob3N0ID0gc3JwX2FkZF9wb3J0KHNycF9kZXYsIHApO1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtNDA5MC1cdFx0aWYgKGhvc3QpXG4tLVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jPTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZ2FtZXBvcnRfYnVzO1xuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTQzLVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jOjQ0OnN0YXRpYyB2b2lkIGdhbWVwb3J0X2FkZF9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpO1xuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTQ1LXN0YXRpYyB2b2lkIGdhbWVwb3J0X2F0dGFjaF9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KTtcbi0tXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmM9MzE5PXN0YXRpYyB2b2lkIGdhbWVwb3J0X2hhbmRsZV9ldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYy0zMzUtXHRcdGNhc2UgR0FNRVBPUlRfUkVHSVNURVJfUE9SVDpcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzozMzY6XHRcdFx0Z2FtZXBvcnRfYWRkX3BvcnQoZXZlbnQtXHUwMDNlb2JqZWN0KTtcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYy0zMzctXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jPTU1NT1zdGF0aWMgdm9pZCBnYW1lcG9ydF9pbml0X3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydClcbi0tXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNTc5LSAqL1xuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jOjU4MDpzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KVxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTU4MS17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTMyPXN0YXRpYyBMSVNUX0hFQUQoc2VyaW9fbGlzdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzQ6c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzUtc3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MTg2PXN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5Ni1cdFx0Y2FzZSBTRVJJT19SRUdJU1RFUl9QT1JUOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjE5NzpcdFx0XHRzZXJpb19hZGRfcG9ydChldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5OC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NDY3PXN0YXRpYyB2b2lkIHNlcmlvX2luaXRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00OTUtICovXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDk2OnN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDk3LXtcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTg1PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2Rpb191YXJ0X3RhYmxlX2xvY2spO1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy04Ni1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmM6ODc6c3RhdGljIGludCBzZGlvX3VhcnRfYWRkX3BvcnQoc3RydWN0IHNkaW9fdWFydF9wb3J0ICpwb3J0KVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy04OC17XG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYz0xMDE4PXN0YXRpYyBpbnQgc2Rpb191YXJ0X3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy0xMDc1LVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYzoxMDc2Olx0cmV0ID0gc2Rpb191YXJ0X2FkZF9wb3J0KHBvcnQpO1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy0xMDc3LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz02NzI9c3RhdGljIHZvaWQgbGFuOTMwM19hbHJfc2V0X2VudHJ5KHN0cnVjdCBsYW45MzAzICpjaGlwLCBjb25zdCB1OCAqbWFjLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy03MDEtLyogQWRkIHBvcnQgdG8gc3RhdGljIEFMUiBlbnRyeSwgY3JlYXRlIG5ldyBzdGF0aWMgZW50cnkgaWYgbmVlZGVkICovXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6NzAyOnN0YXRpYyBpbnQgbGFuOTMwM19hbHJfYWRkX3BvcnQoc3RydWN0IGxhbjkzMDMgKmNoaXAsIGNvbnN0IHU4ICptYWMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTcwMy1cdFx0XHRcdGJvb2wgc3RwX292ZXJyaWRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz04Mjc9c3RhdGljIHZvaWQgbGFuOTMwM19icmlkZ2VfcG9ydHMoc3RydWN0IGxhbjkzMDMgKmNoaXApXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTgzNC1cdFx0XHRcdCBjaGlwLVx1MDAzZXN3ZV9wb3J0X3N0YXRlKTtcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYzo4MzU6XHRsYW45MzAzX2Fscl9hZGRfcG9ydChjaGlwLCBldGhfc3RwX2FkZHIsIDAsIHRydWUpO1xuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTgzNi19XG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTEyMTM9c3RhdGljIGludCBsYW45MzAzX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy0xMjIwLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jOjEyMjE6XHRyZXR1cm4gbGFuOTMwM19hbHJfYWRkX3BvcnQoY2hpcCwgYWRkciwgcG9ydCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTEyMjItfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz0xMjY3PXN0YXRpYyBpbnQgbGFuOTMwM19wb3J0X21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtMTI3OS1cdFx0bWRiLVx1MDAzZXZpZCk7XG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6MTI4MDpcdHJldHVybiBsYW45MzAzX2Fscl9hZGRfcG9ydChjaGlwLCBtZGItXHUwMDNlYWRkciwgcG9ydCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTEyODEtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM9MTA2Mj1zdGF0aWMgdm9pZCBpZHBmX2FkZF9lbXB0eV9xdWV1ZV9zdGF0cyh1NjQgKipkYXRhLCB1MTYgcXR5cGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDc3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYzoxMDc4OiAqIGlkcGZfYWRkX3BvcnRfc3RhdHMgLSBDb3B5IHBvcnQgc3RhdHMgaW50byBldGh0b29sIGJ1ZmZlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDc5LSAqIEB2cG9ydDogdmlydHVhbCBwb3J0IHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTA4MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM6MTA4MjpzdGF0aWMgdm9pZCBpZHBmX2FkZF9wb3J0X3N0YXRzKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwgdTY0ICoqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTA4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYz0xMjA0PXN0YXRpYyB2b2lkIGlkcGZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jLTEyMjctXHRpZHBmX2NvbGxlY3RfcXVldWVfc3RhdHModnBvcnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYzoxMjI4Olx0aWRwZl9hZGRfcG9ydF9zdGF0cyh2cG9ydCwgXHUwMDI2ZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jLTEyMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jPTI3MDU9c3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfc2hhcmVkX29mX3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYy0yNzIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI3MjE6c3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfb2ZfYWRkX3BvcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYy0yNzIyLVx0XHRcdFx0XHQgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG5wKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYz0yODA4PXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI4MjUtXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQobnAsIHBucCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI4MjY6XHRcdHJldCA9IG12NjQzeHhfZXRoX3NoYXJlZF9vZl9hZGRfcG9ydChwZGV2LCBwbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI4MjctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU0NDM9c3RhdGljIGludCBtbHg1ZV92eGxhbl9zZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdGFibGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01NDQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1NDQ4Olx0cmV0dXJuIG1seDVfdnhsYW5fYWRkX3BvcnQocHJpdi1cdTAwM2VtZGV2LVx1MDAzZXZ4bGFuLCBudG9ocyh0aS1cdTAwM2Vwb3J0KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU0NDktfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYz00Nz1zdHJ1Y3QgbWx4NV92eGxhbl9wb3J0IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM6NTI6c3RhdGljIGludCBtbHg1X3Z4bGFuX2NvcmVfYWRkX3BvcnRfY21kKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgcG9ydClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy01My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jPTkxPXN0YXRpYyBzdHJ1Y3QgbWx4NV92eGxhbl9wb3J0ICp2eGxhbl9sb29rdXBfcG9ydChzdHJ1Y3QgbWx4NV92eGxhbiAqdnhsYW4sIHUxNiBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM6MTAxOmludCBtbHg1X3Z4bGFuX2FkZF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jOjExMTpcdHJldCA9IG1seDVfdnhsYW5fY29yZV9hZGRfcG9ydF9jbWQodnhsYW4tXHUwMDNlbWRldiwgcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTEyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYz0xNDc9c3RydWN0IG1seDVfdnhsYW4gKm1seDVfdnhsYW5fY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xNjItXHQvKiBIYXJkd2FyZSBhZGRzIDQ3ODkgKElBTkFfVlhMQU5fVURQX1BPUlQpIGJ5IGRlZmF1bHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYzoxNjM6XHRtbHg1X3Z4bGFuX2FkZF9wb3J0KHZ4bGFuLCBJQU5BX1ZYTEFOX1VEUF9QT1JUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xNjQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oPTU1PXZvaWQgbWx4NV92eGxhbl9kZXN0cm95KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmg6NTY6aW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmgtNTctaW50IG1seDVfdnhsYW5fZGVsX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X3Z4bGFuX2Rlc3Ryb3koc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuKSB7IHJldHVybjsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oOjY0OnN0YXRpYyBpbmxpbmUgaW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCkgeyByZXR1cm4gLUVPUE5PVFNVUFA7IH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uaC02NS1zdGF0aWMgaW5saW5lIGludCBtbHg1X3Z4bGFuX2RlbF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpIHsgcmV0dXJuIC1FT1BOT1RTVVBQOyB9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcmVnLmg9MTI3MT1NTFhTV19JVEVNMzJfSU5ERVhFRChyZWcsIHNsZHIsIHN5c3RlbV9wb3J0LCAweDA4LCAwLCAxNiwgNCwgMCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcmVnLmgtMTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oOjEyNzM6c3RhdGljIGlubGluZSB2b2lkIG1seHN3X3JlZ19zbGRyX2xhZ19hZGRfcG9ydF9wYWNrKGNoYXIgKnBheWxvYWQsIHU4IGxhZ19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oLTEyNzQtXHRcdFx0XHRcdFx0ICAgIHUxNiBsb2NhbF9wb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9NDQ0OT1zdGF0aWMgaW50IG1seHN3X3NwX2xhZ19kaXN0X3BvcnRfYWRkKHN0cnVjdCBtbHhzd19zcF9wb3J0ICptbHhzd19zcF9wb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmMtNDQ1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM6NDQ1NTpcdG1seHN3X3JlZ19zbGRyX2xhZ19hZGRfcG9ydF9wYWNrKHNsZHJfcGwsIGxhZ19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmMtNDQ1Ni1cdFx0XHRcdFx0IG1seHN3X3NwX3BvcnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM9MTMzPXN0YXRpYyB2b2lkIGVmeF9kZXZsaW5rX2RlbF9wb3J0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRsX3BvcnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM6MTQwOnN0YXRpYyBpbnQgZWZ4X2RldmxpbmtfYWRkX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jLTE0MS1cdFx0XHRcdHN0cnVjdCBtYWVfbXBvcnRfZGVzYyAqbXBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM9NjM2PXN0YXRpYyBzdHJ1Y3QgZGV2bGlua19wb3J0ICplZjEwMF9zZXRfZGV2bGlua19wb3J0KHN0cnVjdCBlZnhfbmljICplZngsIHUzMiBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtNjY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmM6NjY2Olx0cmMgPSBlZnhfZGV2bGlua19hZGRfcG9ydChlZngsIG1wb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jLTY2Ny1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTUwMD1zdGF0aWMgaW50IHRjX2FkZF9pcDRfZmxvdyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6NTM1OnN0YXRpYyBpbnQgdGNfYWRkX3BvcnRzX2Zsb3coc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNTM2LVx0XHRcdCAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNscyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz02MDI9c3RhdGljIHN0cnVjdCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNjA3LVx0eyAuZm4gPSB0Y19hZGRfaXA0X2Zsb3cgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjYwODpcdHsgLmZuID0gdGNfYWRkX3BvcnRzX2Zsb3cgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTYwOS19O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTYyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjMwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjMxOnN0YXRpYyBpbnQgcGh5X2FkZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYzMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjk1LVx0ICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2OTY6XHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY5Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNDI4PXN0YXRpYyBpbnQgcGh5X2RlZmF1bHRfc2V0dXBfc2luZ2xlX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM0NTctXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM0NTg6XHRwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzQ1OS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM0NjM9c3RhdGljIGludCBvZl9waHlfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM0OTEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM0OTI6XHRcdGVyciA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNDkzLVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDY9c3RhdGljIHZvaWQgX190ZWFtX29wdGlvbl9pbnN0X2RlbF9wb3J0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg6c3RhdGljIGludCBfX3RlYW1fb3B0aW9uX2luc3RfYWRkX3BvcnQoc3RydWN0IHRlYW0gKnRlYW0sXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIxMj1zdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2Rldixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEzMzgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjEzMzk6XHRlcnIgPSBfX3RlYW1fb3B0aW9uX2luc3RfYWRkX3BvcnQodGVhbSwgcG9ydCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEzNDAtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MzE2PWludCBudm1ldF9lbmFibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zNTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzozNTM6XHRyZXQgPSBvcHMtXHUwMDNlYWRkX3BvcnQocG9ydCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zNTQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYz0yODYzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYzoyODY0Om52bWV0X2ZjX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jLTI4NjUte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYz0yOTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZXRfZmNfdGd0X2ZjcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jLTI5OTQtXHQubXNkYmRcdFx0XHQ9IDEsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2ZjLmM6Mjk5NTpcdC5hZGRfcG9ydFx0XHQ9IG52bWV0X2ZjX2FkZF9wb3J0LFxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jLTI5OTYtXHQucmVtb3ZlX3BvcnRcdFx0PSBudm1ldF9mY19yZW1vdmVfcG9ydCxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz01NTI9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfbG9vcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjQ4LVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NjQ5OnN0YXRpYyBpbnQgbnZtZV9sb29wX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjUwLXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz02NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1lX2xvb3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTY3NC1cdC50eXBlXHRcdD0gTlZNRl9UUlRZUEVfTE9PUCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjY3NTpcdC5hZGRfcG9ydFx0PSBudm1lX2xvb3BfYWRkX3BvcnQsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy02NzYtXHQucmVtb3ZlX3BvcnRcdD0gbnZtZV9sb29wX3JlbW92ZV9wb3J0LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD00MTE9c3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzIHtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDE4LVx0dm9pZCAoKnF1ZXVlX3Jlc3BvbnNlKShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpO1xuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oOjQxOTpcdGludCAoKmFkZF9wb3J0KShzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDIwLVx0dm9pZCAoKnJlbW92ZV9wb3J0KShzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9wY2ktZXBmLmM9MTE5Mj1zdGF0aWMgdm9pZCBudm1ldF9wY2lfZXBmX2RyYWluX3F1ZXVlKHN0cnVjdCBudm1ldF9wY2lfZXBmX3F1ZXVlICpxdWV1ZSlcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3BjaS1lcGYuYy0xMjA2LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTlZNZS1vRiBUYXJnZXQ6IEVudHJ5IFBvaW50IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgTlZNZS1vRiB0YXJnZXQgc2lkZSwgYW5kIGl0IHNlZW1zIGxpa2UgYG52bWV0X2VuYWJsZV9wb3J0YCBjb3VsZCBiZSBhIHByb21pc2luZyBlbnRyeSBwb2ludC4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHBvcnQgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGBudm1ldF9lbmFibGVfcG9ydGAgZGlyZWN0bHkgY2FsbHMgYG9wcy0mZ3Q7YWRkX3BvcnQocG9ydClgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYG52bWV0X2VuYWJsZV9wb3J0YCBpcyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyBuZXcgcG9ydCBhZGRpdGlvbnMgdG8gdGhlIHN1YnN5c3RlbS4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19hbnlfc3RvcmVgIGFuZCBgbnZtZXRfcG9ydF9zdWJzeXNfc3RvcmVgLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgdGhhdCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHBvcnQgYnJpbmctdXAgcHJvY2Vzcy4gR2l2ZW4gdGhlc2UgY2FsbCBwYXRocyBhbmQgdGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIGBvcHMtJmd0O2FkZF9wb3J0YCwgSSB0aGluayBkaWdnaW5nIGludG8gYG52bWV0X2VuYWJsZV9wb3J0YCB3aWxsIGJlIHRpbWUgd2VsbCBzcGVudCBpbiBteSBmdXp6aW5nIGNhbXBhaWduLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGl0cyBpbnRlcm5hbHMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtYWxmb3JtZWQgcG9ydCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZXRfZW5hYmxlX3BvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTEwNTQ9c3RhdGljIGludCBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy0xMDc5LVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cG9ydC1cdTAwM2VzdWJzeXN0ZW1zKSkge1xuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjEwODA6XHRcdHJldCA9IG52bWV0X2VuYWJsZV9wb3J0KHBvcnQpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTEwODEtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MzA0PXZvaWQgbnZtZXRfcG9ydF9kZWxfY3RybHMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsIHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zMTUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzozMTY6aW50IG52bWV0X2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMzE3LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg9NjQ3PXZvaWQgbnZtZXRfcG9ydF9kZWxfY3RybHMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTY0OS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDo2NTA6aW50IG52bWV0X2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC02NTEtdm9pZCBudm1ldF9kaXNhYmxlX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk2MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIE5WTWUtb0YgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOVk1lLW9GIGRyaXZlciBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgcG9ydCBhbmQgY29udHJvbGxlciBjcmVhdGlvbiBwYXRocy4gSSBzZWUgdGhhdCBgbnZtZXRfZW5hYmxlX3BvcnRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBlbmFibGluZyBhIG5ldyBwb3J0LiBUaGF0IG1ha2VzIHNlbnNlLCBhbmQgaXQgc2VlbXMgdG8gZGVsZWdhdGUgdG8gYGFkZF9wb3J0YCBpbnRlcm5hbGx5LiBGcm9tIHRoZSBob3N0IHNpZGUsIEkmIzM5O20gbm90aW5nIHRoYXQgYG52bWZfZGV2X3dyaXRlYCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsIGhvb2sgZm9yIGNyZWF0aW5nIGEgY29udHJvbGxlci4gTm93IEkmIzM5O20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBob3N0IHNpZGUuIExvb2tzIGxpa2UgYG52bWZfY3JlYXRlX2N0cmxgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhhdCBpdCBjYWxscyBgY3JlYXRlX2N0cmxgIHRvIGZpbmlzaCBpdHMgdGFzay4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGVzZSBmdW5jdGlvbiBuYW1lcyBhbmQgbG9vayBpbnRvIHdoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGFyb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZl9jcmVhdGVfY3RybCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTMwNz1zdGF0aWMgc3RydWN0IG52bWVfY3RybCAqXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM6MTMwODpudm1mX2NyZWF0ZV9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmKVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYz0xMzg1PXN0YXRpYyBzc2l6ZV90IG52bWZfZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNS1cbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxNDA2Olx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQwNy1cdGlmIChJU19FUlIoY3RybCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIE5WTWUvZiBXcml0ZSBQYXRoKioKCkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBudm1mX2Rldl93cml0ZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZyb20gdGhlIGhvc3Qgc2lkZSBmb3Igd3JpdGluZyBkYXRhIHRvIHRoZSBOVk1lIGRldmljZSBvdmVyIE5WTWUtb0YuIEJ1dCwgaGFuZyBvbiBhIHNlY29uZCwgdGhhdCBmdW5jdGlvbiBuYW1lIC0gYG52bWZfZGV2X3dyaXRlYCAtIHNlZW1zIHRvIHN1Z2dlc3QgaXQmIzM5O3MgbW9yZSBvZiBhIGZpbGUgb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHN1cnByaXNpbmcgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgTlZNZSB0cmFuc3BvcnQgcHJvdG9jb2wuIEhtbSwgaXMgdGhlcmUgYW55IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50IGludG8gdGhpcyBzeXN0ZW0/IEkgcmVjYWxsIGBudm1mX2NyZWF0ZV9jdHJsYCBmcm9tIHRoZSBOVk1lIG5hbWVzcGFjZSBjcmVhdGlvbiwgYnV0IHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCB0aGUgZW50cnkuIFdlbGwsIGBudm1mX2Rldl93cml0ZWAgaXMgYWxzbyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBHdWVzcyBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBmdW5jdGlvbiwgYG52bWZfZGV2X3dyaXRlYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1mX2Rldl93cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTM4Mz1zdGF0aWMgREVGSU5FX01VVEVYKG52bWZfZGV2X211dGV4KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xMzg0LVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjEzODU6c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzODYtXHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTE0Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnZtZl9kZXZfZm9wcyA9IHtcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xNDgwLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM6MTQ4MTpcdC53cml0ZVx0XHQ9IG52bWZfZGV2X3dyaXRlLFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0ODItXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAyMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBOVk1lIERyaXZlciYjMzk7cyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBOVk1lIGRyaXZlciBjb2RlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZW50cnkgcG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0hleSwgaWYgYG52bWZfZGV2X3dyaXRlYCBpcyAqc3RhdGljKiwgd2Ugc2hvdWxkIGp1c3QgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGEgbm9uLXN0YXRpYyBvbmUsIHJpZ2h0PyYjMzQ7LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBtZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkuCgpTbywgdGhlIHNpdHVhdGlvbiBpczogaWYgdGhlIG9ubHkgd2F5IGluIGlzIHRocm91Z2ggdGhpcyBgc3RhdGljYCBmdW5jdGlvbiwgdGhlbiB0aGUgKm9ubHkqIGNob2ljZXMgYXJlIHRvIHVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5LCBvciB0byBtb3ZlIHRvIHVzaW5nIHN5c2NhbGxzIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUuCgpBbmQgdGhlbiBJIHJlYWxpemUsIGhleSwgd2FpdCwgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcywgaW4gZmFjdCwgKnN0YXRpYyohIFRoYXQmIzM5O3MgYSBwb2ludC4KClNvIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpczogSSByZWFsbHkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIGNoZWNrIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AsIGFuZCBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGF0IGZpbGUgYXQgYWxsLiBUaGF0IHdpbGwgbGVhZCB0aGUgd2F5IHRvIG15IG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOVk1lIFRDUCBEcml2ZXIgU3ltYm9sIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOVk1lIFRDUCBkcml2ZXIgY29kZSwgYW5kIG15IGluaXRpYWwgc2VhcmNoIGluIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgdHVybmVkIHVwIGVtcHR5IOKAkyBubyBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwsIHVzdWFsbHkgdGhlIGhvc3Qgc2lkZSBoYXMgc29tZXRoaW5nLiBHdWVzcyB0aGUgYWN0aW9uIG1pZ2h0IGJlIGluIHRoZSB0YXJnZXQgc2lkZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgc3dpdGNoIG15IGZvY3VzIG92ZXIgdG8gYGRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNgIGFuZCBzdGFydCBteSBkZWVwIGRpdmUgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYyNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBubyBsdWNrIGZpbmRpbmcgdGhvc2Ugc3ltYm9scyBleHBvcnRlZCBpbiB0aGUgb2J2aW91cyBwbGFjZXMuIFRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgc3RhdGljIGZ1bmN0aW9ucywgb3IgcGVyaGFwcyBsZXZlcmFnZSB0aGUgbW9yZSBnZW5lcmFsIE5WTWUgZnVuY3Rpb25zLiBJIHRoaW5rIGBudm1mX2Rldl93cml0ZWAgYW5kIGBudm1ldF9lbmFibGVfcG9ydGAgY291bGQgYmUgcHJvbWlzaW5nIOKAkyBlc3BlY2lhbGx5IGBudm1ldF9lbmFibGVfcG9ydGAsIHNpbmNlIHRoYXQgKmlzbiYjMzk7dCogc3RhdGljLiBIbW0sIGhhbmcgb24uLi4gaXMgYG52bWV0X2VuYWJsZV9wb3J0YCBhY3R1YWxseSBleHBvcnRlZD8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpdHMgZXhwb3J0IHN0YXR1czsgSSYjMzk7bGwgcG9rZSBhcm91bmQgaW4gYGRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm52bWV0X2VuYWJsZV9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRDUCBOVk1lIFRhcmdldCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgTlZNZSBUQ1AgdGFyZ2V0IGFuZCB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGluZ3MgYWNjb3JkaW5nIHRvIHRoZSBwcmluY2lwbGUgb2YgdXNpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHdoZXJlIHBvc3NpYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGRpcmVjdGx5LCBhdm9pZGluZyB0aGUgZnV6emluZyB0aGF0IHdvdWxkIGNvbWUgd2l0aCBgbnZtZl9kZXZfd3JpdGVgLiBUaGVuLCBJIHdhbnRlZCB0byBjb21iaW5lIGl0IHdpdGggYG52bWV0X3RjcF9hZGRfcG9ydGAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBCdXQgdGhlbiBJIGhhZCB0byByZW1lbWJlciB0aGF0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgICppcyogc3RhdGljLiBMZXQgbWUgc2VlLCBgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5YCBpcyBhIHNvY2tldCBjYWxsYmFjaywgYW5kIGxldCYjMzk7cyBnbyB3aXRoIHRoZSBzaW1wbGVyIGFwcHJvYWNoIG9mIHVzaW5nIGBudm1lX3RjcF9zZXR1cF9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuCgpOb3csIGxldCYjMzk7cyByZXZpZXcgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50LiBUaGUgZ29hbCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJZiBhIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIFNvIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIGFyZSBnb29kIHNpbmNlIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGBudm1lX3RjcF90cmFuc3BvcnQuY3JlYXRlX2N0cmxgIGFuZCBgbnZtZXRfdGNwX29wcy5hZGRfcG9ydGAsIHJlc3BlY3RpdmVseS4gQnV0IGBudm1lX3RjcF9hbGxvY19xdWV1ZWAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgIGFyZSBjYWxsZWQgZGlyZWN0bHksIG5vdCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBzbyB0aGV5IG1pZ2h0IGJlIGlubGluZWQuCgpMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlc2Ugb3B0aW9ucyBhcmUgYXBwcm9wcmlhdGU6CiogICBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzIGFjdHVhbGx5IHN0YXRpYywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gU28gaXQgc2hvdWxkIG5vdCBiZSBpbmxpbmVkLgoqICAgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIGl0IGFsc28gc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLgoKR2l2ZW4gdGhhdCBhbmFseXNpcywgd2hhdCBvdGhlciBvcHRpb25zIGRvIHdlIGhhdmU/IFRoZSBnb2FsIGlzIHRvIHByZWZlciB0aG9zZSBmdW5jdGlvbnMuCgpJIHRoaW5rIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLCBzaW5jZSBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd29uJiMzOTt0IGJlIGlubGluZWQgZWl0aGVyLgoKU28sIGxldCYjMzk7cyBmb2N1cyBvbjoKCiogICBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgCiogICBgbnZtZXRfdGNwX2FkZF9wb3J0YAoqICAgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AKCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBjb2RlLCB0aGVzZSB3b3VsZCBiZToKCiogICBgTlZNRV9UQ1BgCiogICBgTlZNRV9UQVJHRVRfVENQYAoqICAgYElQVjZgCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZywgYnV0IGBJUFY2YCAqaXMqIHJlcXVpcmVkIHNpbmNlIHRoZSBjb2RlIHBhdGggaXMgb25seSBlbmFibGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLgoKRnVydGhlcm1vcmUsIGBOVk1FX1RBUkdFVGAgaXMgaW5kaXJlY3RseSByZXF1aXJlZCwgc2luY2UgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgTlZNRV9UQVJHRVRgLiBgTlZNRV9UQ1BgIGRlcGVuZHMgb24gYElORVRgIGFuZCBgQkxPQ0tgLiBBbmQgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBOVk1FX1RBUkdFVGAuIFNvLCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgYmVjb21lczoKCiogICBgTlZNRV9UQ1BgCiogICBgTlZNRV9UQVJHRVRgCiogICBgTlZNRV9UQVJHRVRfVENQYAoqICAgYElQVjZgCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBOVk1FX0NPUkVgIGlzbiYjMzk7dCByZXF1aXJlZCBidXQgaXQmIzM5O3Mgbm90LiBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBwbGFuIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBOVk1FX1RDUFxuICA4NDpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclwmIzM0O1xuICA4NTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gIDg3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgODg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDg5Olx0XHRzZWxlY3QgTlZNRV9GQUJSSUNTXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIE5WTWUgb3ZlciBGYWJyaWNzIHByb3RvY29sIHVzaW5nXG4gIDkyOlx0XHQgIHRoZSBUQ1AgdHJhbnNwb3J0LiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSByZW1vdGUgYmxvY2sgZGV2aWNlc1xuICA5MzpcdFx0ICBleHBvcnRlZCB1c2luZyB0aGUgTlZNZSBwcm90b2NvbCBzZXQuXG4gIDk0Olx0XG4gIDk1Olx0XHQgIFRvIGNvbmZpZ3VyZSBhIE5WTWUgb3ZlciBGYWJyaWNzIGNvbnRyb2xsZXIgdXNlIHRoZSBudm1lLWNsaSB0b29sXG4gIDk2Olx0XHQgIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LW52bWUvbnZtZS1jbGkuXG4gIDk3Olx0XG4gIDk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODM5CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDUxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlZNZS9UQ1AgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2hhdCBpdCBtZWFucyBmb3IgZnV6emluZyBlZmZvcnRzLiBJIHNlZSB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgTlZNZSBvdmVyIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyBjb25maWd1cmUgdGhlaXIgbmV0d29yayBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgYnkgc3dpdGNoaW5nIHRvIGBkb19zb2NrX3NldHNvY2tvcHRgIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gVGhpcyBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBjYXJlZnVsIGV4YW1pbmF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBhZGRpdGlvbiBvZiBJUHY2IFRDTEFTUyBzdXBwb3J0LiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHRoYXQgb3VyIGZ1enppbmcgc3RyYXRlZ3kgbmVlZHMgdG8gYWRhcHQuCgpMZXQmIzM5O3MgYmVnaW4gd2l0aCB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcy4gRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBOVk1lL1RDUCBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGVkOiBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBgTlZNRV9UQVJHRVRfVENQYCwgYW5kIGBJUFY2YC4gR2l2ZW4gdGhhdCBgTlZNRV9GQUJSSUNTYCBpbXBsaWNpdGx5IHNlbGVjdHMgYE5WTUVfQ09SRWAsIEkgY2FuIHNraXAgZXhwbGljaXRseSBsaXN0aW5nIGBOVk1FX0NPUkVgLiBUaGUga2VybmVsIGNvbmZpZyBkZXBlbmRlbmNpZXMgd2VyZSBjcml0aWNhbCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9uIGluIGVudmlyb25tZW50cyB1dGlsaXppbmcgdGhlIFRDUCB0cmFuc3BvcnQsIHN1Y2ggYXMgdGhvc2UgdXRpbGl6aW5nIHZpcnR1YWxpemVkIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy4KCk5vdywgd2hlcmUgZG8gSSBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHM/IFRoZSBwYXRjaCBoaWdobGlnaHRzIHRoZSBjcnVjaWFsIGFyZWFzIG9mIGNvbnRyb2xsZXIgY3JlYXRpb24gYW5kIHBvcnQgYWRkaXRpb24gd2hlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIFRoaXMgbGVhZHMgbWUgdG8gcGlucG9pbnQgdGhlIGZvbGxvd2luZyBrZXkgZnVuY3Rpb25zOiBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgLCBgbnZtZXRfdGNwX2FkZF9wb3J0YCwgYW5kIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLgoKTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IG15IGFzc3VtcHRpb25zIG9uIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLiBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGluZGVlZCBjYWxsIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIGFuZCB0aGVuIGNhbGxzIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNvY2tldCBpcyBwcm9wZXJseSBjb25maWd1cmVkIHdoZW4gdXNpbmcgdGhpcy4gU28geWVzLCB0aGlzIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBhbmQgYSBnb29kIGVudHJ5IHBvaW50LgoKU2ltaWxhcmx5LCBJIHNob3VsZCBhbHNvIHZlcmlmeSB0aGF0IGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgYSBnb29kIGVudHJ5IHBvaW50LCB3aGljaCBjYWxscyBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgd2hpY2ggY2FsbHMgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYG52bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AsIHdoaWNoIGNhbGxzIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAuIFl1cCwgdGhhdCBjb25maXJtcyBpdC4KCldpdGggdGhpcyBhbmFseXNpcyBjb21wbGV0ZSwgaXQmIzM5O3MgdGltZSB0byBmbGFnIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiB3aXRoaW4gbXkgZnV6emluZyBzdHJhdGVneS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBoYW5kbGluZywgZXJyb3IgcGF0aHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBzb2NrZXQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIElQdjYgVENMQVNTLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlZNRV9UQ1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlZNRV9UQ1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudm1lX3RjcF9jcmVhdGVfY3RybCYjMzQ7LAogICAgJiMzNDtudm1ldF90Y3BfYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7bnZtZXRfdGNwX2FjY2VwdF93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMTc0ZDZlNDk2MThjMmY2M2UzY2Q0ZDIxZDZmODg2ZWE1M2Q0MDY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDE6NTA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0xNzc0LDYgJiM0MzsxNzc0LDU2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3Bfc3RhcnRfdGxzKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9OwomIzQzOwomIzQzOwlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO2xpbmcpLCBzaXplb2YobGluZykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwKJiM0MzsJCQkJICBTT19CSU5EVE9ERVZJQ0UsIEtFUk5FTF9TT0NLUFRSKGlmYWNlKSwKJiM0MzsJCQkJICBzdHJsZW4oaWZhY2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX1NZTkNOVCwKJiM0MzsJCQkJICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcykKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDt0b3MpLCBzaXplb2YodG9zKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0Y2xhc3MpCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikKJiM0MzsJCWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsIElQVjZfVENMQVNTLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RjbGFzcyksIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCQkJCWtleV9zZXJpYWxfdCBwc2tpZCkKIHsKQEAgLTE4MTksMjQgJiM0MzsxODY5LDI2IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsCiAjZW5kaWYKIAogCS8qIFNpbmdsZSBzeW4gcmV0cnkgKi8KLQl0Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgMSk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X3N5bmNudChxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIDEpOwogCiAJLyogU2V0IFRDUCBubyBkZWxheSAqLwotCXRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCS8qCiAJICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0CiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKJiM0MzsJbnZtZV90Y3Bfc29ja19ub19saW5nZXIocXVldWUtJmd0O3NvY2stJmd0O3NrKTsKIAogCWlmIChzb19wcmlvcml0eSAmZ3Q7IDApCi0JCXNvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwomIzQzOwkJbnZtZV90Y3Bfc29ja19zZXRfcHJpb3JpdHkocXVldWUtJmd0O3NvY2stJmd0O3NrLCBzb19wcmlvcml0eSk7CiAKIAkvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqLwotCWlmIChuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zICZndDs9IDApCi0JCWlwX3NvY2tfc2V0X3RvcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwlpZiAobmN0cmwtJmd0O29wdHMtJmd0O3RvcyAmZ3Q7PSAwKSB7CiYjNDM7CQludm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtJmd0O3NvY2stJmd0O3NrLCBuY3RybC0mZ3Q7b3B0cy0mZ3Q7dG9zKTsKJiM0MzsJCW52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS0mZ3Q7c29jay0mZ3Q7c2ssIG5jdHJsLSZndDtvcHRzLSZndDt0b3MpOwomIzQzOwl9CiAKIAkvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqLwogCXF1ZXVlLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2dGltZW8gPSAxMCAqIEhaOwpAQCAtMTg2NCwxMCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLAogCiAJaWYgKG5jdHJsLSZndDtvcHRzLSZndDttYXNrICZhbXA7IE5WTUZfT1BUX0hPU1RfSUZBQ0UpIHsKIAkJY2hhciAqaWZhY2UgPSBuY3RybC0mZ3Q7b3B0cy0mZ3Q7aG9zdF9pZmFjZTsKLQkJc29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTsKIAotCQlyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtJmd0O3NvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwKLQkJCQkgICAgICBvcHR2YWwsIHN0cmxlbihpZmFjZSkpOwomIzQzOwkJcmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLSZndDtzb2NrLSZndDtzaywgaWZhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKG5jdHJsLSZndDtkZXZpY2UsCiAJCQkgICYjMzQ7ZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYwppbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTE2OTYsMTAgJiM0MzsxNjk2LDYyIEBAIHN0YXRpYyB2b2lkIG52bWV0X3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKQogCXJlYWRfdW5sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2NhbGxiYWNrX2xvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7bGluZyksIHNpemVvZihsaW5nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSkKJiM0Mzt7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUFJJT1JJVFksCiYjNDM7CQkJICAgS0VSTkVMX1NPQ0tQVFIoJmFtcDtwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSBTS19DQU5fUkVVU0U7CiYjNDM7CiYjNDM7CWRvX3NvY2tfc2V0c29ja29wdChzay0mZ3Q7c2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAomIzQzOwkJCSAgIEtFUk5FTF9TT0NLUFRSKCZhbXA7dmFsKSwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gMTsKJiM0MzsKJiM0MzsJZG9fc29ja19zZXRzb2Nrb3B0KHNrLSZndDtza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKJiM0MzsJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3ZhbCksIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwl1OCB0b3MgPSBpbmV0X3NrKHNrKS0mZ3Q7cmN2X3RvczsKJiM0MzsKJiM0MzsJaWYgKHRvcyAmZ3Q7IDApCiYjNDM7CQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLAomIzQzOwkJCQkgICBLRVJORUxfU09DS1BUUigmYW1wO3RvcyksIHNpemVvZih0b3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwlpZiAoc2stJmd0O3NrX2ZhbWlseSA9PSBBRl9JTkVUNikgewomIzQzOwkJdTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktJmd0O3Jjdl9mbG93aW5mbyk7CiYjNDM7CiYjNDM7CQlpZiAodGNsYXNzICZndDsgMCkKJiM0MzsJCQlkb19zb2NrX3NldHNvY2tvcHQoc2stJmd0O3NrX3NvY2tldCwgZmFsc2UsIFNPTF9JUFY2LAomIzQzOwkJCQkJICAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKCZhbXA7dGNsYXNzKSwKJiM0MzsJCQkJCSAgIHNpemVvZih0Y2xhc3MpKTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS0mZ3Q7c29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzb2NrLSZndDtzayk7CiAJaW50IHJldDsKIAogCXJldCA9IGtlcm5lbF9nZXRzb2NrbmFtZShzb2NrLApAQCAtMTcxNywxNCAmIzQzOzE3NjksMTQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpCiAJICogY2xvc2UuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHN0YWxlIGRhdGEgZnJvbSBiZWluZyBzZW50IHNob3VsZAogCSAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuCiAJICovCi0Jc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19ub19saW5nZXIoc29jay0mZ3Q7c2spOwogCiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkoc29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJLyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi8KLQlpZiAoaW5ldC0mZ3Q7cmN2X3RvcyAmZ3Q7IDApCi0JCWlwX3NvY2tfc2V0X3Rvcyhzb2NrLSZndDtzaywgaW5ldC0mZ3Q7cmN2X3Rvcyk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF90b3Moc29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHNvY2stJmd0O3NrKTsKIAogCXJldCA9IDA7CiAJd3JpdGVfbG9ja19iaCgmYW1wO3NvY2stJmd0O3NrLSZndDtza19jYWxsYmFja19sb2NrKTsKQEAgLTIwOTgsMTAgJiM0MzsyMTUwLDEwIEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydCkKIAlwb3J0LSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gcG9ydDsKIAlwb3J0LSZndDtkYXRhX3JlYWR5ID0gcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHk7CiAJcG9ydC0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7Ci0Jc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtJmd0O3NvY2stJmd0O3NrKTsKLQl0Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiYjNDM7CW52bWV0X3RjcF9zb2NrX3NldF9yZXVzZWFkZHIocG9ydC0mZ3Q7c29jay0mZ3Q7c2spOwomIzQzOwludm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LSZndDtzb2NrLSZndDtzayk7CiAJaWYgKHNvX3ByaW9yaXR5ICZndDsgMCkKLQkJc29ja19zZXRfcHJpb3JpdHkocG9ydC0mZ3Q7c29jay0mZ3Q7c2ssIHNvX3ByaW9yaXR5KTsKJiM0MzsJCW52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShwb3J0LSZndDtzb2NrLSZndDtzaywgc29fcHJpb3JpdHkpOwogCiAJcmV0ID0ga2VybmVsX2JpbmQocG9ydC0mZ3Q7c29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopJmFtcDtwb3J0LSZndDthZGRyLAogCQkJc2l6ZW9mKHBvcnQtJmd0O2FkZHIpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTgKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMTAwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOVk1lIFRDUCBTb2NrZXQgT3B0aW9uIFdyYXBwZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIGBzb2NrXypgIGZ1bmN0aW9ucyDigJMgYHNvY2tfbm9fbGluZ2VyYCwgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCBhbmQgdGhlIGxpa2Ug4oCTIHdpdGggY3VzdG9tIHdyYXBwZXJzLiBUaGVzZSB3cmFwcGVycywgc3VjaCBhcyBgbnZtZV90Y3Bfc29ja19ub19saW5nZXJgLCBhcmUgdGhlbiB1c2luZyBgZG9fc29ja19zZXRzb2Nrb3B0YCB3aXRoIGBLRVJORUxfU09DS1BUUmAgdG8gYWN0dWFsbHkgc2V0IHRoZSBzb2NrZXQgb3B0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLiBgZG9fc29ja19zZXRzb2Nrb3B0YCB0YWtlcyBhIGBzb2NrcHRyX3RgIGNvbnN0cnVjdGVkIHZpYSBgS0VSTkVMX1NPQ0tQVFJgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgd2hldGhlciBvciBub3QgdGhlIHZhcmlhYmxlcyBiZWluZyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBJJiMzOTttIHNlZWluZyBsb2NhbCB2YXJpYWJsZXMgYmVpbmcgcGFzc2VkIGluLCBsaWtlIGBzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O2AsIGFuIGBpbnQgdmFsID0gMTtgLCBhbmQgdGhlIG90aGVycy4gSSBjYW4gY29uZmlybSB0aGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IGluIHRoZXJlPyYjMzQ7IEJ1dCBpdCBsb29rcyBsaWtlIGV2ZXJ5dGhpbmcmIzM5O3MgaW5pdGlhbGl6ZWQuIGBzdHJ1Y3QgbGluZ2VyYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGBpbnQgdmFsYCBpcywgYHByaW9yaXR5YCwgYGlmYWNlYCwgYHRvc2AsIGFuZCBgdGNsYXNzYCBhcmUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGJ1dCB0aGV5IGFyZSBhbGwgaW5pdGlhbGl6ZWQuIFRoZSB2YWx1ZXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBgdG9zYCBhbmQgYHRjbGFzc2AgdmFsdWVzIGxvb2sgdG8gYmUgaW5pdGlhbGl6ZWQgYXMgd2VsbC4gCgpTaW5jZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBhIGtlcm5lbCBmdW5jdGlvbiwgS01TQU4gd291bGQgaGF2ZSBjYXVnaHQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKT2YgY291cnNlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHNpemVzIGFyZSBjb3JyZWN0LiBJZiB3ZSBhcmUgcGFzc2luZyBpbmNvcnJlY3Qgc2l6ZXMsIGBkb19zb2NrX3NldHNvY2tvcHRgIGNvdWxkIHJlYWQgYmV5b25kIHRoZSBpbnRlbmRlZCBib3VuZHMuIEJ1dCwgdGhlIHNpemVzIGJlaW5nIHBhc3NlZCBhcmUgYHNpemVvZihsaW5nKWAsIGBzaXplb2YocHJpb3JpdHkpYCwgYHNpemVvZih2YWwpYCwgYHNpemVvZih0b3MpYCwgYW5kIGBzaXplb2YodGNsYXNzKWAg4oCTIHRoYXQmIzM5O3MgZ29vZCEKClRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBpdCYjMzk7cyByZWZhY3RvcmluZywgcG9zc2libHkgZGVhbGluZyB3aXRoIHNvbWUgYHNvY2tfc2V0c29ja29wdGAgdnMuIGBkb19zb2NrX3NldHNvY2tvcHRgIG51YW5jZXMgb3IgcGVyaGFwcyByZWxhdGluZyB0byBgc29ja3B0cl90YCBjaGFuZ2VzIG9yIHRoZSByZW1vdmFsIG9mIHRob3NlIGBzb2NrX3NldF8qYCBoZWxwZXJzLgoKU28sIGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSB2YXJpYWJsZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIGxpbmdlciBzdHJ1Y3QgbG9va3MgbGlrZSBpdCBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIElzIHRoZXJlIHBhZGRpbmcgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGFuIGlzc3VlIHdpdGggYHN0cnVjdCBsaW5nZXJgPyBObywgYSBgc3RydWN0IGxpbmdlcmAgY29udGFpbnMgdHdvIGBpbnRgcyBzbywgaXQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEFsc28sIHRoaXMgcGF0Y2ggaXMgb25seSBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGZyb20gdGhlIGtlcm5lbDsgdGhlcmUgYXJlIG5vIGNoYW5nZXMgb3IgYWRkaXRpb25zIHRvIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBubyBuZXcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgc2hpZnRzIHRoZSBtZXRob2Qgb2Ygc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIHRoZSBsZWdhY3kgaGVscGVycyB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGFueSBzb3J0IG9mIGluZm9ybWF0aW9uIGxlYWsuCgpSZXZpZXdpbmcgdGhlIHJ1bGVzOiBUaGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gQWxsIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gSSB3aWxsIHNldCBpdCB0byBmYWxzZSBhbmQgZG9jdW1lbnQgbXkgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IGNhbGxzIHRvIHNvY2tldCBvcHRpb24gaGVscGVycyAobGlrZSBgc29ja19ub19saW5nZXJgLCBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBldGMuKSB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYEtFUk5FTF9TT0NLUFRSYC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKHN1Y2ggYXMgYHN0cnVjdCBsaW5nZXIgbGluZ2AsIGBpbnQgdmFsYCwgYHUzMiBwcmlvcml0eWAsIGB1OCB0b3NgLCBgdTggdGNsYXNzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGlzIG5vIHBhZGRpbmcgaW4gdGhlc2Ugc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTA6NTguNzE0NDg5MzUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMjY3MDYyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIHRvIHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGBJUFY2X1RDTEFTU2Agc29ja2V0IG9wdGlvbiBmb3IgSVB2NiBzb2NrZXRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHNvY2tldCBjb25maWd1cmF0aW9uIG9mIHRoZSBOVk1lIFRDUCB0cmFuc3BvcnQsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbG9vcGJhY2sgb3IgdmV0aCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiBwYXRocyB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTA6NTguNzE0NDk1MzQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIwODcyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjE3NGQ2ZTQ5NjE4YzJmNjNlM2NkNGQyMWQ2Zjg4NmVhNTNkNDA2NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXFxuaW5kZXggYmE1YzdiM2UyYTdjNi4uNjU3YWNhZTllNGE0MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXFxuQEAgLTE3NzQsNiArMTc3NCw1NiBAQCBzdGF0aWMgaW50IG52bWVfdGNwX3N0YXJ0X3RscyhzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19ub19saW5nZXIoc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsaW5nZXIgbGluZyA9IHsgLmxfb25vZmYgPSAxLCAubF9saW5nZXIgPSAwIH07XFxuK1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcXG4rXFx0XFx0XFx0ICAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNmxpbmcpLCBzaXplb2YobGluZykpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcXG4re1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBudm1lX3RjcF9zb2NrX3NldF9iaW5kdG9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyICppZmFjZSlcXG4re1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULFxcbitcXHRcXHRcXHRcXHQgIFNPX0JJTkRUT0RFVklDRSwgS0VSTkVMX1NPQ0tQVFIoaWZhY2UpLFxcbitcXHRcXHRcXHRcXHQgIHN0cmxlbihpZmFjZSkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRpbnQgdmFsID0gMTtcXG4rXFxuK1xcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1RDUCwgVENQX05PREVMQVksXFxuK1xcdFxcdFxcdCAgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4re1xcbitcXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfU1lOQ05ULFxcbitcXHRcXHRcXHRcXHQgIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3RvcyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0b3MpXFxuK3tcXG4rXFx0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVAsIElQX1RPUyxcXG4rXFx0XFx0XFx0ICAgS0VSTkVMX1NPQ0tQVFIoXFx1MDAyNnRvcyksIHNpemVvZih0b3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHRjbGFzcylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuK1xcdFxcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsIElQVjZfVENMQVNTLFxcbitcXHRcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dGNsYXNzKSwgc2l6ZW9mKHRjbGFzcykpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcXG4gXFx0XFx0XFx0XFx0a2V5X3NlcmlhbF90IHBza2lkKVxcbiB7XFxuQEAgLTE4MTksMjQgKzE4NjksMjYgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiBTaW5nbGUgc3luIHJldHJ5ICovXFxuLVxcdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLCAxKTtcXG4rXFx0bnZtZV90Y3Bfc29ja19zZXRfc3luY250KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgMSk7XFxuIFxcbiBcXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXFxuLVxcdHRjcF9zb2NrX3NldF9ub2RlbGF5KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFudXAgd2hhdGV2ZXIgaXMgc2l0dGluZyBpbiB0aGUgVENQIHRyYW5zbWl0IHF1ZXVlIG9uIHNvY2tldFxcbiBcXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXFxuIFxcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXFxuIFxcdCAqL1xcbi1cXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRudm1lX3RjcF9zb2NrX25vX2xpbmdlcihxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbiBcXG4gXFx0aWYgKHNvX3ByaW9yaXR5IFxcdTAwM2UgMClcXG4tXFx0XFx0c29ja19zZXRfcHJpb3JpdHkocXVldWUtXFx1MDAzZXNvY2stXFx1MDAzZXNrLCBzb19wcmlvcml0eSk7XFxuK1xcdFxcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbiBcXG4gXFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cXG4tXFx0aWYgKG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MgXFx1MDAzZT0gMClcXG4tXFx0XFx0aXBfc29ja19zZXRfdG9zKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyk7XFxuK1xcdGlmIChuY3RybC1cXHUwMDNlb3B0cy1cXHUwMDNldG9zIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0bnZtZV90Y3Bfc29ja19zZXRfdG9zKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZXRvcyk7XFxuK1xcdFxcdG52bWVfdGNwX3NvY2tfc2V0X3RjbGFzcyhxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2ssIG5jdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0b3MpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTZXQgMTAgc2Vjb25kcyB0aW1lb3V0IGZvciBpY3Jlc3AgcmVjdm1zZyAqL1xcbiBcXHRxdWV1ZS1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3JjdnRpbWVvID0gMTAgKiBIWjtcXG5AQCAtMTg2NCwxMCArMTkxNiw4IEBAIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuIFxcbiBcXHRpZiAobmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZW1hc2sgXFx1MDAyNiBOVk1GX09QVF9IT1NUX0lGQUNFKSB7XFxuIFxcdFxcdGNoYXIgKmlmYWNlID0gbmN0cmwtXFx1MDAzZW9wdHMtXFx1MDAzZWhvc3RfaWZhY2U7XFxuLVxcdFxcdHNvY2twdHJfdCBvcHR2YWwgPSBLRVJORUxfU09DS1BUUihpZmFjZSk7XFxuIFxcbi1cXHRcXHRyZXQgPSBzb2NrX3NldHNvY2tvcHQocXVldWUtXFx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgb3B0dmFsLCBzdHJsZW4oaWZhY2UpKTtcXG4rXFx0XFx0cmV0ID0gbnZtZV90Y3Bfc29ja19zZXRfYmluZHRvZGV2aWNlKHF1ZXVlLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaywgaWZhY2UpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIobmN0cmwtXFx1MDAzZWRldmljZSxcXG4gXFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXFxuQEAgLTE2OTYsMTAgKzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcXG4rXFxuK1xcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fTElOR0VSLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwcmlvcml0eSlcXG4re1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1BSSU9SSVRZLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2cHJpb3JpdHkpLCBzaXplb2YocHJpb3JpdHkpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3JldXNlYWRkcihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IFNLX0NBTl9SRVVTRTtcXG4rXFxuK1xcdGRvX3NvY2tfc2V0c29ja29wdChzay1cXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IDE7XFxuK1xcbitcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLFxcbitcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dmFsKSwgc2l6ZW9mKHZhbCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHR1OCB0b3MgPSBpbmV0X3NrKHNrKS1cXHUwMDNlcmN2X3RvcztcXG4rXFxuK1xcdGlmICh0b3MgXFx1MDAzZSAwKVxcbitcXHRcXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXFx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9JUCwgSVBfVE9TLFxcbitcXHRcXHRcXHRcXHQgICBLRVJORUxfU09DS1BUUihcXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfdGNsYXNzKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0dTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXFx1MDAzZXJjdl9mbG93aW5mbyk7XFxuK1xcbitcXHRcXHRpZiAodGNsYXNzIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVxcdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgSVBWNl9UQ0xBU1MsIEtFUk5FTF9TT0NLUFRSKFxcdTAwMjZ0Y2xhc3MpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzaXplb2YodGNsYXNzKSk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cXHUwMDNlc29jaztcXG4tXFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cXHUwMDNlc2spO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXFxuQEAgLTE3MTcsMTQgKzE3NjksMTQgQEAgc3RhdGljIGludCBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2soc3RydWN0IG52bWV0X3RjcF9xdWV1ZSAqcXVldWUpXFxuIFxcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcXG4gXFx0ICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBiZSByZXN0b3JlZCBiZWZvcmUgVENQIHRpbWVzIG91dC5cXG4gXFx0ICovXFxuLVxcdHNvY2tfbm9fbGluZ2VyKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0bnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXFx1MDAzZXNrKTtcXG4gXFxuIFxcdGlmIChzb19wcmlvcml0eSBcXHUwMDNlIDApXFxuLVxcdFxcdHNvY2tfc2V0X3ByaW9yaXR5KHNvY2stXFx1MDAzZXNrLCBzb19wcmlvcml0eSk7XFxuK1xcdFxcdG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbiBcXG4gXFx0LyogU2V0IHNvY2tldCB0eXBlIG9mIHNlcnZpY2UgKi9cXG4tXFx0aWYgKGluZXQtXFx1MDAzZXJjdl90b3MgXFx1MDAzZSAwKVxcbi1cXHRcXHRpcF9zb2NrX3NldF90b3Moc29jay1cXHUwMDNlc2ssIGluZXQtXFx1MDAzZXJjdl90b3MpO1xcbitcXHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0bnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuQEAgLTIwOTgsMTAgKzIxNTAsMTAgQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcXG4gXFx0cG9ydC1cXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbiBcXHRwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSA9IG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeTtcXG4tXFx0c29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4tXFx0dGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbitcXHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXFx1MDAzZXNvY2stXFx1MDAzZXNrKTtcXG4rXFx0bnZtZXRfdGNwX3NvY2tfc2V0X25vZGVsYXkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2spO1xcbiBcXHRpZiAoc29fcHJpb3JpdHkgXFx1MDAzZSAwKVxcbi1cXHRcXHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVxcdTAwM2Vzb2NrLVxcdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xcbitcXHRcXHRudm1ldF90Y3Bfc29ja19zZXRfcHJpb3JpdHkocG9ydC1cXHUwMDNlc29jay1cXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcXG4gXFxuIFxcdHJldCA9IGtlcm5lbF9iaW5kKHBvcnQtXFx1MDAzZXNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVxcdTAwMjZwb3J0LVxcdTAwM2VhZGRyLFxcbiBcXHRcXHRcXHRzaXplb2YocG9ydC1cXHUwMDNlYWRkcikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTowMC4xMzYxOTc1NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA1OTkyNDY5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlZNRV9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3RjcF9jcmVhdGVfY3RybFwiLFxuICAgIFwibnZtZXRfdGNwX2FkZF9wb3J0XCIsXG4gICAgXCJudm1ldF90Y3BfYWNjZXB0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBvdmVyIFRDUCBob3N0IGFuZCB0YXJnZXQgZHJpdmVycyB0byB1c2UgYGRvX3NvY2tfc2V0c29ja29wdGAgZm9yIHNldHRpbmcgc29ja2V0IG9wdGlvbnMgaW5zdGVhZCBvZiBkaXJlY3QgZnVuY3Rpb24gY2FsbHMuIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIHRoZSBgSVBWNl9UQ0xBU1NgIHNvY2tldCBvcHRpb24gZm9yIElQdjYgc29ja2V0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0d29yayBzb2NrZXQgY29uZmlndXJhdGlvbiBvZiB0aGUgTlZNZSBUQ1AgdHJhbnNwb3J0LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbnRyb2xsZXIgY3JlYXRpb24gYW5kIHBvcnQgYWRkaXRpb24gcGF0aHMgd2hlcmUgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxNzRkNmU0OTYxOGMyZjYzZTNjZDRkMjFkNmY4ODZlYTUzZDQwNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgKzE3NzQsNTYgQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbitcdFx0XHRcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXG4rXHRcdFx0XHQgIHN0cmxlbihpZmFjZSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbit7XG4rXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4rXHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLCBzaXplb2YodGNsYXNzKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4ge1xuQEAgLTE4MTksMjQgKzE4NjksMjYgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4gXG4gXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4gXG4gXHQvKlxuIFx0ICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0XG4gXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXG4gXHQgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LlxuIFx0ICovXG4tXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMCkge1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0fVxuIFxuIFx0LyogU2V0IDEwIHNlY29uZHMgdGltZW91dCBmb3IgaWNyZXNwIHJlY3Ztc2cgKi9cbiBcdHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2dGltZW8gPSAxMCAqIEhaO1xuQEAgLTE4NjQsMTAgKzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFxuIFx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfSE9TVF9JRkFDRSkge1xuIFx0XHRjaGFyICppZmFjZSA9IG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlaG9zdF9pZmFjZTtcbi1cdFx0c29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTtcbiBcbi1cdFx0cmV0ID0gc29ja19zZXRzb2Nrb3B0KHF1ZXVlLVx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcbi1cdFx0XHRcdCAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTE2OTYsMTAgKzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gU0tfQ0FOX1JFVVNFO1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IHRvcyA9IGluZXRfc2soc2spLVx1MDAzZXJjdl90b3M7XG4rXG4rXHRpZiAodG9zIFx1MDAzZSAwKVxuK1x0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbitcdFx0dTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbitcbitcdFx0aWYgKHRjbGFzcyBcdTAwM2UgMClcbitcdFx0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXG4rXHRcdFx0XHRcdCAgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuK1x0XHRcdFx0XHQgICBzaXplb2YodGNsYXNzKSk7XG4rXHR9XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cdTAwM2Vzb2NrO1xuLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cdTAwM2Vzayk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXG5AQCAtMTcxNywxNCArMTc2OSwxNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKGluZXQtXHUwMDNlcmN2X3RvcyBcdTAwM2UgMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2ssIGluZXQtXHUwMDNlcmN2X3Rvcyk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVx1MDAzZXNrKTtcbiBcbiBcdHJldCA9IDA7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNnNvY2stXHUwMDNlc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5AQCAtMjA5OCwxMCArMjE1MCwxMCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcbiBcdHBvcnQtXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7XG4tXHRzb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0bnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MDAuMTM2MTk5MTIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEzNTU2NzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOVk1lIG92ZXIgVENQIFNvY2tldCBPcHRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9udm1lL2hvc3QvdGNwLmNgIGFuZCBgZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGEgc29ja2V0IG9wdGlvbiBvdmVyaGF1bCwgcmVwbGFjaW5nIHRoZSBleGlzdGluZyBjYWxscyBsaWtlIGB0Y3Bfc29ja19zZXRfc3luY250YCwgYHRjcF9zb2NrX3NldF9ub2RlbGF5YCwgZXRjLiwgd2l0aCBhIGN1c3RvbSB3cmFwcGVyIHRoYXQgdWx0aW1hdGVseSBjYWxscyBgZG9fc29ja19zZXRzb2Nrb3B0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFNlZW1zIGxpa2UgYSBtb3ZlIHRvd2FyZCBhIG1vcmUgY2VudHJhbGl6ZWQgc29ja2V0IG9wdGlvbiBtYW5hZ2VtZW50IGFwcHJvYWNoLCB3aGljaCBjb3VsZCBvZmZlciBiZW5lZml0cyBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHkgYW5kIGNvbnRyb2wuIEFkZGluZyBgbnZtZV90Y3Bfc29ja19zZXRfdGNsYXNzYCBhbmQgYG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3NgIHRvIHNldCBgSVBWNl9UQ0xBU1NgIGlmIHRoZSBzb2NrZXQgaXMgSVB2NiBpcyBhbHNvIGFkZGVkLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGlzIHBhdGNoLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBjaGFuZ2VzIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgc2V0LCBhbmQgaXQgYWRkcyBJUHY2IHRyYWZmaWMgY2xhc3MgY29uZmlndXJhdGlvbiwgc28gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHZpcnR1YWxpemF0aW9uOyBjYW4gSSByZWFzb25hYmx5IHJlcHJvZHVjZSB0aGlzIGluIGEgdGVzdCBlbnZpcm9ubWVudD8gVGhhbmtmdWxseSwgdGhlIHRleHQgY29uZmlybXMgdGhhdCBOVk1lIG92ZXIgVENQIGlzIHRlc3RhYmxlIHZpYSBsb29wYmFjayBvciB2ZXRoIGludGVyZmFjZXMgaW4gUUVNVSwgc28gdGhhdOKAmXMgYSBwbHVzLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAsIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAuIFNvLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgbmV3IG9yIG1vZGlmaWVkIGZ1bmN0aW9ucy4gYG52bWVfdGNwX2FsbG9jX3F1ZXVlYCBhbmQgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AgYXJlIHdoZXJlIEnigJlsbCBuZWVkIHRvIHB1dCBteSBmb2N1cy4gSSdsbCBuZWVkIHRvIGdvIGFoZWFkIGFuZCB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYmxpbmQgc3BvdHMgSSBtaWdodCBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MDYuMjcxNzY5NTE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTQyNjEzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3BfYWxsb2NfcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MTgxOD1zdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyNi1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYzoxODI3OnN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMTgyOC1cXHRcXHRcXHRcXHRrZXlfc2VyaWFsX3QgcHNraWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yMTM4PXN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxNTYtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE1NzpcXHRyZXQgPSBudm1lX3RjcF9hbGxvY19xdWV1ZShjdHJsLCAwLCBwc2tpZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMjE1OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjE3Mj1zdGF0aWMgaW50IF9fbnZtZV90Y3BfYWxsb2NfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yMTk3LVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBjdHJsLVxcdTAwM2VxdWV1ZV9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjE5ODpcXHRcXHRyZXQgPSBudm1lX3RjcF9hbGxvY19xdWV1ZShjdHJsLCBpLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTIxOTktXFx0XFx0XFx0XFx0Y3RybC1cXHUwMDNldGxzX3Bza2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MDguNDY2MDM2NDMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg1NzcwNDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTlZNZS1vRiBUQ1AgUXVldWUgQWxsb2NhdGlvbjogRGlnZ2luZyBEZWVwZXIqKlxuXG5Pa2F5LCBzbyBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNhcnZlcyBvdXQgdGhlIHF1ZXVlcyBmb3IgTlZNZSBvdmVyIFRDUCwgZ290IGl0LiBJdCdzIGNhbGxlZCBmcm9tIGJvdGggYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgdGhlIGBfX252bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBpdCdzIGZ1bmRhbWVudGFsIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaG9zdCBkcml2ZXIuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gc2V0IHVwIHRob3NlIHF1ZXVlcyB0byBoYW5kbGUgY29tbWFuZHMuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNvY2tldHMgYXJlIGFzc29jaWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToxMS4zMjM3NDMwNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4NDU2NjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xNzM4PXN0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0xNzUxLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6MTc1MjpzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE3NTMte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0xODc2PXN0YXRpYyB2b2lkIG52bWV0X3RjcF90bHNfaGFuZHNoYWtlX2RvbmUodm9pZCAqZGF0YSwgaW50IHN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTkwMC1cXHRpZiAoIXN0YXR1cylcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5MDE6XFx0XFx0c3RhdHVzID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5MDItXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTE5NjM9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA0MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIwNDE6XFx0cmV0ID0gbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHF1ZXVlKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIwNDItXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MTQuNzA4MzE2Njc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MDgzNDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTlZNZS9UQ1AgUXVldWUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlLiBJIHJlbWVtYmVyIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbnZtZXRfdGNwX3Rsc19oYW5kc2hha2VfZG9uZWAgYW5kIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgLiBUaGF0J3MgcmlnaHQsIHRob3NlIGFyZSBrZXkgY29tcG9uZW50cyB3aXRoaW4gdGhlIE5WTWUgb3ZlciBUQ1AgdGFyZ2V0IGRyaXZlci4gU28sIGJhc2ljYWxseSwgaXQncyBjZW50cmFsIHRvIHNldHRpbmcgdXAgdGhlIHNvY2tldCBjb25uZWN0aW9uIGZvciBhIHF1ZXVlLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBMZXQncyB0cmFjZSBpdCBiYWNrLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgbnZtZXRfdGNwX2FkZF9wb3J0YCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToxNy42OTkxNTI3NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MTgwOTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1ldF90Y3BfYWRkX3BvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0yMDkwPXN0YXRpYyB2b2lkIG52bWV0X3RjcF9saXN0ZW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDUtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMTA2OnN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIxMDcte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz0yMjgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZXRfdGNwX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4Ni1cXHQubXNkYmRcXHRcXHRcXHQ9IDEsXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzoyMjg3OlxcdC5hZGRfcG9ydFxcdFxcdD0gbnZtZXRfdGNwX2FkZF9wb3J0LFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjI4OC1cXHQucmVtb3ZlX3BvcnRcXHRcXHQ9IG52bWV0X3RjcF9yZW1vdmVfcG9ydCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MTkuODcwOTcyNTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE1NDIwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgTlZNZSBvdmVyIFRDUCBUYXJnZXQ6IFRhcmdldGVkIEFyZWFzIGFuZCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbnZtZXRfdGNwX2FkZF9wb3J0YCwgd2hpY2ggaXMgdGhlIGBhZGRfcG9ydGAgY2FsbGJhY2sgZm9yIHRoZSBOVk1lIG92ZXIgVENQIHRhcmdldC4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgY2hhbmdlcyB3b3J0aCBmdXp6aW5nPyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkuIEkgc2VlIGNoYW5nZXMgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSBjb25maWd1cmVkLCBhbmQgYSBuZXcgc2V0dGluZyBmb3IgYElQVjZfVENMQVNTYCBoYXMgYmVlbiBhZGRlZC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgYXJlYXMgdGhhdCBjb3VsZCBiZSBzdXNjZXB0aWJsZSB0byBzdWJ0bGUgYnVncy5cblxuU28sIHdoZXJlIHNob3VsZCBJIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cz8gSSBpbml0aWFsbHkgdGhvdWdodCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgLCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCwgYW5kIGBudm1ldF90Y3BfYWRkX3BvcnRgIHdlcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMuIEFoLCB3YWl0LCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgSSBjYW4gYWN0dWFsbHkgdHJpZ2dlciBmcm9tIHRoZSBvdXRzaWRlLiBPa2F5LCBhZnRlciBhIHF1aWNrIGxvb2ssIGl0IHNlZW1zIGBudm1lX3RjcF9hbGxvY19hZG1pbl9xdWV1ZWAgaXMgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IGFzIGl0IGlzIGNhbGxlZCBmcm9tIGBudm1lX3RjcF9zZXR1cF9jdHJsYC4gVGhpcyBpcyB0aGUgb25lIHRvIHRhcmdldCFcblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToyMy41ODYzOTU1ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjAwMDQ2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV90Y3Bfc2V0dXBfY3RybFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNDMxPXN0YXRpYyBib29sIG52bWVfdGNwX2tleV9yZXZva2VfbmVlZGVkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNDM1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjI0MzY6c3RhdGljIGludCBudm1lX3RjcF9zZXR1cF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgbmV3KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI0Mzcte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MjUxOT1zdGF0aWMgdm9pZCBudm1lX3RjcF9yZWNvbm5lY3RfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI1MjctXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjUyODpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNTI5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0yNTg5PXN0YXRpYyB2b2lkIG52bWVfcmVzZXRfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTI2MDgtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MjYwOTpcXHRyZXQgPSBudm1lX3RjcF9zZXR1cF9jdHJsKGN0cmwsIGZhbHNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0yNjEwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYz0zMDQ0PXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX3RjcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDYzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jOjMwNjQ6XFx0cmV0ID0gbnZtZV90Y3Bfc2V0dXBfY3RybChcXHUwMDI2Y3RybC1cXHUwMDNlY3RybCwgdHJ1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmMtMzA2NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MToyNS43MDY0MTUwMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMjEzMjg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gQ29udHJvbGxlciBDcmVhdGlvbiAobnZtZV90Y3BfY3JlYXRlX2N0cmwpKipcblxuQWxyaWdodCwgc28gYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgdGFsa2luZyBhYm91dCBoZXJlLiBUaGlua2luZyBhYm91dCBpdCwgdGhpcyBpcyB0aGUgYmlnIG9uZSwgdGhlIGNvcmUgZW50cnkgcG9pbnQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucywgdGhlIHN0YXJ0aW5nIGd1biBmb3IgYnJpbmdpbmcgYSBuZXcgY29udHJvbGxlciBpbnRvIGV4aXN0ZW5jZSwgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUuIEl0J3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwIGZvciBhIE5WTWUvVENQIGNvbnRyb2xsZXIsIHJpZ2h0PyBFdmVyeXRoaW5nIGVsc2UgcHJvYmFibHkgZmxvd3MgZnJvbSB0aGlzIHBvaW50LiBXZSdyZSB0YWxraW5nIGFib3V0IGtpY2tpbmcgb2ZmIGFsbCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIG5lY2Vzc2FyeSB0byBlc3RhYmxpc2ggYSBmdW5jdGlvbmFsIE5WTWUgY29udHJvbGxlciBpbnN0YW5jZS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgXCJob3dcIiBvZiBtYWtpbmcgdGhpbmdzIHdvcmssIGFuZCBiZWluZyByZWFkeSB0byByZXNwb25kIHRvIHJlcXVlc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzYxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MjguNTM4NTUyMDIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2MjQ3ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfdGNwX2NyZWF0ZV9jdHJsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jPTI5NjI9c3RhdGljIHN0cnVjdCBudm1lX3RjcF9jdHJsICpudm1lX3RjcF9hbGxvY19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwNDMtXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA0NDpzdGF0aWMgc3RydWN0IG52bWVfY3RybCAqbnZtZV90Y3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwNDUtXFx0XFx0c3RydWN0IG52bWZfY3RybF9vcHRpb25zICpvcHRzKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM9MzA4Nj1zdGF0aWMgc3RydWN0IG52bWZfdHJhbnNwb3J0X29wcyBudm1lX3RjcF90cmFuc3BvcnQgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC90Y3AuYy0zMDk1LVxcdFxcdFxcdCAgTlZNRl9PUFRfS0VZUklORyB8IE5WTUZfT1BUX1RMU19LRVkgfCBOVk1GX09QVF9DT05DQVQsXFxuZHJpdmVycy9udm1lL2hvc3QvdGNwLmM6MzA5NjpcXHQuY3JlYXRlX2N0cmxcXHQ9IG52bWVfdGNwX2NyZWF0ZV9jdHJsLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3RjcC5jLTMwOTctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MzAuNzM0ODA5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk1NDAwNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRm9jdXNpbmcgRnV6emluZyBFZmZvcnRzIGluIE5WTWUtb0YgT3ZlciBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IHRoZSBmdXp6aW5nIGVmZm9ydHMgZm9yIG91ciBOVk1lLW9GIG92ZXIgVENQIGltcGxlbWVudGF0aW9uLiBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBJdCdzIG5vdCBqdXN0IHNvbWUgaW50ZXJuYWwgZnVuY3Rpb24sIGJ1dCBhIGNydWNpYWwgZW50cnkgcG9pbnQg4oCTIGEgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciBgY3JlYXRlX2N0cmxgIHdpdGhpbiB0aGUgYG52bWZfdHJhbnNwb3J0X29wc2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlLiBBIHdlbGwtcGxhY2VkIGZ1enplciBoaXR0aW5nIHRoYXQgZnVuY3Rpb24gY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIGEgd2hvbGUgaG9zdCBvZiB2dWxuZXJhYmlsaXRpZXMsIGdpdmVuIGl0cyByb2xlIGluIGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zLiBJdCdzIGEga2V5IHNwb3QgZm9yIGF0dGFjayBzdXJmYWNlLlxuXG5PbiB0aGUgdGFyZ2V0IHNpZGUsIEkgbmVlZCB0byByZW1lbWJlciBgbnZtZXRfdGNwX2FkZF9wb3J0YC4gSXQncyBhbHNvIGEgY2FsbGJhY2ssIGFuZCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgaW52ZXN0aWdhdGlvbiBhbmQgcG90ZW50aWFsIGZ1enppbmcgYXMgd2VsbCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB3ZWFrbmVzc2VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6MzQuMjMwMjExOTQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwNjcxNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWV0X3RjcF9hZGRfcG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIwOTA9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwNS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIxMDY6c3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjEwNy17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyBudm1ldF90Y3Bfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg2LVxcdC5tc2RiZFxcdFxcdFxcdD0gMSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIyODc6XFx0LmFkZF9wb3J0XFx0XFx0PSBudm1ldF90Y3BfYWRkX3BvcnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjg4LVxcdC5yZW1vdmVfcG9ydFxcdFxcdD0gbnZtZXRfdGNwX3JlbW92ZV9wb3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTozNi40MTA4ODc2NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2MTg5OTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgTlZNZS1vRiBUQ1AgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG52bWV0X3RjcF9hZGRfcG9ydGAgZnVuY3Rpb24uIFJpZ2h0LCBpdCdzIHRoZSByZWdpc3RlcmVkIGBhZGRfcG9ydGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbnZtZXRfZmFicmljc19vcHNgIHN0cnVjdHVyZSwgc28gdGhhdCdzIGl0cyBwcmltYXJ5IHJvbGUuIEl0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IGZvciB0aGUgVENQIHRyYW5zcG9ydCwgZ290IGl0LiBJdCBoYW5kbGVzIHRoZSBpbml0aWFsIHBvcnQgc2V0dXAgZm9yIE5WTWUgb3ZlciBUQ1AsIGxpbmtpbmcgaXQgaW50byB0aGUgZnJhbWV3b3JrLlxuXG5Ob3csIEknbSBwaXZvdGluZyBzbGlnaHRseSBhbmQgdGhpbmtpbmcgYWJvdXQgYG52bWV0X3RjcF9zZXRfcXVldWVfc29ja2AuIFRoYXQgbWV0aG9kLCBpZiBtZW1vcnkgc2VydmVzLCBpcyBjYWxsZWQgZnJvbSBgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlYC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBzZXRzIHVwIHRoZSBhY3R1YWwgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHF1ZXVlLiAgU28gd2UgZ28gZnJvbSBwb3J0IHRvIHF1ZXVlIHRvIHNvY2tldCwgYW5kIHRoYXQgcXVldWUgaXMgdGhlIHBpZWNlIHRoYXQgbWFwcyB0byBhIHNwZWNpZmljIEkvTyBjb250ZXh0LiBXZSBhcmUgc3RhcnRpbmcgdG8gcHV0IHRvZ2V0aGVyIHRoZSBlbnRpcmUgZGF0YSBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3OTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTozOS4zNzI3OTAwOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjcxOTM2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfdGNwX2FsbG9jX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MTk2MD1zdGF0aWMgdm9pZCBudm1ldF90Y3BfdGxzX2hhbmRzaGFrZV90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykge31cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMTk2Mi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjE5NjM6c3RhdGljIHZvaWQgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1ldF90Y3BfcG9ydCAqcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTE5NjQtXFx0XFx0c3RydWN0IHNvY2tldCAqbmV3c29jaylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9MjA3Mj1zdGF0aWMgdm9pZCBudm1ldF90Y3BfYWNjZXB0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMDg1LVxcdFxcdH1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIwODY6XFx0XFx0bnZtZXRfdGNwX2FsbG9jX3F1ZXVlKHBvcnQsIG5ld3NvY2spO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjA4Ny1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUxOjQxLjUzOTk5MjcwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5MTMzOTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTlZNZS1vRi9UQ1AgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IE5WTWUgb3ZlciBUQ1AgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQuIEknbSBmb2N1c2luZyBvbiB0aGF0IGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGtleSDigJMgaXQncyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgYW5kIHRoZSBuYW1lJ3MgcHJldHR5IGNsZWFyOyBpdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yICphY2NlcHRpbmcqIG5ldyBjb25uZWN0aW9ucy4gU28sIGZyb20gYSBoaWdoIGxldmVsLCBJJ20gdGhpbmtpbmcgbXkgbWFpbiBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhcmUgZ29pbmcgdG8gYmUgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCwgYG52bWV0X3RjcF9hZGRfcG9ydGAsIGFuZCBvZiBjb3Vyc2UsIHRoYXQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AgaXRzZWxmLlxuXG5Ob3csIGJlZm9yZSBJIGdvIG11Y2ggZnVydGhlciwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBuZWNlc3NhcnkgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb25zLiBTZWVtcyBvYnZpb3VzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05WTUVfVENQYCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVF9UQ1BgIGFyZSBib3RoIGVuYWJsZWQuIEdvdHRhIGdldCB0aGUgZm91bmRhdGlvbnMgcmlnaHQsIHlvdSBrbm93P1xuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NDUuMTU5MTMwNzgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg5ODUyNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTY3PWNvbmZpZyBOVk1FX0ZDXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTgyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6ODM6Y29uZmlnIE5WTUVfVENQXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy04NC1cXHR0cmlzdGF0ZSBcXFwiTlZNIEV4cHJlc3Mgb3ZlciBGYWJyaWNzIFRDUCBob3N0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctOTktXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoxMDA6Y29uZmlnIE5WTUVfVENQX1RMU1xcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTAxLVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCBUTFMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MTo0Ny4yNDg5OTA4MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDQxMTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE5WTWUvVENQIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBOVk1lL1RDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGtlcm5lbCdzIE5WTWUgaG9zdCBkcml2ZXIuIFRpbWUgdG8gZ28gc3BlbHVua2luZyBpbiBgZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ2AuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGZsYWcsIGxpa2VseSBuYW1lZCBgTlZNRV9UQ1BgLCBhbmQgSSdtIGFudGljaXBhdGluZyB0aGUgdXN1YWwgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZSBzZWxlY3Rpb24sIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29ya2luZyBvciBzdG9yYWdlIHN1YnN5c3RlbXMsIGFuZCB3aGF0IGtpbmQgb2YgZGVmYXVsdHMgYXJlIGluIHBsYXkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlcmUncyBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgYmFzZSBOVk1lIGhvc3QgZHJpdmVyIGFuZCB0aGUgVENQIHRyYW5zcG9ydCBsYXllciwgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIGhvdyBlbmFibGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaW1wYWN0cyB0aGUgb3ZlcmFsbCBidWlsZC4gRXNzZW50aWFsbHksIEknbSBjaGVja2luZyB0aGUgZmluZSBwcmludCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTAuNTU5NDA1MjEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBOVk1FX1RDUFxcbiAgODQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDg3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDg5OlxcdFxcdHNlbGVjdCBOVk1FX0ZBQlJJQ1NcXG4gIDkwOlxcdFxcdGhlbHBcXG4gIDkxOlxcdFxcdCAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTlZNZSBvdmVyIEZhYnJpY3MgcHJvdG9jb2wgdXNpbmdcXG4gIDkyOlxcdFxcdCAgdGhlIFRDUCB0cmFuc3BvcnQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHJlbW90ZSBibG9jayBkZXZpY2VzXFxuICA5MzpcXHRcXHQgIGV4cG9ydGVkIHVzaW5nIHRoZSBOVk1lIHByb3RvY29sIHNldC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxcbiAgOTY6XFx0XFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTAuNTU5NDk1MjAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzU2MTczNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYXNzdW1wdGlvbiBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipOVk1lLW9GIFRDUCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIGBOVk1FX1RDUGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gSXQncyBhbG1vc3QgYSBnaXZlbiwgYnV0IEkgd2FudCB0byBiZSB0aG9yb3VnaC4gV2UncmUgb2J2aW91c2x5IGdvaW5nIHRvIGJlIHJlbHlpbmcgb24gYElORVRgIGZvciB0aGUgVENQL0lQIHN0YWNrLiBUaGF0J3MgZnVuZGFtZW50YWwsIG5vIHN1cnByaXNlIHRoZXJlLiBBbmQgdGhlbiwgd2UnbGwgbmVlZCB0aGUgYEJMT0NLYCBsYXllci4gT2YgY291cnNlISBXZSBuZWVkIHRoYXQgaW50ZXJmYWNlIGZvciBoYW5kbGluZyB0aGUgYmxvY2sgc3RvcmFnZSBhc3BlY3RzIG9mIE5WTWUuIE5vIHN1cnByaXNlcyBzbyBmYXIuIE5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgb24gYE5WTUVfVEFSR0VUX1RDUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHRhcmdldCBzaWRlIGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3Ig4oCTIHRoYXQgd2UncmUgY292ZXJpbmcgYWxsIGJhc2VzIGluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIEdvdHRhIGJlIGNvbXBsZXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTMuNTk1MTE1MTI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY2ODgyMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnPTc0PWNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1BcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cXHRib29sIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUxOjU1LjY2MjAwMjk5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ0NDU2ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVk1lL1RDUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE5WTWUvVENQLCBzcGVjaWZpY2FsbHkgdGhlIGBOVk1FX1RBUkdFVF9UQ1BgIHNlY3Rpb24uIExldCdzIHB1bGwgdXAgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzcGVjdHMgb2YgdGhlIFRDUCB0cmFuc3BvcnQgSSBjYW4gY29uZmlndXJlLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IGdldCBhIGZlZWwgZm9yIGhvdyBtb2R1bGFyIHRoaXMgY29tcG9uZW50IGlzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgTlZNZSB0YXJnZXQgZnJhbWV3b3JrOyBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZC4gVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGlsbHVtaW5hdGUgdGhvc2UgcG9pbnRzLCBkZXRhaWxpbmcgdGhlIHZhcmlvdXMgY29tcGlsZS10aW1lIHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIE5WTWUtb3Zlci1UQ1AgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUxOjU4LjYwNjQ2MjA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NjpcXHRcXG4gIDg3OlxcdGNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuICA4OTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBlbmFibGVzIHRoZSBOVk1lIFRDUCB0YXJnZXQgc3VwcG9ydCwgd2hpY2ggYWxsb3dzIGV4cG9ydGluZyBOVk1lXFxuICA5MzpcXHRcXHQgIGRldmljZXMgb3ZlciBUQ1AuXFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDk2OlxcdFxcbiAgOTc6XFx0Y29uZmlnIE5WTUVfVEFSR0VUX1RDUF9UTFNcXG4gIDk4OlxcdFxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4gIDk5OlxcdFxcdGRlcGVuZHMgb24gTlZNRV9UQVJHRVRfVENQXFxuIDEwMDpcXHRcXHRzZWxlY3QgTkVUX0hBTkRTSEFLRVxcbiAxMDE6XFx0XFx0c2VsZWN0IFRMU1xcbiAxMDI6XFx0XFx0aGVscFxcbiAxMDM6XFx0XFx0ICBFbmFibGVzIFRMUyBlbmNyeXB0aW9uIGZvciB0aGUgTlZNZSBUQ1AgdGFyZ2V0IHVzaW5nIHRoZSBuZXRsaW5rIGhhbmRzaGFrZSBBUEkuXFxuIDEwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTE6NTguNjA2NTI2MjE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDgwMzA5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgVmVyaWZpY2F0aW9uIC0gTlZNRV9UQVJHRVRfVENQKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5WTUVfVEFSR0VUX1RDUGAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCByZWxpZXMgb24gYElORVRgIGFuZCBgTlZNRV9UQVJHRVRgLiBHaXZlbiB0aGF0LCBteSBmaXJzdCB0aG91Z2h0IGlzLCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gYE5WTUVfVEFSR0VUX1RDUGAgaXRzZWxmLCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIGBOVk1FX1RBUkdFVGAuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEVuc3VyaW5nIHRoYXQgYmFzZSBjb21wb25lbnQgaXMgc291bmQgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGFueXRoaW5nIHRoYXQgYXJpc2VzIHdpdGggdGhlIFRDUCBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYE5WTUVfVEFSR0VUYCBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjAxLjQxNDU1OTM5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MjQ1MTk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9UQVJHRVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIk5WTWUgVGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjIwOmNvbmZpZyBOVk1FX1RBUkdFVF9ERUJVR0ZTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTIxLSAgICAgICAgYm9vbCBcXFwiTlZNZSBUYXJnZXQgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyOTpjb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMzAtXFx0Ym9vbCBcXFwiTlZNZSBUYXJnZXQgUGFzc3Rocm91Z2ggc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NDE6Y29uZmlnIE5WTUVfVEFSR0VUX0xPT1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIk5WTWUgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTEtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjUyOmNvbmZpZyBOVk1FX1RBUkdFVF9SRE1BXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBSRE1BIHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTYyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo2Mzpjb25maWcgTlZNRV9UQVJHRVRfRkNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjQtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEZDIHRhcmdldCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzMtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjc0OmNvbmZpZyBOVk1FX1RBUkdFVF9GQ0xPT1BcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEZDIFRyYW5zcG9ydCBMb29wYmFjayBUZXN0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05OC1cXHRib29sIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTA5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMTA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gaW4gdGFyZ2V0IHNpZGVcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTE5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhfREVCVUdcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTIxLVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTI4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BDSV9FUEZcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTMwLVxcdHRyaXN0YXRlIFxcXCJOVk1lIFBDSSBFbmRwb2ludCBGdW5jdGlvbiB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MDMuNTA3MDE3NzI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDA0NDUzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBgTlZNRV9UQVJHRVRgIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIE5WTUUgVGFyZ2V0IEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYE5WTUVfVEFSR0VUYCBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIG9mIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSByZXZlYWxzIGl0c2VsZiwgbGV0dGluZyB1cyBkZWZpbmUgc2V0dGluZ3Mgd2l0aCBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIGRlZmF1bHRzLCB0aGUgd2hvbGUgZW5jaGlsYWRhLCBhbmQgSSdtIGVhZ2VyIHRvIGRpc3NlY3QgaG93IGl0IGFsbCB3b3JrcyBoZXJlLCB3aXRoIHRoaXMgc3BlY2lmaWMgbW9kdWxlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhbmQgaG93IHRoZXkncmUgc3RydWN0dXJlZC4gVGhpcyB3aWxsIHBhaW50IGEgY3J1Y2lhbCBwaWN0dXJlIG9mIGhvdyB0aGUgTlZNZSB0YXJnZXQgc3VwcG9ydCBmaXRzIGludG8gdGhlIGJpZ2dlciBrZXJuZWwgcGljdHVyZS4gRnJvbSBoZXJlIEkgY2FuIGxpa2VseSBpbmZlciBob3cgdGhlIHRhcmdldCBpcyBwcmVzZW50ZWQgdG8gdGhlIGVuZCB1c2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjA2LjQwNzQ2NTUyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIE5WTUVfVEFSR0VUXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuICAgODpcXHRcXHRzZWxlY3QgS0VZUyBpZiBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuICAgOTpcXHRcXHRzZWxlY3QgU0dMX0FMTE9DXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZW5hYmxlZCB0YXJnZXQgc2lkZSBzdXBwb3J0IGZvciB0aGUgTlZNZSBwcm90b2NvbCwgdGhhdCBpc1xcbiAgMTI6XFx0XFx0ICBpdCBhbGxvd3MgdGhlIExpbnV4IGtlcm5lbCB0byBpbXBsZW1lbnQgTlZNZSBzdWJzeXN0ZW1zIGFuZFxcbiAgMTM6XFx0XFx0ICBjb250cm9sbGVycyBhbmQgZXhwb3J0IExpbnV4IGJsb2NrIGRldmljZXMgYXMgTlZNZSBuYW1lc3BhY2VzLlxcbiAgMTQ6XFx0XFx0ICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFuc3BvcnRzIGJlbG93IHRvIG1ha2UgdGhpc1xcbiAgMTU6XFx0XFx0ICBmdW5jdGlvbmFsaXR5IHVzZWZ1bC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUbyBjb25maWd1cmUgdGhlIE5WTWUgdGFyZ2V0IHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgbnZtZXRjbGlcXG4gIDE4OlxcdFxcdCAgdG9vbCBmcm9tIGh0dHA6Ly9naXQuaW5mcmFkZWFkLm9yZy91c2Vycy9oY2gvbnZtZXRjbGkuZ2l0LlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgTlZNRV9UQVJHRVRfREVCVUdGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjowNi40MDc1MjU4MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0NzQwMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gTlZNZS1UQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBOVk1lLVRDUCBkZXBlbmRlbmNpZXMuIEl0J3MgY2xlYXIgdGhhdCBgTlZNRV9UQVJHRVRgIGRlcGVuZHMgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIGNvcmUgY29uZmlncyByZXF1aXJlZCBhcmUgYE5WTUVfVENQYCwgYE5WTUVfVEFSR0VUYCwgYW5kIGBOVk1FX1RBUkdFVF9UQ1BgLiBBbmQgb2YgY291cnNlLCBgSVBWNmAgaXMgbmVlZGVkIGZvciBoYW5kbGluZyBgSVBWNl9UQ0xBU1NgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgYElQVjZgIGlzIHByb3Blcmx5IGVuYWJsZWQuIEkgc2VlIHRoYXQgaXQncyBjaGVja2VkIHdpdGggYElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYC4gSXQncyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhIHRvIGVuc3VyZSBgSVBWNmAgaXMgZW5hYmxlZCBkdXJpbmcgdGVzdGluZyB0byBjb3ZlciB0aGF0IGNvZGUgcGF0aC5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGluIHRlcm1zIG9mIHRoZWlyIHJvbGUgaW4gdGhlIHNldHVwIHByb2Nlc3M6XG5cbiogICBJIG9yaWdpbmFsbHkgd2FzIGZvY3VzaW5nIG9uIGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBlbnRyeSBwb2ludHMuXG4qICAgSSBzZWUgdGhhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgYnV0IHRoYXQgaXMgdGhlIGVudHJ5IHBvaW50IHdoaWNoIGNhbGxzIGBudm1ldF90Y3BfYWxsb2NfcXVldWVgIHdoaWNoIGNhbGxzIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBTbywgSSdsbCBrZWVwIHRoYXQuXG4qICAgYG52bWV0X3RjcF9hZGRfcG9ydGAgYW5kIGBudm1lX3RjcF9jcmVhdGVfY3RybGAgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3Igc2V0dGluZyB1cCB0aGUgc29ja2V0cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYCBpcyBzdGF0aWMuIFllcywgaXQgaXMgc3RhdGljLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgbm9uLXN0YXRpYyBvcHRpb24uIEkgc2VlIGBudm1ldF90Y3BfYWRkX3BvcnRgIGlzIGFsc28gc3RhdGljLCBidXQgaXQncyBhc3NpZ25lZCB0byBgYWRkX3BvcnRgIGluIGBudm1ldF9mYWJyaWNzX29wc2AuIEFuZCwgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBpcyBzdGF0aWMgYXMgd2VsbCBhbmQgYXNzaWduZWQgdG8gYGNyZWF0ZV9jdHJsYCBpbiBgbnZtZl90cmFuc3BvcnRfb3BzYC5cblxuV2FpdCwgdGhlIHByb21wdCBzYWlkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIHRob3NlLiBGb3IgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCwgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgaXMgYG52bWZfY3JlYXRlX2N0cmxgIGluIGBkcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHRoYXQgY29kZSBhcyB0aGF0J3MgdGhlIHJlYWwgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MTMuNzU0OTMxNzEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc2MDg5ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWZfY3JlYXRlX2N0cmxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzMDc9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKlxcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxMzA4Om52bWZfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYpXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzODU9c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDUtXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjE0MDY6XFx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDctXFx0aWYgKElTX0VSUihjdHJsKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjoxNy4xMzEwMjU3OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzODMxNDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQ29udHJvbGxlciBhbmQgUG9ydCBTZXR1cCAtIE15IFBlcnNwZWN0aXZlKipcblxuQWxyaWdodCwgc28gaWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBgbnZtZl9kZXZfd3JpdGVgIGZ1bmN0aW9uIGlzIHRoZSBnYXRla2VlcGVyLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igc3Bpbm5pbmcgdXAgYSBuZXcgY29udHJvbGxlci4gVGhhdCdzIGhvdyB3ZSBraWNrIG9mZiB0aGUgcHJvY2Vzcy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgb24gdGhlIHRhcmdldCBzaWRlLCB3aGVuIHdlJ3JlIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QsIGl0IHNlZW1zIGxpa2UgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgdGhlIGdvLXRvIGZ1bmN0aW9uLiBUaGlzIGlzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19hbnlfc3RvcmVgIG9yIHNpbWlsYXIgY2FsbGJhY2tzIHRoYXQgd2UgY29uZmlndXJlIHVzaW5nIGNvbmZpZ2ZzLiBTbywgdGhlIGNvbmZpZ2ZzIGNhbGxiYWNrcyB3b3VsZCBiZSBob3cgd2UgaGFuZGxlIHRoZSBwb3J0IGNyZWF0aW9uIGluIG91ciBzZXR1cC4gSXQgaXMgaG93IHdlIGhhbmRsZSBzZXR0aW5nIHVwIHRoZSBwb3J0IGZyb20gdGFyZ2V0LXNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTIwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MjAuMDY5MzQzNDkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg4NjgxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF9wb3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzUxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0PTE4OT1SZXR1cm5zIGEgcG9pbnRlciB0byBzdHJ1Y3Qgc29jX3VzYiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvci5cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjAxLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q6MjAyOlxcdHZvaWQgc25kX3NvY191c2JfYWRkX3BvcnQoc3RydWN0IHNuZF9zb2NfdXNiICp1c2IpO1xcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjAzLS4uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTIwNi1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjIwNzoqKnNuZF9zb2NfdXNiX2FkZF9wb3J0KCkqKiBhZGQgYW4gYWxsb2NhdGVkIFNvQyBVU0IgZGV2aWNlIHRvIHRoZSBTT0MgVVNCIGZyYW1ld29yay5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTIwOC1PbmNlIGFkZGVkLCB0aGlzIGRldmljZSBjYW4gYmUgcmVmZXJlbmNlZCBieSBmdXJ0aGVyIG9wZXJhdGlvbnMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0PTIyNj1iZSBzaG93biBiZWxvdzpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtMjM4LVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q6MjM5OlxcdFxcdHJldCA9IHNuZF9zb2NfdXNiX2FkZF9wb3J0KHVzYik7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9zb2MvdXNiLnJzdC0yNDAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3Q9NDQwPWV4ZWN1dGUgdGhlIHJlZ2lzdGVyZWQgZnVuY3Rpb24gY2FsbHMgdG8gdGhlIERQQ00gQkUgREFJIGxpbmsuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0LTQ1NS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL3NvYy91c2IucnN0OjQ1NjpcXHRyZXQgPSBzbmRfc29jX3VzYl9hZGRfcG9ydCh1c2IpO1xcbkRvY3VtZW50YXRpb24vc291bmQvc29jL3VzYi5yc3QtNDU3LS4uXFxuLS1cXG5kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jPTM5Nz1zdGF0aWMgaW50IHBhdGFfaWNzaWRlX3JlZ2lzdGVyX3Y2KHN0cnVjdCBwYXRhX2ljc2lkZV9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy00MzktXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYzo0NDA6c3RhdGljIGludCBwYXRhX2ljc2lkZV9hZGRfcG9ydHMoc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gKmluZm8pXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy00NDEte1xcbi0tXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYz00ODA9c3RhdGljIGludCBwYXRhX2ljc2lkZV9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLFxcbi0tXFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDMtXFx0aWYgKHJldCA9PSAwKVxcbmRyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmM6NTQ0OlxcdFxcdHJldCA9IHBhdGFfaWNzaWRlX2FkZF9wb3J0cyhcXHUwMDI2aW5mbyk7XFxuZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYy01NDUtXFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xMzE2PXN0YXRpYyB2b2lkIHNlbmRfc2lnaW9fdG9fcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTEzMjEtXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTMyMjpzdGF0aWMgaW50IGFkZF9wb3J0KHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYsIHUzMiBpZClcXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xMzIzLXtcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE1MjM9c3RhdGljIHZvaWQgaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE1NTgtXFx0XFx0fVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjE1NTk6XFx0XFx0YWRkX3BvcnQocG9ydGRldiwgdmlydGlvMzJfdG9fY3B1KHZkZXYsIGNwa3QtXFx1MDAzZWlkKSk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtMTU2MC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jPTE5NTk9c3RhdGljIGludCB2aXJ0Y29uc19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTIwNTItXFx0XFx0ICovXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MjA1MzpcXHRcXHRhZGRfcG9ydChwb3J0ZGV2LCAwKTtcXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0yMDU0LVxcdH1cXG4tLVxcbmRyaXZlcnMvY3hsL2FjcGkuYz02ODc9c3RhdGljIGludCBhZGRfaG9zdF9icmlkZ2VfdXBvcnQoc3RydWN0IGRldmljZSAqbWF0Y2gsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvY3hsL2FjcGkuYy03MzQtXFxuZHJpdmVycy9jeGwvYWNwaS5jOjczNTpcXHRwb3J0ID0gZGV2bV9jeGxfYWRkX3BvcnQoaG9zdCwgYnJpZGdlLCBjb21wb25lbnRfcmVnX3BoeXMsIGRwb3J0KTtcXG5kcml2ZXJzL2N4bC9hY3BpLmMtNzM2LVxcdGlmIChJU19FUlIocG9ydCkpXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYz04Mzg9c3RhdGljIGludCBjeGxfcG9ydF9hZGQoc3RydWN0IGN4bF9wb3J0ICpwb3J0LFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtODgxLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjg4MjpzdGF0aWMgc3RydWN0IGN4bF9wb3J0ICpfX2Rldm1fY3hsX2FkZF9wb3J0KHN0cnVjdCBkZXZpY2UgKmhvc3QsXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtODgzLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MTYtLyoqXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTE3OiAqIGRldm1fY3hsX2FkZF9wb3J0IC0gcmVnaXN0ZXIgYSBjeGxfcG9ydCBpbiBDWEwgbWVtb3J5IGRlY29kZSBoaWVyYXJjaHlcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MTgtICogQGhvc3Q6IGhvc3QgZGV2aWNlIGZvciBkZXZtIG9wZXJhdGlvbnNcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkyMi0gKi9cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5MjM6c3RydWN0IGN4bF9wb3J0ICpkZXZtX2N4bF9hZGRfcG9ydChzdHJ1Y3QgZGV2aWNlICpob3N0LFxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkyNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05MjktXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6OTMwOlxcdHBvcnQgPSBfX2Rldm1fY3hsX2FkZF9wb3J0KGhvc3QsIHVwb3J0X2RldiwgY29tcG9uZW50X3JlZ19waHlzLFxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTkzMS1cXHRcXHRcXHRcXHQgICBwYXJlbnRfZHBvcnQpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtOTQ5LX1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5NTA6RVhQT1JUX1NZTUJPTF9OU19HUEwoZGV2bV9jeGxfYWRkX3BvcnQsIFxcXCJDWExcXFwiKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05NTEtXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9OTUyPXN0cnVjdCBjeGxfcm9vdCAqZGV2bV9jeGxfYWRkX3Jvb3Qoc3RydWN0IGRldmljZSAqaG9zdClcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTk1NS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzo5NTY6XFx0cG9ydCA9IGRldm1fY3hsX2FkZF9wb3J0KGhvc3QsIGhvc3QsIENYTF9SRVNPVVJDRV9OT05FLCBOVUxMKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy05NTctXFx0aWYgKElTX0VSUihwb3J0KSlcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jPTE0NTA9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX2VuZHBvaW50X2F1dG9yZW1vdmUsIFxcXCJDWExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE0NTYtICogdGhyb3VnaCAtXFx1MDAzZXJlbW92ZSgpLiBUaGlzIFxcXCJib3R0b20tdXBcXFwiIHJlbW92YWwgc2VsZWN0aXZlbHkgcmVtb3ZlcyBpbmRpdmlkdWFsXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTQ1NzogKiBjaGlsZCBwb3J0cyBtYW51YWxseS4gVGhpcyBkZXBlbmRzIG9uIGRldm1fY3hsX2FkZF9wb3J0KCkgdG8gbm90IGNoYW5nZSBpc1xcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE0NTgtICogZGV2bSBhY3Rpb24gcmVnaXN0cmF0aW9uIG9yZGVyLCBhbmQgZm9yIGRwb3J0cyB0byBoYXZlIGFscmVhZHkgYmVlblxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM9MTY2Nz1zdGF0aWMgc3RydWN0IGN4bF9kcG9ydCAqZGV2bV9jeGxfY3JlYXRlX3BvcnQoc3RydWN0IGRldmljZSAqZXBfZGV2LFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTY4Ni1cXHRcXHRjb21wb25lbnRfcmVnX3BoeXMgPSBmaW5kX2NvbXBvbmVudF9yZWdpc3RlcnModXBvcnRfZGV2KTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYzoxNjg3OlxcdFxcdHBvcnQgPSBkZXZtX2N4bF9hZGRfcG9ydChcXHUwMDI2cGFyZW50X3BvcnQtXFx1MDAzZWRldiwgdXBvcnRfZGV2LFxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE2ODgtXFx0XFx0XFx0XFx0XFx0IGNvbXBvbmVudF9yZWdfcGh5cywgcGFyZW50X2Rwb3J0KTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE3MTMtXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTcxNDpzdGF0aWMgaW50IGFkZF9wb3J0X2F0dGFjaF9lcChzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQsXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTcxNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlICp1cG9ydF9kZXYsXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYz0xNzk5PWludCBkZXZtX2N4bF9lbnVtZXJhdGVfcG9ydHMoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kKVxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMTg2My1cXHRcXHRcXHQgKiB0aGF0J3Mgb2ssIGl0IHdhcyBhZGRlZCBvbiBhIHByZXZpb3VzIHBhc3MuXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTg2NDpcXHRcXHRcXHQgKiBPdGhlcndpc2UsIHJldHJ5IGluIGFkZF9wb3J0X2F0dGFjaF9lcCgpIGFmdGVyIHRha2luZ1xcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NjUtXFx0XFx0XFx0ICogdGhlIHBhcmVudF9wb3J0IGxvY2sgYXMgdGhlIGN1cnJlbnQgcG9ydCBtYXkgYmUgYmVpbmdcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4NzktXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MTg4MDpcXHRcXHRyYyA9IGFkZF9wb3J0X2F0dGFjaF9lcChjeGxtZCwgdXBvcnRfZGV2LCBkcG9ydF9kZXYpO1xcbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jLTE4ODEtXFx0XFx0LyogcG9ydCBtaXNzaW5nLCB0cnkgdG8gYWRkIHBhcmVudCAqL1xcbi0tXFxuZHJpdmVycy9jeGwvY3hsLmg9NzI4PXN0cnVjdCBwY2lfYnVzICpjeGxfcG9ydF90b19wY2lfYnVzKHN0cnVjdCBjeGxfcG9ydCAqcG9ydCk7XFxuZHJpdmVycy9jeGwvY3hsLmg6NzI5OnN0cnVjdCBjeGxfcG9ydCAqZGV2bV9jeGxfYWRkX3BvcnQoc3RydWN0IGRldmljZSAqaG9zdCxcXG5kcml2ZXJzL2N4bC9jeGwuaC03MzAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZSAqdXBvcnRfZGV2LFxcbi0tXFxuZHJpdmVycy9jeGwvcG9ydC5jPTI4Nj1pbnQgZGV2bV9jeGxfYWRkX2VuZHBvaW50KHN0cnVjdCBkZXZpY2UgKmhvc3QsIHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZCxcXG4tLVxcbmRyaXZlcnMvY3hsL3BvcnQuYy0zMDUtXFx0LyogTm90ZTogZW5kcG9pbnQgcG9ydCBjb21wb25lbnQgcmVnaXN0ZXJzIGFyZSBkZXJpdmVkIGZyb20gQGN4bGRzICovXFxuZHJpdmVycy9jeGwvcG9ydC5jOjMwNjpcXHRlbmRwb2ludCA9IGRldm1fY3hsX2FkZF9wb3J0KGhvc3QsIFxcdTAwMjZjeGxtZC1cXHUwMDNlZGV2LCBDWExfUkVTT1VSQ0VfTk9ORSxcXG5kcml2ZXJzL2N4bC9wb3J0LmMtMzA3LVxcdFxcdFxcdFxcdCAgICAgcGFyZW50X2Rwb3J0KTtcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwuYz03MTg9c3RydWN0IGRmbF9mZWF0dXJlX2luZm8ge1xcbi0tXFxuZHJpdmVycy9mcGdhL2RmbC5jLTczMC1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmM6NzMxOnN0YXRpYyB2b2lkIGRmbF9mcGdhX2NkZXZfYWRkX3BvcnRfZGF0YShzdHJ1Y3QgZGZsX2ZwZ2FfY2RldiAqY2RldixcXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtNzMyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZmxfZmVhdHVyZV9kZXZfZGF0YSAqZmRhdGEpXFxuLS1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmM9OTIyPXN0YXRpYyBpbnQgYnVpbGRfaW5mb19jb21taXRfZGV2KHN0cnVjdCBidWlsZF9mZWF0dXJlX2RldnNfaW5mbyAqYmluZm8pXFxuLS1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtOTM1LVxcdGlmIChiaW5mby1cXHUwMDNldHlwZSA9PSBQT1JUX0lEKVxcbmRyaXZlcnMvZnBnYS9kZmwuYzo5MzY6XFx0XFx0ZGZsX2ZwZ2FfY2Rldl9hZGRfcG9ydF9kYXRhKGJpbmZvLVxcdTAwM2VjZGV2LCBmZGF0YSk7XFxuZHJpdmVycy9mcGdhL2RmbC5jLTkzNy1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jPTQ2OT1zdGF0aWMgdm9pZCBkd2FwYl9jb25maWd1cmVfaXJxcyhzdHJ1Y3QgZHdhcGJfZ3BpbyAqZ3BpbyxcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMtNTI2LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmM6NTI3OnN0YXRpYyBpbnQgZHdhcGJfZ3Bpb19hZGRfcG9ydChzdHJ1Y3QgZHdhcGJfZ3BpbyAqZ3BpbyxcXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTUyOC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGR3YXBiX3BvcnRfcHJvcGVydHkgKnBwLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYz03MzI9c3RhdGljIGludCBkd2FwYl9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTc2NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ3Bpby1cXHUwMDNlbnJfcG9ydHM7IGkrKykge1xcbmRyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmM6NzY2OlxcdFxcdGVyciA9IGR3YXBiX2dwaW9fYWRkX3BvcnQoZ3BpbywgXFx1MDAyNnBkYXRhLVxcdTAwM2Vwcm9wZXJ0aWVzW2ldLCBpKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jLTc2Ny1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jPTIzMTc9c3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKlxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYzoyMzE4OmRybV9kcF9tc3RfYWRkX3BvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldixcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjMxOS1cXHRcXHQgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM9MjM1MD1kcm1fZHBfbXN0X2hhbmRsZV9saW5rX2FkZHJlc3NfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM2Mi1cXHRpZiAoIXBvcnQpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6MjM2MzpcXHRcXHRwb3J0ID0gZHJtX2RwX21zdF9hZGRfcG9ydChkZXYsIG1nciwgbXN0YixcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM2NC1cXHRcXHRcXHRcXHRcXHQgICBwb3J0X21zZy1cXHUwMDNlcG9ydF9udW1iZXIpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTIzNzQtXFx0XFx0ZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6MjM3NTpcXHRcXHRwb3J0ID0gZHJtX2RwX21zdF9hZGRfcG9ydChkZXYsIG1nciwgbXN0YixcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtMjM3Ni1cXHRcXHRcXHRcXHRcXHQgICBwb3J0X21zZy1cXHUwMDNlcG9ydF9udW1iZXIpO1xcbi0tXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jPTE1MT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoc3NpX3NzdF9kaXZfZm9wcywgc3NpX2Rpdl9nZXQsIHNzaV9kaXZfc2V0LCBcXFwiJWxsdVxcXFxuXFxcIik7XFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jLTE1Mi1cXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM6MTUzOnN0YXRpYyB2b2lkIHNzaV9kZWJ1Z19hZGRfcG9ydChzdHJ1Y3Qgb21hcF9zc2lfcG9ydCAqb21hcF9wb3J0LFxcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYy0xNTQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkaXIpXFxuLS1cXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmM9MTEwNj1zdGF0aWMgaW50IHNzaV9wb3J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkKVxcbi0tXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jLTEyMDAtI2lmZGVmIENPTkZJR19ERUJVR19GU1xcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYzoxMjAxOlxcdHNzaV9kZWJ1Z19hZGRfcG9ydChvbWFwX3BvcnQsIG9tYXBfc3NpLVxcdTAwM2VkaXIpO1xcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYy0xMjAyLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM9MjQwNj1pbnQgaXJkbWFfYWxsb2NfbG9jYWxfbWFjX2VudHJ5KHN0cnVjdCBpcmRtYV9wY2lfZiAqcmYsIHUxNiAqbWFjX3RibF9pZHgpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDM0LSAqIEBhY2NlbF9sb2NhbF9wb3J0OiBwb3J0IGZvciBhcGJ2dFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0MzU6ICogQGFkZF9wb3J0OiBhZGQgb3JkZWxldGUgcG9ydFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0MzYtICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM9MjQzNz1zdGF0aWMgaW50IGlyZG1hX2NxcF9tYW5hZ2VfYXBidnRfY21kKHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2LFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0Mzg6XFx0XFx0XFx0XFx0ICAgICAgdTE2IGFjY2VsX2xvY2FsX3BvcnQsIGJvb2wgYWRkX3BvcnQpXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQzOS17XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDQ0LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jOjI0NDU6XFx0Y3FwX3JlcXVlc3QgPSBpcmRtYV9hbGxvY19hbmRfZ2V0X2NxcF9yZXF1ZXN0KFxcdTAwMjZpd2Rldi1cXHUwMDNlcmYtXFx1MDAzZWNxcCwgYWRkX3BvcnQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NDYtXFx0aWYgKCFjcXBfcmVxdWVzdClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTAtXFx0aW5mbyA9IFxcdTAwMjZjcXBfaW5mby1cXHUwMDNlaW4udS5tYW5hZ2VfYXBidnRfZW50cnkuaW5mbztcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYzoyNDUxOlxcdGluZm8tXFx1MDAzZWFkZCA9IGFkZF9wb3J0O1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9ody5jLTI0NTItXFx0aW5mby1cXHUwMDNlcG9ydCA9IGFjY2VsX2xvY2FsX3BvcnQ7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaHcuYy0yNDU3LVxcdGliZGV2X2RiZyhcXHUwMDI2aXdkZXYtXFx1MDAzZWliZGV2LCBcXFwiREVWOiAlczogcG9ydD0weCUwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmM6MjQ1ODpcXHRcXHQgICghYWRkX3BvcnQpID8gXFxcIkRFTEVURVxcXCIgOiBcXFwiQUREXFxcIiwgYWNjZWxfbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2h3LmMtMjQ1OS1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9MjE1PXZvaWQgZGVsX3N5c2ZzX3BvcnRfbWNnX2F0dHIoc3RydWN0IG1seDRfaWJfZGV2ICpkZXZpY2UsIGludCBwb3J0X251bSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMjIyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6MjIzOnN0YXRpYyBpbnQgYWRkX3BvcnRfZW50cmllcyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldmljZSwgaW50IHBvcnRfbnVtKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMjI0LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMzQ5LWVycjpcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjM1MDpcXHRwcl9lcnIoXFxcImFkZF9wb3J0X2VudHJpZXMgRkFJTEVEOiBmb3IgcG9ydDolZCwgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMtMzUxLVxcdCAgICAgICBwb3J0X251bSwgcmV0KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM9NjExPXN0YXRpYyB2b2lkIHJlbW92ZV92Zl9zbWlfZW50cmllcyhzdHJ1Y3QgbWx4NF9wb3J0ICpwKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy02MjItXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYzo2MjM6c3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgaW50IHBvcnRfbnVtLCBpbnQgc2xhdmUpXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy02MjQte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYz03MDE9c3RhdGljIGludCByZWdpc3Rlcl9vbmVfcGtleV90cmVlKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBpbnQgc2xhdmUpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTczNS1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jOjczNjpcXHRcXHRlcnIgPSBhZGRfcG9ydChkZXYsIHBvcnQsIHNsYXZlKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTczNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYz04MDY9aW50IG1seDRfaWJfZGV2aWNlX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYy04MjctXFx0cmRtYV9mb3JfZWFjaF9wb3J0KFxcdTAwMjZkZXYtXFx1MDAzZWliX2RldiwgaSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmM6ODI4OlxcdFxcdHJldCA9IGFkZF9wb3J0X2VudHJpZXMoZGV2LCBpKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jLTgyOS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jPTI1OT1zdGF0aWMgc3RydWN0IG9jcmRtYV9kZXYgKm9jcmRtYV9hZGQoc3RydWN0IGJlX2Rldl9pbmZvICpkZXZfaW5mbylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX21haW4uYy0yOTUtXFx0LyogSW5pdCBzdGF0cyAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX21haW4uYzoyOTY6XFx0b2NyZG1hX2FkZF9wb3J0X3N0YXRzKGRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jLTI5Ny1cXHQvKiBJbnRlcnJ1cHQgTW9kZXJhdGlvbiAqL1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuYz03NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NyZG1hX2RiZ19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5jLTc1Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5jOjc1ODp2b2lkIG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3N0YXRzLmMtNzU5LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3N0YXRzLmg9NzA9dm9pZCBvY3JkbWFfcmVtX3BvcnRfc3RhdHMoc3RydWN0IG9jcmRtYV9kZXYgKmRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc3RhdHMuaDo3MTp2b2lkIG9jcmRtYV9hZGRfcG9ydF9zdGF0cyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9zdGF0cy5oLTcyLXZvaWQgb2NyZG1hX3BtYV9jb3VudGVycyhzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2LCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTI1Nzc9c3RhdGljIGludCBpcG9pYl9pbnRlcmNlcHRfZGV2X2lkX2F0dHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTI1ODItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MjU4MzpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwb2liX2FkZF9wb3J0KGNvbnN0IGNoYXIgKmZvcm1hdCxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yNTg0LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWJfZGV2aWNlICpoY2EsIHUzMiBwb3J0KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjY2MD1zdGF0aWMgaW50IGlwb2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjY3Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyNjc3OlxcdFxcdGRldiA9IGlwb2liX2FkZF9wb3J0KFxcXCJpYiVkXFxcIiwgZGV2aWNlLCBwKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yNjc4LVxcdFxcdGlmICghSVNfRVJSKGRldikpIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTM5Njg9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzk3NC1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYzozOTc1OnN0YXRpYyBzdHJ1Y3Qgc3JwX2hvc3QgKnNycF9hZGRfcG9ydChzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2aWNlLCB1MzIgcG9ydClcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zOTc2LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTQwMTk9c3RhdGljIGludCBzcnBfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy00MDg4LVxcdHJkbWFfZm9yX2VhY2hfcG9ydCAoZGV2aWNlLCBwKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM6NDA4OTpcXHRcXHRob3N0ID0gc3JwX2FkZF9wb3J0KHNycF9kZXYsIHApO1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTQwOTAtXFx0XFx0aWYgKGhvc3QpXFxuLS1cXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmM9NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBnYW1lcG9ydF9idXM7XFxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTQzLVxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzo0NDpzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTtcXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNDUtc3RhdGljIHZvaWQgZ2FtZXBvcnRfYXR0YWNoX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jPTMxOT1zdGF0aWMgdm9pZCBnYW1lcG9ydF9oYW5kbGVfZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYy0zMzUtXFx0XFx0Y2FzZSBHQU1FUE9SVF9SRUdJU1RFUl9QT1JUOlxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzozMzY6XFx0XFx0XFx0Z2FtZXBvcnRfYWRkX3BvcnQoZXZlbnQtXFx1MDAzZW9iamVjdCk7XFxuZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jLTMzNy1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYz01NTU9c3RhdGljIHZvaWQgZ2FtZXBvcnRfaW5pdF9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNTc5LSAqL1xcbmRyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYzo1ODA6c3RhdGljIHZvaWQgZ2FtZXBvcnRfYWRkX3BvcnQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydClcXG5kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMtNTgxLXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zMj1zdGF0aWMgTElTVF9IRUFEKHNlcmlvX2xpc3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zMy1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzQ6c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1LXN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MTg2PXN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTk2LVxcdFxcdGNhc2UgU0VSSU9fUkVHSVNURVJfUE9SVDpcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MTk3OlxcdFxcdFxcdHNlcmlvX2FkZF9wb3J0KGV2ZW50LVxcdTAwM2VvYmplY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0xOTgtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NDY3PXN0YXRpYyB2b2lkIHNlcmlvX2luaXRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQ5NS0gKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDk2OnN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQ5Ny17XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTg1PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2Rpb191YXJ0X3RhYmxlX2xvY2spO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtODYtXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYzo4NzpzdGF0aWMgaW50IHNkaW9fdWFydF9hZGRfcG9ydChzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQpXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy04OC17XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTEwMTg9c3RhdGljIGludCBzZGlvX3VhcnRfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyxcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTA3NS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jOjEwNzY6XFx0cmV0ID0gc2Rpb191YXJ0X2FkZF9wb3J0KHBvcnQpO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTA3Ny1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM9NjcyPXN0YXRpYyB2b2lkIGxhbjkzMDNfYWxyX3NldF9lbnRyeShzdHJ1Y3QgbGFuOTMwMyAqY2hpcCwgY29uc3QgdTggKm1hYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy03MDEtLyogQWRkIHBvcnQgdG8gc3RhdGljIEFMUiBlbnRyeSwgY3JlYXRlIG5ldyBzdGF0aWMgZW50cnkgaWYgbmVlZGVkICovXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jOjcwMjpzdGF0aWMgaW50IGxhbjkzMDNfYWxyX2FkZF9wb3J0KHN0cnVjdCBsYW45MzAzICpjaGlwLCBjb25zdCB1OCAqbWFjLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtNzAzLVxcdFxcdFxcdFxcdGJvb2wgc3RwX292ZXJyaWRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTgyNz1zdGF0aWMgdm9pZCBsYW45MzAzX2JyaWRnZV9wb3J0cyhzdHJ1Y3QgbGFuOTMwMyAqY2hpcClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy04MzQtXFx0XFx0XFx0XFx0IGNoaXAtXFx1MDAzZXN3ZV9wb3J0X3N0YXRlKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6ODM1OlxcdGxhbjkzMDNfYWxyX2FkZF9wb3J0KGNoaXAsIGV0aF9zdHBfYWRkciwgMCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTgzNi19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM9MTIxMz1zdGF0aWMgaW50IGxhbjkzMDNfcG9ydF9mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtMTIyMC1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6MTIyMTpcXHRyZXR1cm4gbGFuOTMwM19hbHJfYWRkX3BvcnQoY2hpcCwgYWRkciwgcG9ydCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy0xMjIyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYz0xMjY3PXN0YXRpYyBpbnQgbGFuOTMwM19wb3J0X21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy0xMjc5LVxcdFxcdG1kYi1cXHUwMDNldmlkKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6MTI4MDpcXHRyZXR1cm4gbGFuOTMwM19hbHJfYWRkX3BvcnQoY2hpcCwgbWRiLVxcdTAwM2VhZGRyLCBwb3J0LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTEyODEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYz0xMDYyPXN0YXRpYyB2b2lkIGlkcGZfYWRkX2VtcHR5X3F1ZXVlX3N0YXRzKHU2NCAqKmRhdGEsIHUxNiBxdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTA3Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jOjEwNzg6ICogaWRwZl9hZGRfcG9ydF9zdGF0cyAtIENvcHkgcG9ydCBzdGF0cyBpbnRvIGV0aHRvb2wgYnVmZmVyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDc5LSAqIEB2cG9ydDogdmlydHVhbCBwb3J0IHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMDgxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM6MTA4MjpzdGF0aWMgdm9pZCBpZHBmX2FkZF9wb3J0X3N0YXRzKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwgdTY0ICoqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jLTEwODMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYz0xMjA0PXN0YXRpYyB2b2lkIGlkcGZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMtMTIyNy1cXHRpZHBmX2NvbGxlY3RfcXVldWVfc3RhdHModnBvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmM6MTIyODpcXHRpZHBmX2FkZF9wb3J0X3N0YXRzKHZwb3J0LCBcXHUwMDI2ZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYy0xMjI5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jPTI3MDU9c3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfc2hhcmVkX29mX3JlbW92ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI3MjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI3MjE6c3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfb2ZfYWRkX3BvcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMtMjcyMi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jPTI4MDg9c3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYy0yODI1LVxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChucCwgcG5wKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jOjI4MjY6XFx0XFx0cmV0ID0gbXY2NDN4eF9ldGhfc2hhcmVkX29mX2FkZF9wb3J0KHBkZXYsIHBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jLTI4MjctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYz01NDQzPXN0YXRpYyBpbnQgbWx4NWVfdnhsYW5fc2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHRhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01NDQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM6NTQ0ODpcXHRyZXR1cm4gbWx4NV92eGxhbl9hZGRfcG9ydChwcml2LVxcdTAwM2VtZGV2LVxcdTAwM2V2eGxhbiwgbnRvaHModGktXFx1MDAzZXBvcnQpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU0NDktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jPTQ3PXN0cnVjdCBtbHg1X3Z4bGFuX3BvcnQge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYzo1MjpzdGF0aWMgaW50IG1seDVfdnhsYW5fY29yZV9hZGRfcG9ydF9jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHUxNiBwb3J0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy01My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM9OTE9c3RhdGljIHN0cnVjdCBtbHg1X3Z4bGFuX3BvcnQgKnZ4bGFuX2xvb2t1cF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYzoxMDE6aW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jOjExMTpcXHRyZXQgPSBtbHg1X3Z4bGFuX2NvcmVfYWRkX3BvcnRfY21kKHZ4bGFuLVxcdTAwM2VtZGV2LCBwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmMtMTEyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYz0xNDc9c3RydWN0IG1seDVfdnhsYW4gKm1seDVfdnhsYW5fY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5jLTE2Mi1cXHQvKiBIYXJkd2FyZSBhZGRzIDQ3ODkgKElBTkFfVlhMQU5fVURQX1BPUlQpIGJ5IGRlZmF1bHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmM6MTYzOlxcdG1seDVfdnhsYW5fYWRkX3BvcnQodnhsYW4sIElBTkFfVlhMQU5fVURQX1BPUlQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uYy0xNjQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmg9NTU9dm9pZCBtbHg1X3Z4bGFuX2Rlc3Ryb3koc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3Z4bGFuLmg6NTY6aW50IG1seDVfdnhsYW5fYWRkX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oLTU3LWludCBtbHg1X3Z4bGFuX2RlbF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X3Z4bGFuX2Rlc3Ryb3koc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuKSB7IHJldHVybjsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdnhsYW4uaDo2NDpzdGF0aWMgaW5saW5lIGludCBtbHg1X3Z4bGFuX2FkZF9wb3J0KHN0cnVjdCBtbHg1X3Z4bGFuICp2eGxhbiwgdTE2IHBvcnQpIHsgcmV0dXJuIC1FT1BOT1RTVVBQOyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi92eGxhbi5oLTY1LXN0YXRpYyBpbmxpbmUgaW50IG1seDVfdnhsYW5fZGVsX3BvcnQoc3RydWN0IG1seDVfdnhsYW4gKnZ4bGFuLCB1MTYgcG9ydCkgeyByZXR1cm4gLUVPUE5PVFNVUFA7IH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oPTEyNzE9TUxYU1dfSVRFTTMyX0lOREVYRUQocmVnLCBzbGRyLCBzeXN0ZW1fcG9ydCwgMHgwOCwgMCwgMTYsIDQsIDAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9yZWcuaC0xMjcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3JlZy5oOjEyNzM6c3RhdGljIGlubGluZSB2b2lkIG1seHN3X3JlZ19zbGRyX2xhZ19hZGRfcG9ydF9wYWNrKGNoYXIgKnBheWxvYWQsIHU4IGxhZ19pZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9yZWcuaC0xMjc0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MTYgbG9jYWxfcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9NDQ0OT1zdGF0aWMgaW50IG1seHN3X3NwX2xhZ19kaXN0X3BvcnRfYWRkKHN0cnVjdCBtbHhzd19zcF9wb3J0ICptbHhzd19zcF9wb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy00NDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM6NDQ1NTpcXHRtbHhzd19yZWdfc2xkcl9sYWdfYWRkX3BvcnRfcGFjayhzbGRyX3BsLCBsYWdfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy00NDU2LVxcdFxcdFxcdFxcdFxcdCBtbHhzd19zcF9wb3J0LVxcdTAwM2Vsb2NhbF9wb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jPTEzMz1zdGF0aWMgdm9pZCBlZnhfZGV2bGlua19kZWxfcG9ydChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbF9wb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtMTM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jOjE0MDpzdGF0aWMgaW50IGVmeF9kZXZsaW5rX2FkZF9wb3J0KHN0cnVjdCBlZnhfbmljICplZngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9kZXZsaW5rLmMtMTQxLVxcdFxcdFxcdFxcdHN0cnVjdCBtYWVfbXBvcnRfZGVzYyAqbXBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2RldmxpbmsuYz02MzY9c3RhdGljIHN0cnVjdCBkZXZsaW5rX3BvcnQgKmVmMTAwX3NldF9kZXZsaW5rX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTMyIGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfZGV2bGluay5jLTY2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2RldmxpbmsuYzo2NjY6XFx0cmMgPSBlZnhfZGV2bGlua19hZGRfcG9ydChlZngsIG1wb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2RldmxpbmsuYy02NjctXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz01MDA9c3RhdGljIGludCB0Y19hZGRfaXA0X2Zsb3coc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjUzNTpzdGF0aWMgaW50IHRjX2FkZF9wb3J0c19mbG93KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy01MzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9NjAyPXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtNjA3LVxcdHsgLmZuID0gdGNfYWRkX2lwNF9mbG93IH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6NjA4OlxcdHsgLmZuID0gdGNfYWRkX3BvcnRzX2Zsb3cgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy02MDktfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTYyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MzAtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjMxOnN0YXRpYyBpbnQgcGh5X2FkZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MzIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTUtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjk2OlxcdHJldCA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY5Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNDI4PXN0YXRpYyBpbnQgcGh5X2RlZmF1bHRfc2V0dXBfc2luZ2xlX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzQ1Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM0NTg6XFx0cGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNDU5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNDYzPXN0YXRpYyBpbnQgb2ZfcGh5X3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM0OTEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNDkyOlxcdFxcdGVyciA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzQ5My1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwNj1zdGF0aWMgdm9pZCBfX3RlYW1fb3B0aW9uX2luc3RfZGVsX3BvcnQoc3RydWN0IHRlYW0gKnRlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxNy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxODpzdGF0aWMgaW50IF9fdGVhbV9vcHRpb25faW5zdF9hZGRfcG9ydChzdHJ1Y3QgdGVhbSAqdGVhbSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIxMj1zdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTMzOC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjEzMzk6XFx0ZXJyID0gX190ZWFtX29wdGlvbl9pbnN0X2FkZF9wb3J0KHRlYW0sIHBvcnQpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTM0MC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0zMTY9aW50IG52bWV0X2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMzUyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjM1MzpcXHRyZXQgPSBvcHMtXFx1MDAzZWFkZF9wb3J0KHBvcnQpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTM1NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jPTI4NjM9c3RhdGljIGludFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYzoyODY0Om52bWV0X2ZjX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYy0yODY1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmMuYz0yOTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZXRfZmNfdGd0X2ZjcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2ZjLmMtMjk5NC1cXHQubXNkYmRcXHRcXHRcXHQ9IDEsXFxuZHJpdmVycy9udm1lL3RhcmdldC9mYy5jOjI5OTU6XFx0LmFkZF9wb3J0XFx0XFx0PSBudm1ldF9mY19hZGRfcG9ydCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2ZjLmMtMjk5Ni1cXHQucmVtb3ZlX3BvcnRcXHRcXHQ9IG52bWV0X2ZjX3JlbW92ZV9wb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM9NTUyPXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX2xvb3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjQ4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjY0OTpzdGF0aWMgaW50IG52bWVfbG9vcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy02NTAte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM9NjcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMgbnZtZV9sb29wX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTY3NC1cXHQudHlwZVxcdFxcdD0gTlZNRl9UUlRZUEVfTE9PUCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYzo2NzU6XFx0LmFkZF9wb3J0XFx0PSBudm1lX2xvb3BfYWRkX3BvcnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNjc2LVxcdC5yZW1vdmVfcG9ydFxcdD0gbnZtZV9sb29wX3JlbW92ZV9wb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTQxMT1zdHJ1Y3QgbnZtZXRfZmFicmljc19vcHMge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTQxOC1cXHR2b2lkICgqcXVldWVfcmVzcG9uc2UpKHN0cnVjdCBudm1ldF9yZXEgKnJlcSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oOjQxOTpcXHRpbnQgKCphZGRfcG9ydCkoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC00MjAtXFx0dm9pZCAoKnJlbW92ZV9wb3J0KShzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3BjaS1lcGYuYz0xMTkyPXN0YXRpYyB2b2lkIG52bWV0X3BjaV9lcGZfZHJhaW5fcXVldWUoc3RydWN0IG52bWV0X3BjaV9lcGZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9wY2ktZXBmLmMtMTIwNi1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MjIuMjU4MDMwMTQ3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTE5NjcwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTlZNZS1vRiBUYXJnZXQ6IEVudHJ5IFBvaW50IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIE5WTWUtb0YgdGFyZ2V0IHNpZGUsIGFuZCBpdCBzZWVtcyBsaWtlIGBudm1ldF9lbmFibGVfcG9ydGAgY291bGQgYmUgYSBwcm9taXNpbmcgZW50cnkgcG9pbnQuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBwb3J0IG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgbnZtZXRfZW5hYmxlX3BvcnRgIGRpcmVjdGx5IGNhbGxzIGBvcHMtXHUwMDNlYWRkX3BvcnQocG9ydClgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYG52bWV0X2VuYWJsZV9wb3J0YCBpcyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyBuZXcgcG9ydCBhZGRpdGlvbnMgdG8gdGhlIHN1YnN5c3RlbS4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19hbnlfc3RvcmVgIGFuZCBgbnZtZXRfcG9ydF9zdWJzeXNfc3RvcmVgLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgdGhhdCBpdCdzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgcG9ydCBicmluZy11cCBwcm9jZXNzLiBHaXZlbiB0aGVzZSBjYWxsIHBhdGhzIGFuZCB0aGUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYG9wcy1cdTAwM2VhZGRfcG9ydGAsIEkgdGhpbmsgZGlnZ2luZyBpbnRvIGBudm1ldF9lbmFibGVfcG9ydGAgd2lsbCBiZSB0aW1lIHdlbGwgc3BlbnQgaW4gbXkgZnV6emluZyBjYW1wYWlnbi4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGl0cyBpbnRlcm5hbHMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtYWxmb3JtZWQgcG9ydCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjoyNS43NzAwMDEyOTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjUxODcyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZXRfZW5hYmxlX3BvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTEwNTQ9c3RhdGljIGludCBudm1ldF9wb3J0X3N1YnN5c19hbGxvd19saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTEwNzktXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnBvcnQtXFx1MDAzZXN1YnN5c3RlbXMpKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjEwODA6XFx0XFx0cmV0ID0gbnZtZXRfZW5hYmxlX3BvcnQocG9ydCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTEwODEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTMwND12b2lkIG52bWV0X3BvcnRfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LCBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zMTUtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MzE2OmludCBudm1ldF9lbmFibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0zMTcte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTY0Nz12b2lkIG52bWV0X3BvcnRfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTY0OS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NjUwOmludCBudm1ldF9lbmFibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTY1MS12b2lkIG52bWV0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjI3Ljk5NTE5Njk0M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY1NDE3NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBOVk1lLW9GIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5WTWUtb0YgZHJpdmVyIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBwb3J0IGFuZCBjb250cm9sbGVyIGNyZWF0aW9uIHBhdGhzLiBJIHNlZSB0aGF0IGBudm1ldF9lbmFibGVfcG9ydGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGVuYWJsaW5nIGEgbmV3IHBvcnQuIFRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBpdCBzZWVtcyB0byBkZWxlZ2F0ZSB0byBgYWRkX3BvcnRgIGludGVybmFsbHkuIEZyb20gdGhlIGhvc3Qgc2lkZSwgSSdtIG5vdGluZyB0aGF0IGBudm1mX2Rldl93cml0ZWAgc2VlbXMgbGlrZSB0aGUgaW5pdGlhbCBob29rIGZvciBjcmVhdGluZyBhIGNvbnRyb2xsZXIuIE5vdyBJJ20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBob3N0IHNpZGUuIExvb2tzIGxpa2UgYG52bWZfY3JlYXRlX2N0cmxgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhhdCBpdCBjYWxscyBgY3JlYXRlX2N0cmxgIHRvIGZpbmlzaCBpdHMgdGFzay4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZXNlIGZ1bmN0aW9uIG5hbWVzIGFuZCBsb29rIGludG8gd2hhdCdzIGJlaW5nIHBhc3NlZCBhcm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTYwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6MzEuNzYwNjE3ODE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNTY5NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWZfY3JlYXRlX2N0cmxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzMDc9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKlxcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYzoxMzA4Om52bWZfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYpXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzMDkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzODU9c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDUtXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjE0MDY6XFx0Y3RybCA9IG52bWZfY3JlYXRlX2N0cmwobnZtZl9kZXZpY2UsIGJ1Zik7XFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTE0MDctXFx0aWYgKElTX0VSUihjdHJsKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjozNC4wMTQxOTE2NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0OTI0OTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgTlZNZS9mIFdyaXRlIFBhdGgqKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbnZtZl9kZXZfd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmcm9tIHRoZSBob3N0IHNpZGUgZm9yIHdyaXRpbmcgZGF0YSB0byB0aGUgTlZNZSBkZXZpY2Ugb3ZlciBOVk1lLW9GLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQsIHRoYXQgZnVuY3Rpb24gbmFtZSAtIGBudm1mX2Rldl93cml0ZWAgLSBzZWVtcyB0byBzdWdnZXN0IGl0J3MgbW9yZSBvZiBhIGZpbGUgb3BlcmF0aW9uLiBUaGF0J3MgYSBsaXR0bGUgc3VycHJpc2luZyBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBOVk1lIHRyYW5zcG9ydCBwcm90b2NvbC4gSG1tLCBpcyB0aGVyZSBhbnkgb3RoZXIgcG9zc2libGUgZW50cnkgcG9pbnQgaW50byB0aGlzIHN5c3RlbT8gSSByZWNhbGwgYG52bWZfY3JlYXRlX2N0cmxgIGZyb20gdGhlIE5WTWUgbmFtZXNwYWNlIGNyZWF0aW9uLCBidXQgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdCdzIG5vdCB0aGUgZW50cnkuIFdlbGwsIGBudm1mX2Rldl93cml0ZWAgaXMgYWxzbyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBHdWVzcyBJIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBmdW5jdGlvbiwgYG52bWZfZGV2X3dyaXRlYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MjozNy4yNjM0NDU0MDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk3NTExMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZl9kZXZfd3JpdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jPTEzODM9c3RhdGljIERFRklORV9NVVRFWChudm1mX2Rldl9tdXRleCk7XFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jLTEzODQtXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjEzODU6c3RhdGljIHNzaXplX3QgbnZtZl9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xMzg2LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmM9MTQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudm1mX2Rldl9mb3BzID0ge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2ZhYnJpY3MuYy0xNDgwLVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5jOjE0ODE6XFx0LndyaXRlXFx0XFx0PSBudm1mX2Rldl93cml0ZSxcXG5kcml2ZXJzL252bWUvaG9zdC9mYWJyaWNzLmMtMTQ4Mi1cXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjM5LjM3MzIwMjE2MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzMDA1ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyJ3MgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE5WTWUgZHJpdmVyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSGV5LCBpZiBgbnZtZl9kZXZfd3JpdGVgIGlzICpzdGF0aWMqLCB3ZSBzaG91bGQganVzdCBiZSBvbiB0aGUgbG9va291dCBmb3IgYSBub24tc3RhdGljIG9uZSwgcmlnaHQ/XCIuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnkgcG9pbnRzLiBUaGF0J3MgdGhlIHByaW9yaXR5LlxuXG5TbywgdGhlIHNpdHVhdGlvbiBpczogaWYgdGhlIG9ubHkgd2F5IGluIGlzIHRocm91Z2ggdGhpcyBgc3RhdGljYCBmdW5jdGlvbiwgdGhlbiB0aGUgKm9ubHkqIGNob2ljZXMgYXJlIHRvIHVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5LCBvciB0byBtb3ZlIHRvIHVzaW5nIHN5c2NhbGxzIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUuXG5cbkFuZCB0aGVuIEkgcmVhbGl6ZSwgaGV5LCB3YWl0LCBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzLCBpbiBmYWN0LCAqc3RhdGljKiEgVGhhdCdzIGEgcG9pbnQuXG5cblNvIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpczogSSByZWFsbHkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIGNoZWNrIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AsIGFuZCBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGF0IGZpbGUgYXQgYWxsLiBUaGF0IHdpbGwgbGVhZCB0aGUgd2F5IHRvIG15IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDIxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjQzLjMxNjIxMDA0OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk1MTYwMTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUyOjQzLjQxNTczODY2MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTEyNjY2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5WTWUgVENQIERyaXZlciBTeW1ib2wgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBOVk1lIFRDUCBkcml2ZXIgY29kZSwgYW5kIG15IGluaXRpYWwgc2VhcmNoIGluIGBkcml2ZXJzL252bWUvaG9zdC90Y3AuY2AgdHVybmVkIHVwIGVtcHR5IOKAkyBubyBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0J3MgYSBiaXQgdW51c3VhbCwgdXN1YWxseSB0aGUgaG9zdCBzaWRlIGhhcyBzb21ldGhpbmcuIEd1ZXNzIHRoZSBhY3Rpb24gbWlnaHQgYmUgaW4gdGhlIHRhcmdldCBzaWRlIGltcGxlbWVudGF0aW9uLiBJJ2xsIHN3aXRjaCBteSBmb2N1cyBvdmVyIHRvIGBkcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jYCBhbmQgc3RhcnQgbXkgZGVlcCBkaXZlIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBvdGhlciBoYWxmIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1Mjo0NS45Mjg0MDgwNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNTA4MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTI6NDYuMDA0NDY0ODc5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzIxNjY0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbm8gbHVjayBmaW5kaW5nIHRob3NlIHN5bWJvbHMgZXhwb3J0ZWQgaW4gdGhlIG9idmlvdXMgcGxhY2VzLiBUaGF0IG1lYW5zIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgc3RhdGljIGZ1bmN0aW9ucywgb3IgcGVyaGFwcyBsZXZlcmFnZSB0aGUgbW9yZSBnZW5lcmFsIE5WTWUgZnVuY3Rpb25zLiBJIHRoaW5rIGBudm1mX2Rldl93cml0ZWAgYW5kIGBudm1ldF9lbmFibGVfcG9ydGAgY291bGQgYmUgcHJvbWlzaW5nIOKAkyBlc3BlY2lhbGx5IGBudm1ldF9lbmFibGVfcG9ydGAsIHNpbmNlIHRoYXQgKmlzbid0KiBzdGF0aWMuIEhtbSwgaGFuZyBvbi4uLiBpcyBgbnZtZXRfZW5hYmxlX3BvcnRgIGFjdHVhbGx5IGV4cG9ydGVkPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGl0cyBleHBvcnQgc3RhdHVzOyBJJ2xsIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MjYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1Mjo0OS4xMzY2MzQ2OTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mjk2MDI2ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm52bWV0X2VuYWJsZV9wb3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1Mjo1MS41NjYyNDczNDlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTkyMTg2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRDUCBOVk1lIFRhcmdldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgTlZNZSBUQ1AgdGFyZ2V0IGFuZCB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGluZ3MgYWNjb3JkaW5nIHRvIHRoZSBwcmluY2lwbGUgb2YgdXNpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHdoZXJlIHBvc3NpYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGRpcmVjdGx5LCBhdm9pZGluZyB0aGUgZnV6emluZyB0aGF0IHdvdWxkIGNvbWUgd2l0aCBgbnZtZl9kZXZfd3JpdGVgLiBUaGVuLCBJIHdhbnRlZCB0byBjb21iaW5lIGl0IHdpdGggYG52bWV0X3RjcF9hZGRfcG9ydGAgYW5kIGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgLiBCdXQgdGhlbiBJIGhhZCB0byByZW1lbWJlciB0aGF0IGBudm1ldF90Y3Bfc2V0X3F1ZXVlX3NvY2tgICppcyogc3RhdGljLiBMZXQgbWUgc2VlLCBgbnZtZXRfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5YCBpcyBhIHNvY2tldCBjYWxsYmFjaywgYW5kIGxldCdzIGdvIHdpdGggdGhlIHNpbXBsZXIgYXBwcm9hY2ggb2YgdXNpbmcgYG52bWVfdGNwX3NldHVwX2N0cmxgIGFuZCBgbnZtZXRfdGNwX2FkZF9wb3J0YC5cblxuTm93LCBsZXQncyByZXZpZXcgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50LiBUaGUgZ29hbCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJZiBhIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgY2FuJ3QgYmUgaW5saW5lZC4gU28gYG52bWVfdGNwX2NyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9hZGRfcG9ydGAgYXJlIGdvb2Qgc2luY2UgdGhleSdyZSBhc3NpZ25lZCB0byBgbnZtZV90Y3BfdHJhbnNwb3J0LmNyZWF0ZV9jdHJsYCBhbmQgYG52bWV0X3RjcF9vcHMuYWRkX3BvcnRgLCByZXNwZWN0aXZlbHkuIEJ1dCBgbnZtZV90Y3BfYWxsb2NfcXVldWVgIGFuZCBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCBhcmUgY2FsbGVkIGRpcmVjdGx5LCBub3QgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgc28gdGhleSBtaWdodCBiZSBpbmxpbmVkLlxuXG5MZXQncyB2ZXJpZnkgdGhhdCB0aGVzZSBvcHRpb25zIGFyZSBhcHByb3ByaWF0ZTpcbiogICBgbnZtZV90Y3BfY3JlYXRlX2N0cmxgIGlzIGFjdHVhbGx5IHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBTbyBpdCBzaG91bGQgbm90IGJlIGlubGluZWQuXG4qICAgYG52bWV0X3RjcF9hZGRfcG9ydGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIGl0IGFsc28gc2hvdWxkbid0IGJlIGlubGluZWQuXG5cbkdpdmVuIHRoYXQgYW5hbHlzaXMsIHdoYXQgb3RoZXIgb3B0aW9ucyBkbyB3ZSBoYXZlPyBUaGUgZ29hbCBpcyB0byBwcmVmZXIgdGhvc2UgZnVuY3Rpb25zLlxuXG5JIHRoaW5rIGBudm1ldF90Y3BfYWNjZXB0X3dvcmtgLCBzaW5jZSBpdCdzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCB3b24ndCBiZSBpbmxpbmVkIGVpdGhlci5cblxuU28sIGxldCdzIGZvY3VzIG9uOlxuXG4qICAgYG52bWVfdGNwX2NyZWF0ZV9jdHJsYFxuKiAgIGBudm1ldF90Y3BfYWRkX3BvcnRgXG4qICAgYG52bWV0X3RjcF9hY2NlcHRfd29ya2BcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXNlIHdvdWxkIGJlOlxuXG4qICAgYE5WTUVfVENQYFxuKiAgIGBOVk1FX1RBUkdFVF9UQ1BgXG4qICAgYElQVjZgXG5cbkknbSBkb3VibGUtY2hlY2tpbmcsIGJ1dCBgSVBWNmAgKmlzKiByZXF1aXJlZCBzaW5jZSB0aGUgY29kZSBwYXRoIGlzIG9ubHkgZW5hYmxlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi5cblxuRnVydGhlcm1vcmUsIGBOVk1FX1RBUkdFVGAgaXMgaW5kaXJlY3RseSByZXF1aXJlZCwgc2luY2UgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgTlZNRV9UQVJHRVRgLiBgTlZNRV9UQ1BgIGRlcGVuZHMgb24gYElORVRgIGFuZCBgQkxPQ0tgLiBBbmQgYE5WTUVfVEFSR0VUX1RDUGAgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBOVk1FX1RBUkdFVGAuIFNvLCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgYmVjb21lczpcblxuKiAgIGBOVk1FX1RDUGBcbiogICBgTlZNRV9UQVJHRVRgXG4qICAgYE5WTUVfVEFSR0VUX1RDUGBcbiogICBgSVBWNmBcblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBOVk1FX0NPUkVgIGlzbid0IHJlcXVpcmVkIGJ1dCBpdCdzIG5vdC4gSSd2ZSBnb3QgYSBzb2xpZCBwbGFuIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MDIuMjI1NDY4MTYxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBOVk1FX1RDUFxcbiAgODQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBUQ1AgaG9zdCBkcml2ZXJcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDg3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDg5OlxcdFxcdHNlbGVjdCBOVk1FX0ZBQlJJQ1NcXG4gIDkwOlxcdFxcdGhlbHBcXG4gIDkxOlxcdFxcdCAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTlZNZSBvdmVyIEZhYnJpY3MgcHJvdG9jb2wgdXNpbmdcXG4gIDkyOlxcdFxcdCAgdGhlIFRDUCB0cmFuc3BvcnQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHJlbW90ZSBibG9jayBkZXZpY2VzXFxuICA5MzpcXHRcXHQgIGV4cG9ydGVkIHVzaW5nIHRoZSBOVk1lIHByb3RvY29sIHNldC5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0ICBUbyBjb25maWd1cmUgYSBOVk1lIG92ZXIgRmFicmljcyBjb250cm9sbGVyIHVzZSB0aGUgbnZtZS1jbGkgdG9vbFxcbiAgOTY6XFx0XFx0ICBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC1udm1lL252bWUtY2xpLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MDIuMjI1NTI2OTYxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzOTUxNDcwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTWUvVENQIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCB3aGF0IGl0IG1lYW5zIGZvciBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBOVk1lIG92ZXIgVENQIGhvc3QgYW5kIHRhcmdldCBkcml2ZXJzIGNvbmZpZ3VyZSB0aGVpciBuZXR3b3JrIHNvY2tldHMsIHNwZWNpZmljYWxseSBieSBzd2l0Y2hpbmcgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgZm9yIHNldHRpbmcgc29ja2V0IG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgZXhhbWluYXRpb24sIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGFkZGl0aW9uIG9mIElQdjYgVENMQVNTIHN1cHBvcnQuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgdGhhdCBvdXIgZnV6emluZyBzdHJhdGVneSBuZWVkcyB0byBhZGFwdC5cblxuTGV0J3MgYmVnaW4gd2l0aCB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcy4gRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBOVk1lL1RDUCBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGVkOiBgTlZNRV9UQ1BgLCBgTlZNRV9UQVJHRVRgLCBgTlZNRV9UQVJHRVRfVENQYCwgYW5kIGBJUFY2YC4gR2l2ZW4gdGhhdCBgTlZNRV9GQUJSSUNTYCBpbXBsaWNpdGx5IHNlbGVjdHMgYE5WTUVfQ09SRWAsIEkgY2FuIHNraXAgZXhwbGljaXRseSBsaXN0aW5nIGBOVk1FX0NPUkVgLiBUaGUga2VybmVsIGNvbmZpZyBkZXBlbmRlbmNpZXMgd2VyZSBjcml0aWNhbCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9uIGluIGVudmlyb25tZW50cyB1dGlsaXppbmcgdGhlIFRDUCB0cmFuc3BvcnQsIHN1Y2ggYXMgdGhvc2UgdXRpbGl6aW5nIHZpcnR1YWxpemVkIGxvb3BiYWNrIG9yIHZldGggaW50ZXJmYWNlcy5cblxuTm93LCB3aGVyZSBkbyBJIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cz8gVGhlIHBhdGNoIGhpZ2hsaWdodHMgdGhlIGNydWNpYWwgYXJlYXMgb2YgY29udHJvbGxlciBjcmVhdGlvbiBhbmQgcG9ydCBhZGRpdGlvbiB3aGVyZSB0aGVzZSBzb2NrZXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZC4gVGhpcyBsZWFkcyBtZSB0byBwaW5wb2ludCB0aGUgZm9sbG93aW5nIGtleSBmdW5jdGlvbnM6IGBudm1lX3RjcF9jcmVhdGVfY3RybGAsIGBudm1ldF90Y3BfYWRkX3BvcnRgLCBhbmQgYG52bWV0X3RjcF9hY2NlcHRfd29ya2AuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBteSBhc3N1bXB0aW9ucyBvbiBgbnZtZXRfdGNwX2FjY2VwdF93b3JrYC4gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBpbmRlZWQgY2FsbCBgbnZtZXRfdGNwX2FsbG9jX3F1ZXVlYCBhbmQgdGhlbiBjYWxscyBgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrYCB3aGljaCBtZWFucyB0aGF0IHRoZSBzb2NrZXQgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aGVuIHVzaW5nIHRoaXMuIFNvIHllcywgdGhpcyBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgYW5kIGEgZ29vZCBlbnRyeSBwb2ludC5cblxuU2ltaWxhcmx5LCBJIHNob3VsZCBhbHNvIHZlcmlmeSB0aGF0IGBudm1lX3RjcF9jcmVhdGVfY3RybGAgaXMgYSBnb29kIGVudHJ5IHBvaW50LCB3aGljaCBjYWxscyBgbnZtZV90Y3Bfc2V0dXBfY3RybGAgd2hpY2ggY2FsbHMgYG52bWVfdGNwX2FsbG9jX2FkbWluX3F1ZXVlYCBhbmQgYG52bWVfdGNwX2FsbG9jX2lvX3F1ZXVlc2AsIHdoaWNoIGNhbGxzIGBudm1lX3RjcF9hbGxvY19xdWV1ZWAuIFl1cCwgdGhhdCBjb25maXJtcyBpdC5cblxuV2l0aCB0aGlzIGFuYWx5c2lzIGNvbXBsZXRlLCBpdCdzIHRpbWUgdG8gZmxhZyB0aGVzZSBmdW5jdGlvbiBjYWxscyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24gd2l0aGluIG15IGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBoYW5kbGluZywgZXJyb3IgcGF0aHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBzb2NrZXQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIElQdjYgVENMQVNTLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzOSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MzoxMC42MjA2NzYxNjhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ3NjQ3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgb3ZlciBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgdG8gdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGluc3RlYWQgb2YgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IHNvY2tldHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc29ja2V0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5WTWUgVENQIHRyYW5zcG9ydCwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wYmFjayBvciB2ZXRoIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb250cm9sbGVyIGNyZWF0aW9uIGFuZCBwb3J0IGFkZGl0aW9uIHBhdGhzIHdoZXJlIHRoZXNlIHNvY2tldCBvcHRpb25zIGFyZSBjb25maWd1cmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5WTUVfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV90Y3BfY3JlYXRlX2N0cmxcIixcbiAgICBcIm52bWV0X3RjcF9hZGRfcG9ydFwiLFxuICAgIFwibnZtZXRfdGNwX2FjY2VwdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgb3ZlciBUQ1AgaG9zdCBhbmQgdGFyZ2V0IGRyaXZlcnMgdG8gdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGZvciBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGluc3RlYWQgb2YgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IHNvY2tldHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc29ja2V0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIE5WTWUgVENQIHRyYW5zcG9ydCwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBsb29wYmFjayBvciB2ZXRoIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb250cm9sbGVyIGNyZWF0aW9uIGFuZCBwb3J0IGFkZGl0aW9uIHBhdGhzIHdoZXJlIHRoZXNlIHNvY2tldCBvcHRpb25zIGFyZSBjb25maWd1cmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMTo1MzoxMC43MzU0NDgyMjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQ2MDkwMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MTAuNzM2MjQ0MjcyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjQ1Mjg5MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxNzRkNmU0OTYxOGMyZjYzZTNjZDRkMjFkNmY4ODZlYTUzZDQwNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMTo1MDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLjY1N2FjYWU5ZTRhNDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0xNzc0LDYgKzE3NzQsNTYgQEAgc3RhdGljIGludCBudm1lX3RjcF9zdGFydF90bHMoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX25vX2xpbmdlcihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19MSU5HRVIsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2bGluZyksIHNpemVvZihsaW5nKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgaW50IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKmlmYWNlKVxuK3tcbitcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX1NPQ0tFVCxcbitcdFx0XHRcdCAgU09fQklORFRPREVWSUNFLCBLRVJORUxfU09DS1BUUihpZmFjZSksXG4rXHRcdFx0XHQgIHN0cmxlbihpZmFjZSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnZtZV90Y3Bfc29ja19zZXRfc3luY250KHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbit7XG4rXHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9UQ1AsIFRDUF9TWU5DTlQsXG4rXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKFx1MDAyNnZhbCksIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV90Y3Bfc29ja19zZXRfdG9zKHN0cnVjdCBzb2NrICpzaywgaW50IHRvcylcbit7XG4rXHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0ICAgS0VSTkVMX1NPQ0tQVFIoXHUwMDI2dG9zKSwgc2l6ZW9mKHRvcykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGNsYXNzKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4rXHRcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfSVBWNiwgSVBWNl9UQ0xBU1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLCBzaXplb2YodGNsYXNzKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZV90Y3BfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfY3RybCAqbmN0cmwsIGludCBxaWQsXG4gXHRcdFx0XHRrZXlfc2VyaWFsX3QgcHNraWQpXG4ge1xuQEAgLTE4MTksMjQgKzE4NjksMjYgQEAgc3RhdGljIGludCBudm1lX3RjcF9hbGxvY19xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpuY3RybCwgaW50IHFpZCxcbiAjZW5kaWZcbiBcbiBcdC8qIFNpbmdsZSBzeW4gcmV0cnkgKi9cbi1cdHRjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4rXHRudm1lX3RjcF9zb2NrX3NldF9zeW5jbnQocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgMSk7XG4gXG4gXHQvKiBTZXQgVENQIG5vIGRlbGF5ICovXG4tXHR0Y3Bfc29ja19zZXRfbm9kZWxheShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfc2V0X25vZGVsYXkocXVldWUtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4gXG4gXHQvKlxuIFx0ICogQ2xlYW51cCB3aGF0ZXZlciBpcyBzaXR0aW5nIGluIHRoZSBUQ1AgdHJhbnNtaXQgcXVldWUgb24gc29ja2V0XG4gXHQgKiBjbG9zZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgc2hvdWxkXG4gXHQgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGJlIHJlc3RvcmVkIGJlZm9yZSBUQ1AgdGltZXMgb3V0LlxuIFx0ICovXG4tXHRzb2NrX25vX2xpbmdlcihxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbitcdG52bWVfdGNwX3NvY2tfbm9fbGluZ2VyKHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWVfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbiBcbiBcdC8qIFNldCBzb2NrZXQgdHlwZSBvZiBzZXJ2aWNlICovXG4tXHRpZiAobmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MgXHUwMDNlPSAwKVxuLVx0XHRpcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNldG9zIFx1MDAzZT0gMCkge1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90b3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0XHRudm1lX3RjcF9zb2NrX3NldF90Y2xhc3MocXVldWUtXHUwMDNlc29jay1cdTAwM2VzaywgbmN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0b3MpO1xuK1x0fVxuIFxuIFx0LyogU2V0IDEwIHNlY29uZHMgdGltZW91dCBmb3IgaWNyZXNwIHJlY3Ztc2cgKi9cbiBcdHF1ZXVlLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2dGltZW8gPSAxMCAqIEhaO1xuQEAgLTE4NjQsMTAgKzE5MTYsOCBAQCBzdGF0aWMgaW50IG52bWVfdGNwX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLCBpbnQgcWlkLFxuIFxuIFx0aWYgKG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfSE9TVF9JRkFDRSkge1xuIFx0XHRjaGFyICppZmFjZSA9IG5jdHJsLVx1MDAzZW9wdHMtXHUwMDNlaG9zdF9pZmFjZTtcbi1cdFx0c29ja3B0cl90IG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGlmYWNlKTtcbiBcbi1cdFx0cmV0ID0gc29ja19zZXRzb2Nrb3B0KHF1ZXVlLVx1MDAzZXNvY2ssIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSxcbi1cdFx0XHRcdCAgICAgIG9wdHZhbCwgc3RybGVuKGlmYWNlKSk7XG4rXHRcdHJldCA9IG52bWVfdGNwX3NvY2tfc2V0X2JpbmR0b2RldmljZShxdWV1ZS1cdTAwM2Vzb2NrLVx1MDAzZXNrLCBpZmFjZSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKG5jdHJsLVx1MDAzZWRldmljZSxcbiBcdFx0XHQgIFwiZmFpbGVkIHRvIGJpbmQgdG8gaW50ZXJmYWNlICVzIHF1ZXVlICVkIGVyciAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXG5pbmRleCA3NWEyNzZkNzNiZTNlLi5kMzQyNDljZjM3NTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTE2OTYsMTAgKzE2OTYsNjIgQEAgc3RhdGljIHZvaWQgbnZtZXRfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGluZ2VyIGxpbmcgPSB7IC5sX29ub2ZmID0gMSwgLmxfbGluZ2VyID0gMCB9O1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZsaW5nKSwgc2l6ZW9mKGxpbmcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBzb2NrICpzaywgdTMyIHByaW9yaXR5KVxuK3tcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfU09DS0VULCBTT19QUklPUklUWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZwcmlvcml0eSksIHNpemVvZihwcmlvcml0eSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gU0tfQ0FOX1JFVVNFO1xuK1xuK1x0ZG9fc29ja19zZXRzb2Nrb3B0KHNrLVx1MDAzZXNrX3NvY2tldCwgZmFsc2UsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUixcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF9ub2RlbGF5KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRpbnQgdmFsID0gMTtcbitcbitcdGRvX3NvY2tfc2V0c29ja29wdChzay1cdTAwM2Vza19zb2NrZXQsIGZhbHNlLCBTT0xfVENQLCBUQ1BfTk9ERUxBWSxcbitcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ2YWwpLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IHRvcyA9IGluZXRfc2soc2spLVx1MDAzZXJjdl90b3M7XG4rXG4rXHRpZiAodG9zIFx1MDAzZSAwKVxuK1x0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQLCBJUF9UT1MsXG4rXHRcdFx0XHQgICBLRVJORUxfU09DS1BUUihcdTAwMjZ0b3MpLCBzaXplb2YodG9zKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWV0X3RjcF9zb2NrX3NldF90Y2xhc3Moc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbitcdFx0dTggdGNsYXNzID0gaXA2X3RjbGFzcyhpbmV0Nl9zayhzayktXHUwMDNlcmN2X2Zsb3dpbmZvKTtcbitcbitcdFx0aWYgKHRjbGFzcyBcdTAwM2UgMClcbitcdFx0XHRkb19zb2NrX3NldHNvY2tvcHQoc2stXHUwMDNlc2tfc29ja2V0LCBmYWxzZSwgU09MX0lQVjYsXG4rXHRcdFx0XHRcdCAgIElQVjZfVENMQVNTLCBLRVJORUxfU09DS1BUUihcdTAwMjZ0Y2xhc3MpLFxuK1x0XHRcdFx0XHQgICBzaXplb2YodGNsYXNzKSk7XG4rXHR9XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbnQgbnZtZXRfdGNwX3NldF9xdWV1ZV9zb2NrKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBxdWV1ZS1cdTAwM2Vzb2NrO1xuLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc29jay1cdTAwM2Vzayk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0ga2VybmVsX2dldHNvY2tuYW1lKHNvY2ssXG5AQCAtMTcxNywxNCArMTc2OSwxNCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9zZXRfcXVldWVfc29jayhzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSlcbiBcdCAqIGNsb3NlLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYmVpbmcgc2VudCBzaG91bGRcbiBcdCAqIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYmUgcmVzdG9yZWQgYmVmb3JlIFRDUCB0aW1lcyBvdXQuXG4gXHQgKi9cbi1cdHNvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfbm9fbGluZ2VyKHNvY2stXHUwMDNlc2spO1xuIFxuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4rXHRcdG52bWV0X3RjcF9zb2NrX3NldF9wcmlvcml0eShzb2NrLVx1MDAzZXNrLCBzb19wcmlvcml0eSk7XG4gXG4gXHQvKiBTZXQgc29ja2V0IHR5cGUgb2Ygc2VydmljZSAqL1xuLVx0aWYgKGluZXQtXHUwMDNlcmN2X3RvcyBcdTAwM2UgMClcbi1cdFx0aXBfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2ssIGluZXQtXHUwMDNlcmN2X3Rvcyk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfdG9zKHNvY2stXHUwMDNlc2spO1xuK1x0bnZtZXRfdGNwX3NvY2tfc2V0X3RjbGFzcyhzb2NrLVx1MDAzZXNrKTtcbiBcbiBcdHJldCA9IDA7XG4gXHR3cml0ZV9sb2NrX2JoKFx1MDAyNnNvY2stXHUwMDNlc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5AQCAtMjA5OCwxMCArMjE1MCwxMCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gcG9ydDtcbiBcdHBvcnQtXHUwMDNlZGF0YV9yZWFkeSA9IHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuIFx0cG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBudm1ldF90Y3BfbGlzdGVuX2RhdGFfcmVhZHk7XG4tXHRzb2NrX3NldF9yZXVzZWFkZHIocG9ydC1cdTAwM2Vzb2NrLVx1MDAzZXNrKTtcbi1cdHRjcF9zb2NrX3NldF9ub2RlbGF5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfcmV1c2VhZGRyKHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzayk7XG4rXHRudm1ldF90Y3Bfc29ja19zZXRfbm9kZWxheShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2spO1xuIFx0aWYgKHNvX3ByaW9yaXR5IFx1MDAzZSAwKVxuLVx0XHRzb2NrX3NldF9wcmlvcml0eShwb3J0LVx1MDAzZXNvY2stXHUwMDNlc2ssIHNvX3ByaW9yaXR5KTtcbitcdFx0bnZtZXRfdGNwX3NvY2tfc2V0X3ByaW9yaXR5KHBvcnQtXHUwMDNlc29jay1cdTAwM2Vzaywgc29fcHJpb3JpdHkpO1xuIFxuIFx0cmV0ID0ga2VybmVsX2JpbmQocG9ydC1cdTAwM2Vzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZwb3J0LVx1MDAzZWFkZHIsXG4gXHRcdFx0c2l6ZW9mKHBvcnQtXHUwMDNlYWRkcikpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDE6NTM6MTAuNzM2MjQ1ODIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjQ1MjU4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5WTWUgVENQIFNvY2tldCBPcHRpb24gV3JhcHBlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgZGlyZWN0IGNhbGxzIHRvIHRob3NlIHN0YW5kYXJkIGBzb2NrXypgIGZ1bmN0aW9ucyDigJMgYHNvY2tfbm9fbGluZ2VyYCwgYHRjcF9zb2NrX3NldF9zeW5jbnRgLCBhbmQgdGhlIGxpa2Ug4oCTIHdpdGggY3VzdG9tIHdyYXBwZXJzLiBUaGVzZSB3cmFwcGVycywgc3VjaCBhcyBgbnZtZV90Y3Bfc29ja19ub19saW5nZXJgLCBhcmUgdGhlbiB1c2luZyBgZG9fc29ja19zZXRzb2Nrb3B0YCB3aXRoIGBLRVJORUxfU09DS1BUUmAgdG8gYWN0dWFsbHkgc2V0IHRoZSBzb2NrZXQgb3B0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuIGBkb19zb2NrX3NldHNvY2tvcHRgIHRha2VzIGEgYHNvY2twdHJfdGAgY29uc3RydWN0ZWQgdmlhIGBLRVJORUxfU09DS1BUUmAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFyaWFibGVzIGJlaW5nIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEknbSBzZWVpbmcgbG9jYWwgdmFyaWFibGVzIGJlaW5nIHBhc3NlZCBpbiwgbGlrZSBgc3RydWN0IGxpbmdlciBsaW5nID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTtgLCBhbiBgaW50IHZhbCA9IDE7YCwgYW5kIHRoZSBvdGhlcnMuIEkgY2FuIGNvbmZpcm0gdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbkknbSB0aGlua2luZywgXCJJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0cyB3YXkgaW4gdGhlcmU/XCIgQnV0IGl0IGxvb2tzIGxpa2UgZXZlcnl0aGluZydzIGluaXRpYWxpemVkLiBgc3RydWN0IGxpbmdlcmAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBgaW50IHZhbGAgaXMsIGBwcmlvcml0eWAsIGBpZmFjZWAsIGB0b3NgLCBhbmQgYHRjbGFzc2AgYXJlIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBidXQgdGhleSBhcmUgYWxsIGluaXRpYWxpemVkLiBUaGUgdmFsdWVzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYHRvc2AgYW5kIGB0Y2xhc3NgIHZhbHVlcyBsb29rIHRvIGJlIGluaXRpYWxpemVkIGFzIHdlbGwuIFxuXG5TaW5jZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBhIGtlcm5lbCBmdW5jdGlvbiwgS01TQU4gd291bGQgaGF2ZSBjYXVnaHQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbk9mIGNvdXJzZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBzaXplcyBhcmUgY29ycmVjdC4gSWYgd2UgYXJlIHBhc3NpbmcgaW5jb3JyZWN0IHNpemVzLCBgZG9fc29ja19zZXRzb2Nrb3B0YCBjb3VsZCByZWFkIGJleW9uZCB0aGUgaW50ZW5kZWQgYm91bmRzLiBCdXQsIHRoZSBzaXplcyBiZWluZyBwYXNzZWQgYXJlIGBzaXplb2YobGluZylgLCBgc2l6ZW9mKHByaW9yaXR5KWAsIGBzaXplb2YodmFsKWAsIGBzaXplb2YodG9zKWAsIGFuZCBgc2l6ZW9mKHRjbGFzcylgIOKAkyB0aGF0J3MgZ29vZCFcblxuVGhpcyBwYXRjaCBzZWVtcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcsIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBzb21lIGBzb2NrX3NldHNvY2tvcHRgIHZzLiBgZG9fc29ja19zZXRzb2Nrb3B0YCBudWFuY2VzIG9yIHBlcmhhcHMgcmVsYXRpbmcgdG8gYHNvY2twdHJfdGAgY2hhbmdlcyBvciB0aGUgcmVtb3ZhbCBvZiB0aG9zZSBgc29ja19zZXRfKmAgaGVscGVycy5cblxuU28sIGxldCdzIGJlIG1ldGhvZGljYWwuIExldCdzIG1ha2Ugc3VyZSB0aGUgdmFyaWFibGVzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIFRoZSBsaW5nZXIgc3RydWN0IGxvb2tzIGxpa2UgaXQgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLiBJcyB0aGVyZSBwYWRkaW5nIHRoYXQgY291bGQgYmUgY2F1c2luZyBhbiBpc3N1ZSB3aXRoIGBzdHJ1Y3QgbGluZ2VyYD8gTm8sIGEgYHN0cnVjdCBsaW5nZXJgIGNvbnRhaW5zIHR3byBgaW50YHMgc28sIGl0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBBbHNvLCB0aGlzIHBhdGNoIGlzIG9ubHkgc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIHRoZSBrZXJuZWw7IHRoZXJlIGFyZSBubyBjaGFuZ2VzIG9yIGFkZGl0aW9ucyB0byB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyBhbmQgbm8gbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBpc3N1ZXMuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgc2hpZnRzIHRoZSBtZXRob2Qgb2Ygc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIHRoZSBsZWdhY3kgaGVscGVycyB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCB0aGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgYW55IHNvcnQgb2YgaW5mb3JtYXRpb24gbGVhay5cblxuUmV2aWV3aW5nIHRoZSBydWxlczogVGhpcyBkb2Vzbid0IGludHJvZHVjZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gQWxsIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLiBJIHdpbGwgc2V0IGl0IHRvIGZhbHNlIGFuZCBkb2N1bWVudCBteSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTgsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAxOjUzOjIxLjk4MTUwODg2N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZGlyZWN0IGNhbGxzIHRvIHNvY2tldCBvcHRpb24gaGVscGVycyAobGlrZSBgc29ja19ub19saW5nZXJgLCBgdGNwX3NvY2tfc2V0X25vZGVsYXlgLCBldGMuKSB3aXRoIGN1c3RvbSB3cmFwcGVycyB0aGF0IHVzZSBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYEtFUk5FTF9TT0NLUFRSYC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBwYXNzZWQgdG8gYGRvX3NvY2tfc2V0c29ja29wdGAgKHN1Y2ggYXMgYHN0cnVjdCBsaW5nZXIgbGluZ2AsIGBpbnQgdmFsYCwgYHUzMiBwcmlvcml0eWAsIGB1OCB0b3NgLCBgdTggdGNsYXNzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZXJlIGlzIG5vIHBhZGRpbmcgaW4gdGhlc2Ugc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkaXJlY3QgY2FsbHMgdG8gc29ja2V0IG9wdGlvbiBoZWxwZXJzIChsaWtlIGBzb2NrX25vX2xpbmdlcmAsIGB0Y3Bfc29ja19zZXRfbm9kZWxheWAsIGV0Yy4pIHdpdGggY3VzdG9tIHdyYXBwZXJzIHRoYXQgdXNlIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgS0VSTkVMX1NPQ0tQVFJgLiBBbGwgbG9jYWwgdmFyaWFibGVzIHBhc3NlZCB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCAoc3VjaCBhcyBgc3RydWN0IGxpbmdlciBsaW5nYCwgYGludCB2YWxgLCBgdTMyIHByaW9yaXR5YCwgYHU4IHRvc2AsIGB1OCB0Y2xhc3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlcmUgaXMgbm8gcGFkZGluZyBpbiB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[1] Phase: Succeeded StartedAt: 2026-08-16 01:53:33 +0000 UTC FinishedAt: 2026-08-16 01:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 01:53:33 +0000 UTC FinishedAt: 2026-08-16 01:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2] Phase: Succeeded StartedAt: 2026-08-16 01:53:33 +0000 UTC FinishedAt: 2026-08-16 03:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-16 01:53:33 +0000 UTC FinishedAt: 2026-08-16 03:31:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-16 01:53:33 +0000 UTC FinishedAt: 2026-08-16 01:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-16 01:53:33 +0000 UTC FinishedAt: 2026-08-16 01:53:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-3555899356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-16 01:53:43 +0000 UTC FinishedAt: 2026-08-16 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-16 01:53:43 +0000 UTC FinishedAt: 2026-08-16 02:09:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*189c05fc-e9c4-4619-9566-dfa915d61479,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-3555899356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a64df9ad-e96c-4a9e-8eb9-301e6408ceaa", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-583330570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-16 01:53:43 +0000 UTC FinishedAt: 2026-08-16 02:09:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*189c05fc-e9c4-4619-9566-dfa915d61479,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-3555899356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a64df9ad-e96c-4a9e-8eb9-301e6408ceaa", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-583330570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-16 02:09:59 +0000 UTC FinishedAt: 2026-08-16 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-16 02:09:59 +0000 UTC FinishedAt: 2026-08-16 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-16 02:09:59 +0000 UTC FinishedAt: 2026-08-16 02:10:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-16 02:09:59 +0000 UTC FinishedAt: 2026-08-16 02:10:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-1453594139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-16 02:10:09 +0000 UTC FinishedAt: 2026-08-16 02:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-16 02:10:09 +0000 UTC FinishedAt: 2026-08-16 02:12:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a64df9ad-e96c-4a9e-8eb9-301e6408ceaa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-583330570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-16 02:12:11 +0000 UTC FinishedAt: 2026-08-16 02:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-16 02:12:11 +0000 UTC FinishedAt: 2026-08-16 02:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-16 02:12:11 +0000 UTC FinishedAt: 2026-08-16 02:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-16 02:12:11 +0000 UTC FinishedAt: 2026-08-16 02:28:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*189c05fc-e9c4-4619-9566-dfa915d61479,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-1453594139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ebda8b4e-f6bc-4121-ad70-89a6197e11e9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-3102966207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-16 02:12:11 +0000 UTC FinishedAt: 2026-08-16 02:28:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*189c05fc-e9c4-4619-9566-dfa915d61479,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-1453594139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ebda8b4e-f6bc-4121-ad70-89a6197e11e9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-3102966207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-16 02:28:20 +0000 UTC FinishedAt: 2026-08-16 02:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-16 02:28:20 +0000 UTC FinishedAt: 2026-08-16 02:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-16 02:28:20 +0000 UTC FinishedAt: 2026-08-16 02:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-16 02:28:20 +0000 UTC FinishedAt: 2026-08-16 02:30:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebda8b4e-f6bc-4121-ad70-89a6197e11e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-3102966207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 03:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 03:31:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a64df9ad-e96c-4a9e-8eb9-301e6408ceaa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebda8b4e-f6bc-4121-ad70-89a6197e11e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-583330570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-3102966207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 02:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 02:30:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-249823252/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 02:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 02:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-16 02:30:25 +0000 UTC FinishedAt: 2026-08-16 02:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-16 02:30:35 +0000 UTC FinishedAt: 2026-08-16 03:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxvqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nvme_tcp_create_ctrl","nvmet_tcp_add_port","nvmet_tcp_accept_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3eb40771c00a8488fa6ed2cc1fe203477908bf38","config_name":"upstream-apparmor-kasan.config","enable_configs":["NVME_TCP","NVME_TARGET","NVME_TARGET_TCP","IPV6"],"series_id":"66ec2139-b0b2-441d-a374-83fe0d6f009f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-16 02:30:35 +0000 UTC FinishedAt: 2026-08-16 03:30:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a64df9ad-e96c-4a9e-8eb9-301e6408ceaa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebda8b4e-f6bc-4121-ad70-89a6197e11e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-583330570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-build-action-3102966207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzxvqv/series-workflowzxvqv-convert-artifact-249823252/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}