Name: series-workflowm4l8c Phase: Succeeded StartedAt: 2026-08-31 07:27:13 +0000 UTC FinishedAt: 2026-08-31 08:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[0] Phase: Succeeded StartedAt: 2026-08-31 07:27:13 +0000 UTC FinishedAt: 2026-08-31 08:11:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 07:27:13 +0000 UTC FinishedAt: 2026-08-31 08:11:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "0f5932b0-ef1d-4c25-8c7d-62832d2d43d1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_arch_text_poke" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmNoX3RleHRfcG9rZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdCopIGFuZCBjb3JyZXNwb25kaW5nIEJQRiBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgbXVsdGktcGFzcyBjb2RlIGdlbmVyYXRpb24gY29udmVyZ2VuY2UsIGFsaWdubWVudCBvZiBmZW50cnkgc3R1YnMvZHVtbXkgdHJhbXBvbGluZSBhZGRyZXNzLCBicmFuY2ggcmFuZ2UgY2hlY2tzLCBhbmQgNjQtYml0IHJlZ2lzdGVyIGNvbXBhcmlzb25zIGZvciB0YWlsIGNhbGxzLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjNjczNmU5NzRiZjMzMjY2NGZkMDI4ZDRjMTY5NDkyMDYyYmE0NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowOTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5pbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5AQCAtMTQsNiAmIzQzOzE0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BwYy1vcGNvZGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdlIG5lZWQgYXQgbGVhc3QgMiBwYXNzZXMgZm9yIHByb3BlciBjb2RlIGdlbmVyYXRpb24sIGFuZCBtYXkgbmVlZFxuJiM0MzsgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQ09ERUdFTl9NSU5fUEFTU0VTICAgIDJcbiYjNDM7I2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgM1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX1BQQzY0X0VMRl9BQklfVjFcbiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkVcdDI0XG4gI2Vsc2VcbkBAIC0xODgsNiAmIzQzOzE5NSwxMiBAQCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0IHtcbiBcbiAjZGVmaW5lIGJwZl90b19wcGMocilcdChjdHgtXHUwMDNlYjJwW3JdKVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BQQzY0XG4mIzQzOyNkZWZpbmUgUFBDX1JBV19DTVBMTEkoYSwgaSkgICAgUFBDX1JBV19DTVBMREkoYSwgaSlcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19QUEMzMlxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlx0MyAvKiBUaHJlZSBpbnN0cnVjdGlvbnMgPVx1MDAzZSAxMiBieXRlcyAqL1xuICNlbHNlXG5AQCAtMjE0LDEwICYjNDM7MjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXG4gaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICAgdTMyICphZGRycywgaW50IHBhc3MsIGJvb2wgZXh0cmFfcGFzcyk7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4mIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4gdm9pZCBicGZfaml0X3JlYWxsb2NfcmVncyhzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcbiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0bG9uZyBleGl0X2FkZHIpO1xuIHZvaWQgcHJlcGFyZV9mb3JfZnNlc3Npb25fZmVudHJ5KHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IGNvb2tpZV9jbnQsXG4gXHRcdFx0XHRcdFx0XHRcdGludCBjb29raWVfb2ZmLCBpbnQgcmV0dmFsX29mZik7XG4gdm9pZCBzdG9yZV9mdW5jX21ldGEodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZik7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDdiMDdiNDM1NzVmMTEuLmMyNzE3ZjBkOWNkZDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtNDksMTEgJiM0Mzs0OSwzNSBAQCBhc20gKFxuIFwmIzM0O1x0LnBvcHNlY3Rpb25cdFx0XHRcdDtcJiMzNDtcbiApO1xuIFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XG4mIzQzO1x0aW50IHN0dWJfc3o7XG4gXG4gXHQvKlxuJiM0MztcdCAqIFRoZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkIGlzIHBsYWNlZCBhdCBib3R0b20gb2YgTG9uZyBicmFuY2ggc3R1Yi5cbiYjNDM7XHQgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLlxuJiM0MztcdCAqIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YiwgdG8gbWFrZVxuJiM0MztcdCAqIG9vbF9zdHViX2lkeCBcdTAwMjYgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzXG4mIzQzO1x0ICogb24gc3RhcnQgb2YgZmltYWdlIGFuZCB0aGUgc3R1YiYjMzk7cyBpbnN0cnVjdGlvbiBjb3VudC4gVGhlXG4mIzQzO1x0ICogc3R1YnMgYmxvY2sgaGFzIDExIGluc3RydWN0aW9ucyAod2l0aCBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSlcbiYjNDM7XHQgKiBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGFcbiYjNDM7XHQgKiBOT1AgaWYgdGhlIGFkZHJlc3Mgb2YgZHVtbXlfdHJhbXBfYWRkciBpcyBub24gYWxpZ25lZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZVxuJiM0MztcdCAqIHJlcXVpcmVkIHRvIGFjY29tbW9kYXRlIGFsaWdubWVudCBOT1AuIEluIGNhc2UgZmluYWwgcGFzcyBza2lwc1xuJiM0MztcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxuJiM0MztcdCAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdHN0dWJfc3ogPSBJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSA/IDQ0IDogNDA7XG4mIzQzO1x0aWYgKCFpbWFnZSB8fCAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmaW1hZ2UgJiM0MzsgY3R4LVx1MDAzZWlkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpXG4mIzQzO1x0XHRFTUlUKFBQQ19SQVdfTk9QKCkpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqXHRub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHJcbiBcdCAqIE91dC1vZi1saW5lIHN0dWI6XG4gXHQgKlx0bWZsclx0cjBcbiBcdCAqXHRbYnxibF1cdHRyYW1wXG5AQCAtNzAsNDQgJiM0Mzs5NCw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdC8qXG4gXHQgKiBMb25nIGJyYW5jaCBzdHViOlxuLVx0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlXG4gXHQgKlx0bWZsclx0cjExXG4gXHQgKlx0YmNsXHQyMCwzMSwkJiM0Mzs0XG4tXHQgKlx0bWZsclx0cjEyXG4tXHQgKlx0bGRcdHIxMiwgLTgtU1pMKHIxMilcbiYjNDM7XHQgKlx0bWZsclx0cjEyXHQvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC5cbiYjNDM7XHQgKlx0bGRcdHIxMiwgMjAocjEyKSAvLyBvZmZzZXQoZHVtbXlfdHJhbXBfYWRkcikgZnJvbSBwcmV2IGluc3QuIGlzIDIwXG4gXHQgKlx0bXRjdHJcdHIxMlxuLVx0ICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiYjNDM7XHQgKlx0bXRsclx0cjExXHQvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiBcdCAqXHRiY3RyXG4mIzQzO1x0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlICAvLyBTWkwgYnl0ZXMgYWxpZ25lZFxuIFx0ICovXG4tXHRpZiAoaW1hZ2UpXG4tXHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbi1cdGN0eC1cdTAwM2VpZHggJiM0Mzs9IFNaTCAvIDQ7XG4gXHRsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC1cdTAwM2VpZHg7XG4gXHRFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNMNCgpKTtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTIpKTtcbi1cdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTtcbiYjNDM7XHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgMjApKTtcbiBcdEVNSVQoUFBDX1JBV19NVENUUihfUjEyKSk7XG4gXHRFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNUUigpKTtcbiBcbiYjNDM7XHRpZiAoaW1hZ2UpXG4mIzQzO1x0XHQqKCh1bnNpZ25lZCBsb25nICopXHUwMDI2aW1hZ2VbY3R4LVx1MDAzZWlkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VpZHggJiM0Mzs9IFNaTCAvIDQ7XG4mIzQzO1xuIFx0aWYgKCFicGZfaml0X29vbF9zdHViKSB7XG4gXHRcdGJwZl9qaXRfb29sX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIG9vbF9zdHViX2lkeCkgKiA0O1xuIFx0XHRicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7XG4gXHR9XG4gfVxuIFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0XHRcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbiB7XG4tXHRpZiAoIWV4aXRfYWRkciB8fCBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4mIzQzO1x0aWYgKGV4aXRfYWRkciBcdTAwMjZcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGV4aXRfYWRkcik7XG4tXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKSB7XG4tXHRcdGlmIChXQVJOX09OKCFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpKVxuLVx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKFxuJiM0MztcdFx0XHQobG9uZykoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiBcdFx0UFBDX0pNUChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcik7XG4gXHR9IGVsc2Uge1xuIFx0XHRjdHgtXHUwMDNlYWx0X2V4aXRfYWRkciA9IGN0eC1cdTAwM2VpZHggKiA0O1xuLVx0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuJiM0MztcdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgZmltYWdlLCBjdHgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc0LDYgJiM0MzszMDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0ICovXG4gXHRpZiAoY2djdHguc2VlbiBcdTAwMjYgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkge1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuJiM0MztcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG4gXHRcdGlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4LCBhZGRycywgMCwgZmFsc2UpKVxuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbkBAIC0yODYsNyAmIzQzOzMxMyw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4tXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIFx1MDAyNmNnY3R4KTtcbiYjNDM7XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4KTtcbiBcbiBcdGZpeHVwX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7XG4gXHRleHRhYmxlX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpO1xuQEAgLTMwNiwxMCAmIzQzOzMzMywxMyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0Y29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcdGZjb2RlX2Jhc2UgPSAodTMyICopKGZpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcbi1cdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yICovXG4tXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFx1MDAzYyAzOyBwYXNzJiM0MzsmIzQzOykge1xuJiM0MztcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yJiM0MzssIGxvb3AgdW50aWwgcHJvZ3JhbSBzaXplIGNvbnZlcmdlcy4gKi9cbiYjNDM7XHRmb3IgKHBhc3MgPSAxOyBwYXNzIFx1MDAzYz0gQ09ERUdFTl9NQVhfUEFTU0VTOyBwYXNzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHByZXZfcHJvZ2xlbiA9IHByb2dsZW47XG4mIzQzO1xuIFx0XHQvKiBOb3cgYnVpbGQgdGhlIHByb2xvZ3VlLCBib2R5IGNvZGUgXHUwMDI2IGVwaWxvZ3VlIGZvciByZWFsLiAqL1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuJiM0MztcdFx0Y2djdHguZXhlbnRyeV9pZHggPSAwO1xuIFx0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCwgYWRkcnMsIHBhc3MsXG5AQCAtMzE4LDExICYjNDM7MzQ4LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRcdFx0YnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7XG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1x0XHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbiYjNDM7XHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1xuJiM0MztcdFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XG4gXG4gXHRcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Bhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwmIzM0OywgcGFzcyxcbi1cdFx0XHRcdHByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pO1xuJiM0MztcdFx0XHRcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovXG4mIzQzO1x0XHRpZiAocGFzcyBcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiA9PSBwcmV2X3Byb2dsZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O0JQRiBKSVQ6IFByb2dyYW0gZGlkIG5vdCBjb252ZXJnZSBhZnRlciAlZCBwYXNzZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuJiM0MztcdFx0XHRicGZfYXJjaF90ZXh0X2NvcHkoXHUwMDI2Zmhkci1cdTAwM2VzaXplLCBcdTAwMjZoZHItXHUwMDNlc2l6ZSwgc2l6ZW9mKGhkci1cdTAwM2VzaXplKSk7XG4mIzQzO1x0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuJiM0MztcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG5AQCAtMzU3LDcgJiM0Mzs0MDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdFx0KHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuJiM0MztcdFx0aWYgKCFmcC1cdTAwM2VqaXRlZCBcdTAwMjZcdTAwMjYgcHJpdl9zdGFja19wdHIpIHtcbiBcdFx0XHRmcC1cdTAwM2VhdXgtXHUwMDNlcHJpdl9zdGFja19wdHIgPSBOVUxMO1xuIFx0XHRcdGZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTtcbiBcdFx0fVxuQEAgLTM5OSw3ICYjNDM7NDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3NcbiBcdHUzMiAqZml4dXA7XG4gXG4gXHQvKiBQb3B1bGF0ZSBleHRhYmxlIGVudHJpZXMgb25seSBpbiB0aGUgbGFzdCBwYXNzICovXG4tXHRpZiAocGFzcyAhPSAyKVxuJiM0MztcdGlmIChwYXNzIFx1MDAzYyBDT0RFR0VOX01JTl9QQVNTRVMpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKCFmcC1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSB8fFxuQEAgLTczOSw3ICYjNDM7Nzg0LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGVcbiBcdFx0ICogU2V0dGluZyB0aGUgdGFpbF9jYWxsX2luZm8gaW4gdHJhbXBvbGluZSYjMzk7cyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdFx0RU1JVChQUENfUkFXX0NNUExMSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKF9SMywgX1I0LCAtQlBGX1BQQ19UQUlMQ0FMTCkpO1xuIFxuQEAgLTEyNjUsNiAmIzQzOzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxuICAqIGJwZl9mdW5jOlxuICAqXHRbbm9wfGJdXHRvb2xfc3R1YlxuICAqIDIuIE91dC1vZi1saW5lIHN0dWI6XG4mIzQzOyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNzIsMTQgJiM0MzsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICpcdGJcdGJwZl9mdW5jICYjNDM7IDRcbiAgKiAzLiBMb25nIGJyYW5jaCBzdHViOlxuICAqIGxvbmdfYnJhbmNoX3N0dWI6XG4tICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXHRtZmxyXHRyMTFcbiAgKlx0YmNsXHQyMCwzMSwkJiM0Mzs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuJiM0MzsgKlx0bGRcdHIxMiwgMjAocjEyKVxuICAqXHRtdGN0clx0cjEyXG4gICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiAgKlx0YmN0clxuJiM0MzsgKlx0LmxvbmdcdFx1MDAzY2JyYW5jaF9hZGRyXHUwMDNlL1x1MDAzY2R1bW15X3RyYW1wXHUwMDNlXG4gICpcbiAgKiBkdW1teV90cmFtcCBpcyB1c2VkIHRvIHJlZHVjZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzLlxuICAqXG5AQCAtMTM4MSwxMCAmIzQzOzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgbW92ZWQgdG8gYm90dG9tIG9mIGxvbmcgYnJhbmNoIHN0dWIuXG4gXHQgKi9cbiBcdGlmICgobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSB8fFxuIFx0ICAgIChvbGRfYWRkciBcdTAwMjZcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2Uob2xkX2FkZHIgLSBpcCkpKVxuLVx0XHRyZXQgPSBwYXRjaF91bG9uZygodm9pZCAqKShicGZfZnVuY19lbmQgLSBicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgLSBTWkwpLFxuJiM0MztcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0RU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7XG4gXG5AQCAtMjM3LDcgJiM0MzsyMzcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuJiM0MztcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gfVxuIFxuIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovXG5AQCAtMTE0OSw3ICYjNDM7MTE0OSw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXG4gXHRcdFx0ICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuLVx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7XG4mIzQzO1x0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGRhYjEwNmNhZTIyYjUuLmU4MDMxMjE3MWFhNzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcdFx0ICovXG4gXHRcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbi1cdFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksXG4gXHRcdFx0XHRcdFx0XHRcdC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4XG4gXHR9XG4gfVxuIFxuLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4mIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4gXG5AQCAtNDA3LDcgJiM0Mzs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuJiM0MztcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gfVxuIFxuIC8qXG5AQCAtNjYyLDcgJiM0Mzs2NjIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpO1xuIFxuIFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpO1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpO1xuIFxuIFx0LyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovXG5AQCAtNjcyLDcgJiM0Mzs2NzIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0ICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKVxuIFx0ICogICBnb3RvIG91dDtcbiBcdCAqL1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XG4gXG4gXHQvKlxuQEAgLTcwNyw3ICYjNDM7NzA3LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIHRhaWxfY2FsbF9pbmZvLlxuIFx0ICovXG4gXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiYjNDM7XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXG4gXHQvKiBGaXJzdCBnZXQgYWRkcmVzcyBvZiB0YWlsX2NhbGxfaW5mbyAqL1xuQEAgLTE3MzcsNyAmIzQzOzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxuIFx0XHRcdCAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XG4mIzQzO1x0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc5LDkgJiM0MzsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm8gPSB7fTtcbiBcdF9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuIFx0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7XG4mIzQzO1x0X191MzIgdHJ1bmNfbGVuID0gMCwgZGlzYXNtX2xlbjtcbiBcdF9fdTMyICpmdW5jX2xlbnMgPSBOVUxMO1xuIFx0RklMRSAqdGV4dF9vdXQgPSBOVUxMO1xuIFx0dWludDhfdCAqaW1hZ2UgPSBOVUxMO1xuJiM0MztcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XG4gXHRpbnQgaSwgZXJyID0gMDtcbiBcbiBcdGlmICghbGx2bV9pbml0aWFsaXplZCkge1xuQEAgLTIyNSw5ICYjNDM7MjI3LDMwIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9wcm9nX2dldF9pbmZvX2J5X2ZkICMyXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBsYXN0IDggYnl0ZXMgY29udGFpbnMgZHVtbXlfdHJhbXBvbGluZSBhZGRyZXNzIGluIEpJVFxuJiM0MztcdCAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYyxcbiYjNDM7XHQgKiB3aGljaCBjYW4mIzM5O3QgZGlzYXNzZW1ibGUgdG8gYSB2YWxpZCBpbnN0cnVjdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xuJiM0MztcdGlmICh0cmlwbGUpIHtcbiYjNDM7XHRcdGlmIChzdHJzdHIodHJpcGxlLCBcJiMzNDtwb3dlcnBjNjRcJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsIFwmIzM0O3BwYzY0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0dHJ1bmNfbGVuID0gODtcbiYjNDM7XHRcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFwmIzM0O3Bvd2VycGNcJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsIFwmIzM0O3BwY1wmIzM0OykpXG4mIzQzO1x0XHRcdHRydW5jX2xlbiA9IDQ7XG4mIzQzO1x0XHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChwYyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBqaXRlZF9mdW5jczsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCYjMzQ7ZnVuYyAjJWQ6XFxuXCYjMzQ7LCBpKTtcbi1cdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZnVuY19sZW5zW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkaXNhc21fbGVuID0gZnVuY19sZW5zW2ldIFx1MDAzZSB0cnVuY19sZW4gP1xuJiM0MztcdFx0XHRcdFx0ZnVuY19sZW5zW2ldIC0gdHJ1bmNfbGVuIDogMDtcbiYjNDM7XHRcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgJiM0MzsgcGMsIGRpc2FzbV9sZW4pO1xuJiM0MztcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cGMgJiM0Mzs9IGZ1bmNfbGVuc1tpXTtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU5LDYgJiM0MzsxNTksNyBAQFxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwmIzM0O1JJU0NWNjRcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwmIzM0O3MzOTB4XCYjMzQ7KVxuICNkZWZpbmUgX19hcmNoX2xvb25nYXJjaFx0X19hcmNoKFwmIzM0O0xPT05HQVJDSFwmIzM0OylcbiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0XHRfX2FyY2goXCYjMzQ7UE9XRVJQQzY0XCYjMzQ7KVxuICNkZWZpbmUgX19jYXBzX3VucHJpdihjYXBzKVx0X190ZXN0X3RhZyhcJiMzNDt0ZXN0X2NhcHNfdW5wcml2PVwmIzM0OyBFWFBBTkRfUVVPVEUoY2FwcykpXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVx0X190ZXN0X3RhZyhcJiMzNDtsb2FkX21vZGU9aml0ZWRcJiMzNDspXG4gI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKVx0X190ZXN0X3RhZyhcJiMzNDtsb2FkX21vZGU9bm9faml0ZWRcJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG5pbmRleCA0OGZhMzRkMjk1OWY0Li45ODgwY2U0ZjE5MzFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbkBAIC05MSw2ICYjNDM7OTEsODQgQEAgX19qaXRlZChcJiMzNDtcdHBvcHFcdCVyYXhcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGptcFx0e3suKn19XCYjMzQ7KVx0XHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xuIF9faml0ZWQoXCYjMzQ7TDA6XHRsZWF2ZVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0e3socmV0cXxqbXBcdDB4KX19XCYjMzQ7KVx0XHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXG4mIzQzO19fYXJjaF9wb3dlcnBjNjRcbiYjNDM7LyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaSA5LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDksIC04KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bWZsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkdSAxLCB7ey4qfX0oMSlcJiMzNDspXG4mIzQzOy8qXG4mIzQzOyAqIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gZGlmZmVycyBiZXR3ZWVuIFBDUkVMIGFuZCBub24tUENSRUwga2VybmVscy5cbiYjNDM7ICogU2tpcCB0aGUgYWRkcmVzcyBnZW5lcmF0aW9uIHNlcXVlbmNlIGFuZCB2ZXJpZnkgb25seSB0aGF0IHRoZSBjYWxsXG4mIzQzOyAqIHRhcmdldCBpcyBsb2FkZWQgaW50byBDVFIgYmVmb3JlIGJyYW5jaGluZy5cbiYjNDM7ICovXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtdGN0ciB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YmN0cmxcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtclx0OCwgM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxpIDgsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRpIDEsIDEsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXRsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2Z1bmMgIzFcJiMzNDspXG4mIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzOy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGQgMTAsIDAoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRjbXBsZGlcdDksIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSA5LCAxMCwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgLTgoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaXMge3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzbGRpIHt7Lip9fSwge3suKn19LCAzMlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGkge3suKn19LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bHd6IDksIHt7Lip9fSh7ey4qfX0pXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c2x3aSB7ey4qfX0sIHt7Lip9fSwgMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGx3XHR7ey4qfX0sIDlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0MCwge3suKn19XCYjMzQ7KVxuJiM0MzsvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0OSwgMzNcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAwKDkpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y21wbGRpXHQ5LCAzM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGJ0XHR7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgOSwgOSwgMVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG11bGxpIDEwLCB7ey4qfX0sIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGQgMTAsIDEwLCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRidFx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgMTAsIDEwLCB7ey4qfX1cJiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtdGN0ciAxMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDEwLCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSAxMCwgMSwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgMCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiY3RyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO1xuIFNFQyhcJiMzNDt0Y1wmIzM0OylcbiBfX25ha2VkIGludCBtYWluKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IDNjZTMyZDEzNGUyY2MuLjAxYjE0MjAwOTdkMjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbkBAIC0zNzgsNiAmIzQzOzM3OCw3IEBAIGVudW0gYXJjaCB7XG4gXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuIFx0QVJDSF9TMzkwWFx0PSAweDEwLFxuIFx0QVJDSF9MT09OR0FSQ0hcdD0gMHgyMCxcbiYjNDM7XHRBUkNIX1BPV0VSUEM2NFx0PSAweDQwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG5AQCAtMzkyLDYgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiBcdHJldHVybiBBUkNIX1MzOTBYO1xuICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXylcbiBcdHJldHVybiBBUkNIX0xPT05HQVJDSDtcbiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKVxuJiM0MztcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcbiAjZW5kaWZcbiBcdHJldHVybiBBUkNIX1VOS05PV047XG4gfVxuQEAgLTU4NSw2ICYjNDM7NTg4LDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0XHRhcmNoID0gQVJDSF9TMzkwWDtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O0xPT05HQVJDSFwmIzM0OykgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfTE9PTkdBUkNIO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1BPV0VSUEM2NFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFyY2ggPSBBUkNIX1BPV0VSUEM2NDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0UFJJTlRfRkFJTChcJiMzNDtiYWQgYXJjaCBzcGVjOiAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHZhbCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmNoX3RleHRfcG9rZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGxvZ2ljLCBpbmNsdWRpbmcgY29kZSBnZW5lcmF0aW9uIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIGZlbnRyeSBzdHViIGFsaWdubWVudCwgdGV4dCBwb2tpbmcsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGFuZCA2NC1iaXQgdGFpbCBjYWxsIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIEJQRiBwcm9ncmFtIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBiZWhhdmlvciBvbiBQb3dlclBDIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA4OjA5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAppbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaApAQCAtMTQsNiAmIzQzOzE0LDEzIEBACiAjaW5jbHVkZSAmbHQ7YXNtL3BwYy1vcGNvZGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWlsZF9idWcuaCZndDsKIAomIzQzOy8qCiYjNDM7ICogV2UgbmVlZCBhdCBsZWFzdCAyIHBhc3NlcyBmb3IgcHJvcGVyIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIG1heSBuZWVkCiYjNDM7ICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBDT0RFR0VOX01JTl9QQVNTRVMgICAgMgomIzQzOyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDMKJiM0MzsKICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMQogI2RlZmluZSBGVU5DVElPTl9ERVNDUl9TSVpFCTI0CiAjZWxzZQpAQCAtMTg4LDYgJiM0MzsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7CiAKICNkZWZpbmUgYnBmX3RvX3BwYyhyKQkoY3R4LSZndDtiMnBbcl0pCiAKJiM0MzsjaWZkZWYgQ09ORklHX1BQQzY0CiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QUEMzMgogI2RlZmluZSBCUEZfRklYVVBfTEVOCTMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID0mZ3Q7IDEyIGJ5dGVzICovCiAjZWxzZQpAQCAtMjE0LDEwICYjNDM7MjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqCiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsCiAJCSAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTsKIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7CiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsCiYjNDM7CQkJCQkJCQkJCWxvbmcgZXhpdF9hZGRyKTsKIHZvaWQgcHJlcGFyZV9mb3JfZnNlc3Npb25fZmVudHJ5KHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IGNvb2tpZV9jbnQsCiAJCQkJCQkJCWludCBjb29raWVfb2ZmLCBpbnQgcmV0dmFsX29mZik7CiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDdiMDdiNDM1NzVmMTEuLmMyNzE3ZjBkOWNkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYwpAQCAtNDksMTEgJiM0Mzs0OSwzNSBAQCBhc20gKAogJiMzNDsJLnBvcHNlY3Rpb24JCQkJOyYjMzQ7CiApOwogCi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJaW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7CiYjNDM7CWludCBzdHViX3N6OwogCiAJLyoKJiM0MzsJICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLgomIzQzOwkgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLgomIzQzOwkgKiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsIHRvIG1ha2UKJiM0MzsJICogb29sX3N0dWJfaWR4ICZhbXA7IGxvbmdfYnJhbmNoX3N0dWJfaWR4IGNvbnN0YW50IGZyb20gZW5kLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzCiYjNDM7CSAqIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWImIzM5O3MgaW5zdHJ1Y3Rpb24gY291bnQuIFRoZQomIzQzOwkgKiBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKQomIzQzOwkgKiBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGEKJiM0MzsJICogTk9QIGlmIHRoZSBhZGRyZXNzIG9mIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuCiYjNDM7CSAqCiYjNDM7CSAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZQomIzQzOwkgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHMKJiM0MzsJICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kCiYjNDM7CSAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwOwomIzQzOwlpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtJmd0O2lkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpCiYjNDM7CQlFTUlUKFBQQ19SQVdfTk9QKCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKglub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHIKIAkgKiBPdXQtb2YtbGluZSBzdHViOgogCSAqCW1mbHIJcjAKIAkgKglbYnxibF0JdHJhbXAKQEAgLTcwLDQ0ICYjNDM7OTQsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAkvKgogCSAqIExvbmcgYnJhbmNoIHN0dWI6Ci0JICoJLmxvbmcJJmx0O2R1bW15X3RyYW1wX2FkZHImZ3Q7CiAJICoJbWZscglyMTEKIAkgKgliY2wJMjAsMzEsJCYjNDM7NAotCSAqCW1mbHIJcjEyCi0JICoJbGQJcjEyLCAtOC1TWkwocjEyKQomIzQzOwkgKgltZmxyCXIxMgkvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC4KJiM0MzsJICoJbGQJcjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjAKIAkgKgltdGN0cglyMTIKLQkgKgltdGxyCXIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQkkKJiM0MzsJICoJbXRscglyMTEJLy8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJCiAJICoJYmN0cgomIzQzOwkgKgkubG9uZwkmbHQ7ZHVtbXlfdHJhbXBfYWRkciZndDsgIC8vIFNaTCBieXRlcyBhbGlnbmVkCiAJICovCi0JaWYgKGltYWdlKQotCQkqKCh1bnNpZ25lZCBsb25nICopJmFtcDtpbWFnZVtjdHgtJmd0O2lkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7Ci0JY3R4LSZndDtpZHggJiM0Mzs9IFNaTCAvIDQ7CiAJbG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtJmd0O2lkeDsKIAlFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDTDQoKSk7CiAJRU1JVChQUENfUkFXX01GTFIoX1IxMikpOwotCUVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTsKJiM0MzsJRU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7CiAJRU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTsKIAlFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDVFIoKSk7CiAKJiM0MzsJaWYgKGltYWdlKQomIzQzOwkJKigodW5zaWduZWQgbG9uZyAqKSZhbXA7aW1hZ2VbY3R4LSZndDtpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wOwomIzQzOwomIzQzOwljdHgtJmd0O2lkeCAmIzQzOz0gU1pMIC8gNDsKJiM0MzsKIAlpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHsKIAkJYnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtJmd0O2lkeCAtIG9vbF9zdHViX2lkeCkgKiA0OwogCQlicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LSZndDtpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0OwogCX0KIH0KIAotaW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpCiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwKJiM0MzsJCQkJCQkJaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKQogewotCWlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiYjNDM7CWlmIChleGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtJmd0O2lkeCAqIDQpKSkgewogCQlQUENfSk1QKGV4aXRfYWRkcik7Ci0JfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIpIHsKLQkJaWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LSZndDthbHRfZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKAomIzQzOwkJCShsb25nKShjdHgtJmd0O2FsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiAJCVBQQ19KTVAoY3R4LSZndDthbHRfZXhpdF9hZGRyKTsKIAl9IGVsc2UgewogCQljdHgtJmd0O2FsdF9leGl0X2FkZHIgPSBjdHgtJmd0O2lkeCAqIDQ7Ci0JCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7CiYjNDM7CQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNzQsNiAmIzQzOzMwMCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJICovCiAJaWYgKGNnY3R4LnNlZW4gJmFtcDsgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkgewogCQljZ2N0eC5pZHggPSAwOwomIzQzOwkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsICZhbXA7Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpCiAJCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjg2LDcgJiM0MzszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCSAqLwogCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiAJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwotCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgJmFtcDtjZ2N0eCk7CiAKIAlmaXh1cF9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7CiAJZXh0YWJsZV9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpOwpAQCAtMzA2LDEwICYjNDM7MzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJY29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTsKIAlmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKLQkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqLwotCWZvciAocGFzcyA9IDE7IHBhc3MgJmx0OyAzOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiYjNDM7LCBsb29wIHVudGlsIHByb2dyYW0gc2l6ZSBjb252ZXJnZXMuICovCiYjNDM7CWZvciAocGFzcyA9IDE7IHBhc3MgJmx0Oz0gQ09ERUdFTl9NQVhfUEFTU0VTOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHByZXZfcHJvZ2xlbiA9IHByb2dsZW47CiYjNDM7CiAJCS8qIE5vdyBidWlsZCB0aGUgcHJvbG9ndWUsIGJvZHkgY29kZSAmYW1wOyBlcGlsb2d1ZSBmb3IgcmVhbC4gKi8KIAkJY2djdHguaWR4ID0gMDsKJiM0MzsJCWNnY3R4LmV4ZW50cnlfaWR4ID0gMDsKIAkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoY29kZV9iYXNlLCAmYW1wO2NnY3R4KTsKIAkJaWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCAmYW1wO2NnY3R4LCBhZGRycywgcGFzcywKQEAgLTMxOCwxMSAmIzQzOzM0OCwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwkJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwomIzQzOwkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwomIzQzOwkJcHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7CiAKIAkJaWYgKGJwZl9qaXRfZW5hYmxlICZndDsgMSkKIAkJCXByX2luZm8oJiMzNDtQYXNzICVkOiBzaHJpbmsgPSAlZCwgc2VlbiA9IDB4JXhcbiYjMzQ7LCBwYXNzLAotCQkJCXByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pOwomIzQzOwkJCQlwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTsKJiM0MzsKJiM0MzsJCS8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovCiYjNDM7CQlpZiAocGFzcyAmZ3Q7PSBDT0RFR0VOX01JTl9QQVNTRVMgJmFtcDsmYW1wOyBwcm9nbGVuID09IHByZXZfcHJvZ2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyAmYW1wOyZhbXA7IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7QlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xuJiMzNDssCiYjNDM7CQkJCQkJCQlDT0RFR0VOX01BWF9QQVNTRVMpOwomIzQzOwkJCWJwZl9hcmNoX3RleHRfY29weSgmYW1wO2ZoZHItJmd0O3NpemUsICZhbXA7aGRyLSZndDtzaXplLCBzaXplb2YoaGRyLSZndDtzaXplKSk7CiYjNDM7CQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiYjNDM7CQkJZ290byBvdXRfZXJyOwomIzQzOwkJfQogCX0KIAogCWlmIChicGZfaml0X2VuYWJsZSAmZ3Q7IDEpCkBAIC0zNTcsNyAmIzQzOzQwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCQkJKHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKIG91dF9hZGRyczoKLQkJaWYgKCFpbWFnZSAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiYjNDM7CQlpZiAoIWZwLSZndDtqaXRlZCAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiAJCQlmcC0mZ3Q7YXV4LSZndDtwcml2X3N0YWNrX3B0ciA9IE5VTEw7CiAJCQlmcmVlX3BlcmNwdShwcml2X3N0YWNrX3B0cik7CiAJCX0KQEAgLTM5OSw3ICYjNDM7NDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3MKIAl1MzIgKmZpeHVwOwogCiAJLyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqLwotCWlmIChwYXNzICE9IDIpCiYjNDM7CWlmIChwYXNzICZsdDsgQ09ERUdFTl9NSU5fUEFTU0VTKQogCQlyZXR1cm4gMDsKIAogCWlmICghZnAtJmd0O2F1eC0mZ3Q7ZXh0YWJsZSB8fApAQCAtNzM5LDcgJiM0Mzs3ODQsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZQogCQkgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJiMzOTtzIGZyYW1lCiAJCSAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLgogCQkgKi8KLQkJRU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7CiAKQEAgLTEyNjUsNiAmIzQzOzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKQogICogYnBmX2Z1bmM6CiAgKglbbm9wfGJdCW9vbF9zdHViCiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOgomIzQzOyAqCW5vcAkvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudAogICogb29sX3N0dWI6CiAgKgltZmxyCXIwCiAgKglbYnxibF0JJmx0O2JwZl9wcm9nJmd0Oy8mbHQ7bG9uZ19icmFuY2hfc3R1YiZndDsKQEAgLTEyNzIsMTQgJiM0MzsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpCiAgKgliCWJwZl9mdW5jICYjNDM7IDQKICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6CiAgKiBsb25nX2JyYW5jaF9zdHViOgotICoJLmxvbmcJJmx0O2JyYW5jaF9hZGRyJmd0Oy8mbHQ7ZHVtbXlfdHJhbXAmZ3Q7CiAgKgltZmxyCXIxMQogICoJYmNsCTIwLDMxLCQmIzQzOzQKICAqCW1mbHIJcjEyCi0gKglsZAlyMTIsIC0xNihyMTIpCiYjNDM7ICoJbGQJcjEyLCAyMChyMTIpCiAgKgltdGN0cglyMTIKICAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQogICoJYmN0cgomIzQzOyAqCS5sb25nCSZsdDticmFuY2hfYWRkciZndDsvJmx0O2R1bW15X3RyYW1wJmd0OwogICoKICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuCiAgKgpAQCAtMTM4MSwxMCAmIzQzOzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsCiAJICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOgogCSAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHIKIAkgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS4KJiM0MzsJICoKJiM0MzsJICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi4KIAkgKi8KIAlpZiAoKG5ld19hZGRyICZhbXA7JmFtcDsgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8CiAJICAgIChvbGRfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSkKLQkJcmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSwKJiM0MzsJCXJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi8KIAkJCQkgIChuZXdfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/CiAJCQkJICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMKQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgKIAogfQogCi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogewogCUVNSVQoUFBDX1JBV19NUihfUjMsIGJwZl90b19wcGMoQlBGX1JFR18wKSkpOwogCkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovCkBAIC0xMTQ5LDcgJiM0MzsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGUKIAkJCSAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuCiAJCQkgKi8KIAkJCWlmIChpICE9IGZsZW4gLSAxKSB7Ci0JCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7CiYjNDM7CQkJCXJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwKJiM0MzsJCQkJCQkJCWN0eCwgX1IwLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZGFiMTA2Y2FlMjJiNS4uZTgwMzEyMTcxYWE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMjc2LDcgJiM0MzsyNzYsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogCQkgKi8KIAkJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCAwKSk7CiAJCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwgLShCUEZfUFBDX1RBSUxDQUxMKSkpOwotCQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJCUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCQlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCQlFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwKIAkJCQkJCQkJLShCUEZfUFBDX1RBSUxDQUxMKSkpOwpAQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eAogCX0KIH0KIAotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIHsKIAlicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpOwogCkBAIC00MDcsNyAmIzQzOzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qCkBAIC02NjIsNyAmIzQzOzY2Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJUFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpOwogCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpOwogCiAJLyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovCkBAIC02NzIsNyAmIzQzOzY3Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKQogCSAqICAgZ290byBvdXQ7CiAJICovCi0JRU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCVBQQ19CQ0NfU0hPUlQoQ09ORF9FUSwgb3V0KTsKIAogCS8qCkBAIC03MDcsNyAmIzQzOzcwNyw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogdGFpbF9jYWxsX2luZm8uCiAJICovCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCiAJLyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi8KQEAgLTE3MzcsNyAmIzQzOzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZQogCQkJICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS4KIAkJCSAqLwogCQkJaWYgKGkgIT0gZmxlbiAtIDEpIHsKLQkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIHRtcDFfcmVnLCBleGl0X2FkZHIpOwomIzQzOwkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCwKJiM0MzsJCQkJCQkJCXRtcDFfcmVnLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMKaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYwpAQCAtMTc5LDkgJiM0MzsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvID0ge307CiAJX191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7CiAJX191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7CiYjNDM7CV9fdTMyIHRydW5jX2xlbiA9IDAsIGRpc2FzbV9sZW47CiAJX191MzIgKmZ1bmNfbGVucyA9IE5VTEw7CiAJRklMRSAqdGV4dF9vdXQgPSBOVUxMOwogCXVpbnQ4X3QgKmltYWdlID0gTlVMTDsKJiM0MzsJY2hhciAqdHJpcGxlID0gTlVMTDsKIAlpbnQgaSwgZXJyID0gMDsKIAogCWlmICghbGx2bV9pbml0aWFsaXplZCkgewpAQCAtMjI1LDkgJiM0MzsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzImIzM0OykpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUCiYjNDM7CSAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYywKJiM0MzsJICogd2hpY2ggY2FuJiMzOTt0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uCiYjNDM7CSAqLwomIzQzOwl0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpOwomIzQzOwlpZiAodHJpcGxlKSB7CiYjNDM7CQlpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjNjQmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgJiMzNDtwcGM2NCYjMzQ7KSkKJiM0MzsJCQl0cnVuY19sZW4gPSA4OwomIzQzOwkJZWxzZSBpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsICYjMzQ7cHBjJiMzNDspKQomIzQzOwkJCXRydW5jX2xlbiA9IDQ7CiYjNDM7CQlMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTsKJiM0MzsJfQomIzQzOwogCWZvciAocGMgPSAwLCBpID0gMDsgaSAmbHQ7IGppdGVkX2Z1bmNzOyAmIzQzOyYjNDM7aSkgewogCQlmcHJpbnRmKHRleHRfb3V0LCAmIzM0O2Z1bmMgIyVkOlxuJiMzNDssIGkpOwotCQlkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICYjNDM7IHBjLCBmdW5jX2xlbnNbaV0pOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERpc2FibGVkIEpJVCBoYXZlIHplcm8gZnVuY19sZW5zLCBoZW5jZSB1bmRlcmZsb3cKJiM0MzsJCSAqLwomIzQzOwkJZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSAmZ3Q7IHRydW5jX2xlbiA/CiYjNDM7CQkJCQlmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwOwomIzQzOwkJZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZGlzYXNtX2xlbik7CiYjNDM7CiAJCWZwcmludGYodGV4dF9vdXQsICYjMzQ7XG4mIzM0Oyk7CiAJCXBjICYjNDM7PSBmdW5jX2xlbnNbaV07CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaApAQCAtMTU5LDYgJiM0MzsxNTksNyBAQAogI2RlZmluZSBfX2FyY2hfcmlzY3Y2NAkJX19hcmNoKCYjMzQ7UklTQ1Y2NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfczM5MHgJCV9fYXJjaCgmIzM0O3MzOTB4JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2gJX19hcmNoKCYjMzQ7TE9PTkdBUkNIJiMzNDspCiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0CV9fYXJjaCgmIzM0O1BPV0VSUEM2NCYjMzQ7KQogI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2NhcHNfdW5wcml2PSYjMzQ7IEVYUEFORF9RVU9URShjYXBzKSkKICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKCkJX190ZXN0X3RhZygmIzM0O2xvYWRfbW9kZT1qaXRlZCYjMzQ7KQogI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKQlfX3Rlc3RfdGFnKCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKaW5kZXggNDhmYTM0ZDI5NTlmNC4uOTg4MGNlNGYxOTMxYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYwpAQCAtOTEsNiAmIzQzOzkxLDg0IEBAIF9faml0ZWQoJiMzNDsJcG9wcQklcmF4JiMzNDspCiBfX2ppdGVkKCYjMzQ7CWptcAl7ey4qfX0mIzM0OykJCS8qIGp1bXAgdG8gdGFpbCBjYWxsIHRndCAgICovCiBfX2ppdGVkKCYjMzQ7TDA6CWxlYXZlJiMzNDspCiBfX2ppdGVkKCYjMzQ7CXt7KHJldHF8am1wCTB4KX19JiMzNDspCQkvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovCiYjNDM7X19hcmNoX3Bvd2VycGM2NAomIzQzOy8qIHByb2dyYW0gZW50cnkgZm9yIG1haW4oKSwgcmVndWxhciBmdW5jdGlvbiBwcm9sb2d1ZSAqLwomIzQzO19faml0ZWQoJiMzNDsJbm9wJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwlsaSA5LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1mbHIgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc3RkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGR1IDEsIHt7Lip9fSgxKSYjMzQ7KQomIzQzOy8qCiYjNDM7ICogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogQWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gZGlmZmVycyBiZXR3ZWVuIFBDUkVMIGFuZCBub24tUENSRUwga2VybmVscy4KJiM0MzsgKiBTa2lwIHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2UgYW5kIHZlcmlmeSBvbmx5IHRoYXQgdGhlIGNhbGwKJiM0MzsgKiB0YXJnZXQgaXMgbG9hZGVkIGludG8gQ1RSIGJlZm9yZSBicmFuY2hpbmcuCiYjNDM7ICovCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliY3RybCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJOCwgMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGkgOCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxLCAxLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGxyIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTMsIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJsciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7ZnVuYyAjMSYjMzQ7KQomIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovCiYjNDM7X19qaXRlZCgmIzM0Owlub3AmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi8KJiM0MzsvKiB0YWlsIGNhbGwgcHJvbG9ndWUgZm9yIHN1YnByb2dyYW0gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCAwKDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAtOCgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQk5LCAzMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgOSwgMTAsIC04JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpcyB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc2xkaSB7ey4qfX0sIHt7Lip9fSwgMzImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpIHt7Lip9fSwge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpIHt7Lip9fSwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbHd6IDksIHt7Lip9fSh7ey4qfX0pJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzbHdpIHt7Lip9fSwge3suKn19LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsdwl7ey4qfX0sIDkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCTAsIHt7Lip9fSYjMzQ7KQomIzQzOy8qIGJwZl90YWlsX2NhbGwgaW1wbGVtZW50YXRpb24gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDksIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAwKDkpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDksIDksIDEmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW11bGxpIDEwLCB7ey4qfX0sIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZCAxMCwgMTAsIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIHt7Lip9fSgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQkxMCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCB7ey4qfX0oMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDEwLCAxMCwge3suKn19JiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciAxMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJMTAsIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlidAl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxMCwgMSwgLTgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZCA5LCAwKDEwKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmN0ciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJMywgOCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmxyJiMzNDspCiYjNDM7CiBTRUMoJiMzNDt0YyYjMzQ7KQogX19uYWtlZCBpbnQgbWFpbih2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwppbmRleCAzY2UzMmQxMzRlMmNjLi4wMWIxNDIwMDk3ZDI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwpAQCAtMzc4LDYgJiM0MzszNzgsNyBAQCBlbnVtIGFyY2ggewogCUFSQ0hfUklTQ1Y2NAk9IDB4OCwKIAlBUkNIX1MzOTBYCT0gMHgxMCwKIAlBUkNIX0xPT05HQVJDSAk9IDB4MjAsCiYjNDM7CUFSQ0hfUE9XRVJQQzY0CT0gMHg0MCwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKQpAQCAtMzkyLDYgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKIAlyZXR1cm4gQVJDSF9TMzkwWDsKICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXykKIAlyZXR1cm4gQVJDSF9MT09OR0FSQ0g7CiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQomIzQzOwlyZXR1cm4gQVJDSF9QT1dFUlBDNjQ7CiAjZW5kaWYKIAlyZXR1cm4gQVJDSF9VTktOT1dOOwogfQpAQCAtNTg1LDYgJiM0Mzs1ODgsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlciwKIAkJCQlhcmNoID0gQVJDSF9TMzkwWDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtMT09OR0FSQ0gmIzM0OykgPT0gMCkgewogCQkJCWFyY2ggPSBBUkNIX0xPT05HQVJDSDsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7UE9XRVJQQzY0JiMzNDspID09IDApIHsKJiM0MzsJCQkJYXJjaCA9IEFSQ0hfUE9XRVJQQzY0OwogCQkJfSBlbHNlIHsKIAkJCQlQUklOVF9GQUlMKCYjMzQ7YmFkIGFyY2ggc3BlYzogJiMzOTslcyYjMzk7XG4mIzM0OywgdmFsKTsKIAkJCQllcnIgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvd2VyUEMgQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgUG93ZXJQQyBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgQlBGIEpJVCBjb21waWxhdGlvbiBhc3BlY3RzLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgYnBmX2ppdC5oYCwgdGhlIGNvbXBpbGF0aW9uIGNvZGUgaXRzZWxmIChgYnBmX2ppdF9jb21wLmNgLCBgYnBmX2ppdF9jb21wMzIuY2AsIGBicGZfaml0X2NvbXA2NC5jYCksIGFuZCBzb21lIHNlbGYtdGVzdHMuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ247IHdlIG5lZWQgdG8gdmVyaWZ5IGFsbCBvZiB0aGVzZSBwaWVjZXMgd29yayBjb3JyZWN0bHkgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIGV4aXN0aW5nIGNvZGUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJcyB0aGVyZSBhIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnRyb2R1Y2VkPyBIYXMgYW4gZXhpc3Rpbmcgb3B0aW9uIGJlZW4gY2hhbmdlZCwgb3IgaXMgYW4gZXhpc3Rpbmcgb3B0aW9uIG5vdyByZXF1aXJlZD8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgb3Igc2ltcGx5IHJlYWRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB0byBzZWUgd2hhdCBvcHRpb25zIHRoaXMgaW1wYWN0cy4gQWZ0ZXIgdGhhdCwgSSYjMzk7bGwgYW5hbHl6ZSB0aGUgY29kZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODItXHRzZWxlY3QgQVJDSF9VU0VfUVVFVUVEX1JXTE9DS1NcdFx0aWYgUFBDX1FVRVVFRF9TUElOTE9DS1NcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE4MzpcdHNlbGVjdCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODQtXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfVE9QRE9XTl9NTUFQX0xBWU9VVFxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI0Ni1cdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1x0aWYgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUlkgfHwgTVBST0ZJTEVfS0VSTkVMIHx8IFBQQzMyXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNDc6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjQ4LVx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1Ncbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZz00PUNPTkZJR19ISUdIX1JFU19USU1FUlM9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWc6NTpDT05GSUdfQlBGX0pJVD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZy02LUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9OTQ9Q09ORklHX0ROU19SRVNPTFZFUj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo5NTpDT05GSUdfQlBGX0pJVD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy05Ni0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTc9Q09ORklHX0JQRl9TWVNDQUxMPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzo4OkNPTkZJR19CUEZfSklUPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy05LUNPTkZJR19CUEZfTFNNPXlcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTQtI1xuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wJChCSVRTKS5vXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTYtXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlPTc9aWZkZWYgQ09ORklHX1BQQzY0XG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfdGltZWRfbWF5X2dvdG8ub1xuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZS05LWVuZGlmXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmgtNy0gKi9cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjg6I2lmbmRlZiBfQlBGX0pJVF9IXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaDo5OiNkZWZpbmUgX0JQRl9KSVRfSFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmgtMTAtXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg9MTY3PXN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTE3OS1cdHVuc2lnbmVkIGludCBzdGFja19zaXplO1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg6MTgwOlx0aW50IGIycFtNQVhfQlBGX0pJVF9SRUcgJiM0MzsgM107XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaC0xODEtXHR1bnNpZ25lZCBpbnQgZXhlbnRyeV9pZHg7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jLTQyLS8qIEJQRiByZWdpc3RlciB1c2FnZSAqL1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jOjQzOiNkZWZpbmUgVE1QX1JFR1x0XHRcdChNQVhfQlBGX0pJVF9SRUcgJiM0MzsgMClcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYy00NC1cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzAtLyogQlBGIHJlZ2lzdGVyIHVzYWdlICovXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzE6I2RlZmluZSBUTVBfUkVHXzFcdChNQVhfQlBGX0pJVF9SRUcgJiM0MzsgMClcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzo3MjojZGVmaW5lIFRNUF9SRUdfMlx0KE1BWF9CUEZfSklUX1JFRyAmIzQzOyAxKVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjczOiNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgIChNQVhfQlBGX0pJVF9SRUcgJiM0MzsgMilcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy03NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3dlclBDIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdXp6LXdvcnRoeT8mIzM0OyBJdCYjMzk7cyB0b3VjaGluZyB0aGUgcG93ZXJwYyBCUEYgSklUIGNvbXBpbGVyIOKAkyB0aGF0JiMzOTtzIGEga2V5IGFyZWEuIEFueXRoaW5nIHRoYXQgYWZmZWN0cyBjb3JlIGFyY2hpdGVjdHVyZSBleGVjdXRpb24gbG9naWMsIGVzcGVjaWFsbHkgd2hlbiB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIGludm9sdmVkIHZpYSBgYnBmKClgIHN5c3RlbSBjYWxscywgQlBGIHByb2dyYW0gbG9hZGluZywgdmVyaWZpY2F0aW9uLCBhbmQgSklUIGNvbXBpbGF0aW9uIG9uIFBvd2VyUEMgKGFuZCBjYW4gYmUgcnVuIGluIFFFTVUsIGV2ZW4gYmV0dGVyISksIHJhaXNlcyBhIGZsYWcuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGludGVybmFscyBvZiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgc2VlIGNoYW5nZXMgdG8gbXVsdGlwbGUgZmlsZXM6IGBicGZfaml0LmhgLCBgYnBmX2ppdF9jb21wLmNgLCBhbmQgYGJwZl9qaXRfY29tcDY0LmNgLiBJJiMzOTttIHNlZWluZyB1cGRhdGVzIHRvIGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGluZ3MgbGlrZSBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCB0YWlsIGNhbGxzICh1c2luZyBkaWZmZXJlbnQgY29tcGFyZSBpbnN0cnVjdGlvbnMpLCBmZW50cnkgc3R1YnMsIGJyYW5jaCByYW5nZXMgYW5kIHRoZSBleGl0IGluc3RydWN0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9uIHRvIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBKSVQgY29tcGlsYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBzZWxmdGVzdHMgZm9yIHRhaWwgY2FsbCBKSVQgdmVyaWZpY2F0aW9uIGlzIGFub3RoZXIgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgaXMgYSBjb21wbGV4IGFyZWEgdG8gY29uc2lkZXIuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgdG8gbG9vayBhdCBmdXJ0aGVyPyYjMzQ7ICBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIEJQRiBKSVQgb24gUG93ZXJQQy4gIGBicGZfYXJjaF90ZXh0X3Bva2VgIGlzIGFsc28gaGVyZS4gTGV0IG1lIGNvbXBpbGUgYSBsaXN0IG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFzIGEgcXVpY2sgd2F5IHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zOgoKKiAgIGBicGZfaW50X2ppdF9jb21waWxlYAoqICAgYGJwZl9hcmNoX3RleHRfcG9rZWAKKiAgIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AKKiAgIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYAoqICAgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gCiogICBgYnBmX2FkZF9leHRhYmxlX2VudHJ5YAoKTm93LCB0aGUgbmV4dCB0aGluZyBpcyB0byBxdWlja2x5IGNoZWNrIGlmIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBzdGF0aWMuIEdvdHRhIHNlZSBpZiBpdCYjMzk7cyBleHRlcm5hbGx5IGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mj1zdGF0aWMgdm9pZCBwcml2X3N0YWNrX2NoZWNrX2d1YXJkKHZvaWQgX19wZXJjcHUgKnByaXZfc3RhY2tfcHRyLCBpbnQgYWxsb2Nfc2l6ZSxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTE5MC1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTkxOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xOTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqS2NvbmZpZyBhbmQgQlBGIEludGVncmF0aW9uIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgcmVxdWlyZWQgZm9yIHRoaXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIG5ldHdvcmtpbmcgY29kZSBhbmQgdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29uZmlndXJhdGlvbi4gVGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGBhcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlIHRvIGluY2x1ZGUgdGhlIGdlbmVyYWwgQlBGIEtjb25maWcgc2V0dXAsIGJlY2F1c2UgSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGxvY2F0ZSB0aGUgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbnMuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBwb3RlbnRpYWxseSB0d2Vha2luZyB0aGUgQlBGIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmbGFncyBhcmUgc2V0LCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZW0gaW4gdGhlIEtjb25maWcgZmlsZXMsIGxpa2VseSB1bmRlciB0aGUgbmV0d29ya2luZyBvciBwb3NzaWJseSBzZWN1cml0eSBzdWItdHJlZXMuIEZpbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIEJQRiBmZWF0dXJlcyBpbiB0aGUgdGFyZ2V0IGtlcm5lbC4gQWZ0ZXIgbG9jYXRpbmcgdGhlbSwgSSB3aWxsIGFzc2VzcyB3aGVyZSB0aGVzZSBmbGFncyBhcmUgbG9jYXRlZCBpbiB0aGUgYnVpbGQgdHJlZS4gVGhlIG1vcmUgY29udGV4dCBJIGhhdmUsIHRoZSBiZXR0ZXIgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEJQRiBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCB0aGF0LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgc2VjdGlvbiwgcm91Z2hseSBiZXR3ZWVuIGxpbmVzIDI3IGFuZCA2MC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIHN1YnN5c3RlbSBsaWtlIEJQRi4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb25hbGl0eSBvciBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgQlBGIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGFuZCB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBvd2VyUEMgTmV0d29yayBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBwb3dlcnBjIG5ldHdvcmsgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gYGFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGVgLiYjMzQ7IEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgbmV0d29yay1yZWxhdGVkIGRyaXZlcnMgYW5kIG1vZHVsZXMgZm9yIHRoZSBQb3dlclBDIGFyY2hpdGVjdHVyZSB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgc3RhbmRhcmQgR05VIE1ha2UgY29uc3RydWN0czogb2JqZWN0IGZpbGUgbGlzdHMsIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGxpa2VseSBzb21lIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBhbmQgdGFyZ2V0cy4gR2l2ZW4gdGhlIFBvd2VyUEMmIzM5O3MgaGlzdG9yeSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBwbGF0Zm9ybS1zcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgcG9zc2libGUgbGVnYWN5IGNvZGUgY29uc3RydWN0cyB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gc2lmdCB0aHJvdWdoLiBUaGlzIE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIG92ZXJ2aWV3IG9mIGhvdyB0aGUgbmV0d29ya2luZyBzdGFjayBpcyBiZWluZyBpbnRlZ3JhdGVkIGF0IHRoZSBib2FyZCBsZXZlbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEFyY2gtc3BlY2lmaWMgbmV0d29yayBtb2R1bGVzXG4gICA0Olx0I1xuICAgNTpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wJChCSVRTKS5vXG4gICA2Olx0XG4gICA3Olx0aWZkZWYgQ09ORklHX1BQQzY0XG4gICA4Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfdGltZWRfbWF5X2dvdG8ub1xuICAgOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODYyCgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciBQb3dlclBDKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgYmVlbiByZXZpZXdpbmcgYSBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBhcyBmb2xsb3dzOiBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIEpJVCBjb21waWxhdGlvbiwgc3BlY2lmaWNhbGx5IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIHRoZSByZWxldmFudCBQb3dlclBDIGFyY2hpdGVjdHVyZSBmbGFncyBsaWtlIGBQUENgIGFuZCBgUFBDNjRgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhhdCBhcmUgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyB0byBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBicGZfaW50X2ppdF9jb21waWxlYCwgYGJwZl9hcmNoX3RleHRfcG9rZWAsIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYCwgYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfYnVpbGRfZXBpbG9ndWVgLCBhbmQgYGJwZl9hZGRfZXh0YWJsZV9lbnRyeWAuIFRoZXNlIGFyZSBhbGwgc3Ryb25nIGluZGljYXRvcnMgb2YgY29yZSBmdW5jdGlvbmFsaXR5IGJlaW5nIGFsdGVyZWQuIEkgYWxzbyBjaGVja2VkIHdoaWNoIG9mIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLCBvciBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuCgpCYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBJJiMzOTt2ZSBpZGVudGlmaWVkIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAgYXMgdGhlIG1haW4gbm9uLWhvdC1wYXRoIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uLiBUaGV5IGFyZSB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludHMsIGFuZCBsaWtlbHkgdGhlIHBsYWNlcyB3aGVyZSBhIGZ1enplciBjYW4gc3RhcnQgdG8gaW5mbHVlbmNlIGNvZGUgZXhlY3V0aW9uLgoKR2l2ZW4gdGhlc2UgZmluZGluZ3MsIEnigJltIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBhbmQgd2lsbCB0aGVyZWZvcmUgbmVlZCB0byBiZSB0ZXN0ZWQgZm9yIHN0YWJpbGl0eSwgc2VjdXJpdHksIGFuZCBjb3JyZWN0IG9wZXJhdGlvbi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGFkZHJlc3NpbmcgYXNwZWN0cyBsaWtlIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YnMgYWxpZ25tZW50IGFuZCBvZmZzZXRzLCB0YWlsIGNhbGwgY29tcGFyaXNvbnMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGV4dGFibGUgaGFuZGxpbmcsIGFuZCB0aGUgdGV4dCBwb2tpbmcgbWVjaGFuaXNtLiBBbGwgb2YgdGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBKSVQgY29kZSBnZW5lcmF0aW9uIGFuZCBleGVjdXRpb24gZm9yIEJQRiBwcm9ncmFtcyBvbiBQUEMvUFBDNjQgYXJjaGl0ZWN0dXJlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB2aWEgdGhlIEJQRiBzdWJzeXN0ZW0vc3lzY2FsbC4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlIHJlc3VsdHMgdG8gcmVmbGVjdCB0aGlzOiBJJiMzOTtsbCBtYXJrIGl0IGFzIHdvcnRoIGZ1enppbmcgKG9idmlvdXNseSkuIE15IHJlYXNvbmluZyB3aWxsIGhpZ2hsaWdodCB0aGF0IHRoZSBwYXRjaCBhZmZlY3RzIEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbi4gSSYjMzk7bGwgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfYXJjaF90ZXh0X3Bva2VgLiBBbmQgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgbmVlZHMgdGhlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmNoX3RleHRfcG9rZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGxvZ2ljLCBpbmNsdWRpbmcgY29kZSBnZW5lcmF0aW9uIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIGZlbnRyeSBzdHViIGFsaWdubWVudCwgdGV4dCBwb2tpbmcsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGFuZCA2NC1iaXQgdGFpbCBjYWxsIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIEJQRiBwcm9ncmFtIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBiZWhhdmlvciBvbiBQb3dlclBDIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdCopIGFuZCBjb3JyZXNwb25kaW5nIEJQRiBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgbXVsdGktcGFzcyBjb2RlIGdlbmVyYXRpb24gY29udmVyZ2VuY2UsIGFsaWdubWVudCBvZiBmZW50cnkgc3R1YnMvZHVtbXkgdHJhbXBvbGluZSBhZGRyZXNzLCBicmFuY2ggcmFuZ2UgY2hlY2tzLCBhbmQgNjQtYml0IHJlZ2lzdGVyIGNvbXBhcmlzb25zIGZvciB0YWlsIGNhbGxzLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA4OjA5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAppbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaApAQCAtMTQsNiAmIzQzOzE0LDEzIEBACiAjaW5jbHVkZSAmbHQ7YXNtL3BwYy1vcGNvZGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWlsZF9idWcuaCZndDsKIAomIzQzOy8qCiYjNDM7ICogV2UgbmVlZCBhdCBsZWFzdCAyIHBhc3NlcyBmb3IgcHJvcGVyIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIG1heSBuZWVkCiYjNDM7ICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBDT0RFR0VOX01JTl9QQVNTRVMgICAgMgomIzQzOyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDMKJiM0MzsKICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMQogI2RlZmluZSBGVU5DVElPTl9ERVNDUl9TSVpFCTI0CiAjZWxzZQpAQCAtMTg4LDYgJiM0MzsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7CiAKICNkZWZpbmUgYnBmX3RvX3BwYyhyKQkoY3R4LSZndDtiMnBbcl0pCiAKJiM0MzsjaWZkZWYgQ09ORklHX1BQQzY0CiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QUEMzMgogI2RlZmluZSBCUEZfRklYVVBfTEVOCTMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID0mZ3Q7IDEyIGJ5dGVzICovCiAjZWxzZQpAQCAtMjE0LDEwICYjNDM7MjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqCiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsCiAJCSAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTsKIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7CiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsCiYjNDM7CQkJCQkJCQkJCWxvbmcgZXhpdF9hZGRyKTsKIHZvaWQgcHJlcGFyZV9mb3JfZnNlc3Npb25fZmVudHJ5KHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IGNvb2tpZV9jbnQsCiAJCQkJCQkJCWludCBjb29raWVfb2ZmLCBpbnQgcmV0dmFsX29mZik7CiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDdiMDdiNDM1NzVmMTEuLmMyNzE3ZjBkOWNkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYwpAQCAtNDksMTEgJiM0Mzs0OSwzNSBAQCBhc20gKAogJiMzNDsJLnBvcHNlY3Rpb24JCQkJOyYjMzQ7CiApOwogCi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJaW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7CiYjNDM7CWludCBzdHViX3N6OwogCiAJLyoKJiM0MzsJICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLgomIzQzOwkgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLgomIzQzOwkgKiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsIHRvIG1ha2UKJiM0MzsJICogb29sX3N0dWJfaWR4ICZhbXA7IGxvbmdfYnJhbmNoX3N0dWJfaWR4IGNvbnN0YW50IGZyb20gZW5kLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzCiYjNDM7CSAqIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWImIzM5O3MgaW5zdHJ1Y3Rpb24gY291bnQuIFRoZQomIzQzOwkgKiBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKQomIzQzOwkgKiBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGEKJiM0MzsJICogTk9QIGlmIHRoZSBhZGRyZXNzIG9mIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuCiYjNDM7CSAqCiYjNDM7CSAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZQomIzQzOwkgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHMKJiM0MzsJICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kCiYjNDM7CSAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwOwomIzQzOwlpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtJmd0O2lkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpCiYjNDM7CQlFTUlUKFBQQ19SQVdfTk9QKCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKglub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHIKIAkgKiBPdXQtb2YtbGluZSBzdHViOgogCSAqCW1mbHIJcjAKIAkgKglbYnxibF0JdHJhbXAKQEAgLTcwLDQ0ICYjNDM7OTQsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAkvKgogCSAqIExvbmcgYnJhbmNoIHN0dWI6Ci0JICoJLmxvbmcJJmx0O2R1bW15X3RyYW1wX2FkZHImZ3Q7CiAJICoJbWZscglyMTEKIAkgKgliY2wJMjAsMzEsJCYjNDM7NAotCSAqCW1mbHIJcjEyCi0JICoJbGQJcjEyLCAtOC1TWkwocjEyKQomIzQzOwkgKgltZmxyCXIxMgkvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC4KJiM0MzsJICoJbGQJcjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjAKIAkgKgltdGN0cglyMTIKLQkgKgltdGxyCXIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQkkKJiM0MzsJICoJbXRscglyMTEJLy8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJCiAJICoJYmN0cgomIzQzOwkgKgkubG9uZwkmbHQ7ZHVtbXlfdHJhbXBfYWRkciZndDsgIC8vIFNaTCBieXRlcyBhbGlnbmVkCiAJICovCi0JaWYgKGltYWdlKQotCQkqKCh1bnNpZ25lZCBsb25nICopJmFtcDtpbWFnZVtjdHgtJmd0O2lkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7Ci0JY3R4LSZndDtpZHggJiM0Mzs9IFNaTCAvIDQ7CiAJbG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtJmd0O2lkeDsKIAlFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDTDQoKSk7CiAJRU1JVChQUENfUkFXX01GTFIoX1IxMikpOwotCUVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTsKJiM0MzsJRU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7CiAJRU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTsKIAlFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDVFIoKSk7CiAKJiM0MzsJaWYgKGltYWdlKQomIzQzOwkJKigodW5zaWduZWQgbG9uZyAqKSZhbXA7aW1hZ2VbY3R4LSZndDtpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wOwomIzQzOwomIzQzOwljdHgtJmd0O2lkeCAmIzQzOz0gU1pMIC8gNDsKJiM0MzsKIAlpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHsKIAkJYnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtJmd0O2lkeCAtIG9vbF9zdHViX2lkeCkgKiA0OwogCQlicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LSZndDtpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0OwogCX0KIH0KIAotaW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpCiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwKJiM0MzsJCQkJCQkJaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKQogewotCWlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiYjNDM7CWlmIChleGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtJmd0O2lkeCAqIDQpKSkgewogCQlQUENfSk1QKGV4aXRfYWRkcik7Ci0JfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIpIHsKLQkJaWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LSZndDthbHRfZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKAomIzQzOwkJCShsb25nKShjdHgtJmd0O2FsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiAJCVBQQ19KTVAoY3R4LSZndDthbHRfZXhpdF9hZGRyKTsKIAl9IGVsc2UgewogCQljdHgtJmd0O2FsdF9leGl0X2FkZHIgPSBjdHgtJmd0O2lkeCAqIDQ7Ci0JCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7CiYjNDM7CQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNzQsNiAmIzQzOzMwMCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJICovCiAJaWYgKGNnY3R4LnNlZW4gJmFtcDsgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkgewogCQljZ2N0eC5pZHggPSAwOwomIzQzOwkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsICZhbXA7Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpCiAJCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjg2LDcgJiM0MzszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCSAqLwogCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiAJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwotCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgJmFtcDtjZ2N0eCk7CiAKIAlmaXh1cF9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7CiAJZXh0YWJsZV9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpOwpAQCAtMzA2LDEwICYjNDM7MzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJY29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTsKIAlmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKLQkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqLwotCWZvciAocGFzcyA9IDE7IHBhc3MgJmx0OyAzOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiYjNDM7LCBsb29wIHVudGlsIHByb2dyYW0gc2l6ZSBjb252ZXJnZXMuICovCiYjNDM7CWZvciAocGFzcyA9IDE7IHBhc3MgJmx0Oz0gQ09ERUdFTl9NQVhfUEFTU0VTOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHByZXZfcHJvZ2xlbiA9IHByb2dsZW47CiYjNDM7CiAJCS8qIE5vdyBidWlsZCB0aGUgcHJvbG9ndWUsIGJvZHkgY29kZSAmYW1wOyBlcGlsb2d1ZSBmb3IgcmVhbC4gKi8KIAkJY2djdHguaWR4ID0gMDsKJiM0MzsJCWNnY3R4LmV4ZW50cnlfaWR4ID0gMDsKIAkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoY29kZV9iYXNlLCAmYW1wO2NnY3R4KTsKIAkJaWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCAmYW1wO2NnY3R4LCBhZGRycywgcGFzcywKQEAgLTMxOCwxMSAmIzQzOzM0OCwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwkJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwomIzQzOwkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwomIzQzOwkJcHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7CiAKIAkJaWYgKGJwZl9qaXRfZW5hYmxlICZndDsgMSkKIAkJCXByX2luZm8oJiMzNDtQYXNzICVkOiBzaHJpbmsgPSAlZCwgc2VlbiA9IDB4JXhcbiYjMzQ7LCBwYXNzLAotCQkJCXByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pOwomIzQzOwkJCQlwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTsKJiM0MzsKJiM0MzsJCS8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovCiYjNDM7CQlpZiAocGFzcyAmZ3Q7PSBDT0RFR0VOX01JTl9QQVNTRVMgJmFtcDsmYW1wOyBwcm9nbGVuID09IHByZXZfcHJvZ2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyAmYW1wOyZhbXA7IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7QlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xuJiMzNDssCiYjNDM7CQkJCQkJCQlDT0RFR0VOX01BWF9QQVNTRVMpOwomIzQzOwkJCWJwZl9hcmNoX3RleHRfY29weSgmYW1wO2ZoZHItJmd0O3NpemUsICZhbXA7aGRyLSZndDtzaXplLCBzaXplb2YoaGRyLSZndDtzaXplKSk7CiYjNDM7CQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiYjNDM7CQkJZ290byBvdXRfZXJyOwomIzQzOwkJfQogCX0KIAogCWlmIChicGZfaml0X2VuYWJsZSAmZ3Q7IDEpCkBAIC0zNTcsNyAmIzQzOzQwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCQkJKHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKIG91dF9hZGRyczoKLQkJaWYgKCFpbWFnZSAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiYjNDM7CQlpZiAoIWZwLSZndDtqaXRlZCAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiAJCQlmcC0mZ3Q7YXV4LSZndDtwcml2X3N0YWNrX3B0ciA9IE5VTEw7CiAJCQlmcmVlX3BlcmNwdShwcml2X3N0YWNrX3B0cik7CiAJCX0KQEAgLTM5OSw3ICYjNDM7NDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3MKIAl1MzIgKmZpeHVwOwogCiAJLyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqLwotCWlmIChwYXNzICE9IDIpCiYjNDM7CWlmIChwYXNzICZsdDsgQ09ERUdFTl9NSU5fUEFTU0VTKQogCQlyZXR1cm4gMDsKIAogCWlmICghZnAtJmd0O2F1eC0mZ3Q7ZXh0YWJsZSB8fApAQCAtNzM5LDcgJiM0Mzs3ODQsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZQogCQkgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJiMzOTtzIGZyYW1lCiAJCSAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLgogCQkgKi8KLQkJRU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7CiAKQEAgLTEyNjUsNiAmIzQzOzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKQogICogYnBmX2Z1bmM6CiAgKglbbm9wfGJdCW9vbF9zdHViCiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOgomIzQzOyAqCW5vcAkvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudAogICogb29sX3N0dWI6CiAgKgltZmxyCXIwCiAgKglbYnxibF0JJmx0O2JwZl9wcm9nJmd0Oy8mbHQ7bG9uZ19icmFuY2hfc3R1YiZndDsKQEAgLTEyNzIsMTQgJiM0MzsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpCiAgKgliCWJwZl9mdW5jICYjNDM7IDQKICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6CiAgKiBsb25nX2JyYW5jaF9zdHViOgotICoJLmxvbmcJJmx0O2JyYW5jaF9hZGRyJmd0Oy8mbHQ7ZHVtbXlfdHJhbXAmZ3Q7CiAgKgltZmxyCXIxMQogICoJYmNsCTIwLDMxLCQmIzQzOzQKICAqCW1mbHIJcjEyCi0gKglsZAlyMTIsIC0xNihyMTIpCiYjNDM7ICoJbGQJcjEyLCAyMChyMTIpCiAgKgltdGN0cglyMTIKICAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQogICoJYmN0cgomIzQzOyAqCS5sb25nCSZsdDticmFuY2hfYWRkciZndDsvJmx0O2R1bW15X3RyYW1wJmd0OwogICoKICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuCiAgKgpAQCAtMTM4MSwxMCAmIzQzOzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsCiAJICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOgogCSAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHIKIAkgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS4KJiM0MzsJICoKJiM0MzsJICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi4KIAkgKi8KIAlpZiAoKG5ld19hZGRyICZhbXA7JmFtcDsgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8CiAJICAgIChvbGRfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSkKLQkJcmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSwKJiM0MzsJCXJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi8KIAkJCQkgIChuZXdfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/CiAJCQkJICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMKQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgKIAogfQogCi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogewogCUVNSVQoUFBDX1JBV19NUihfUjMsIGJwZl90b19wcGMoQlBGX1JFR18wKSkpOwogCkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovCkBAIC0xMTQ5LDcgJiM0MzsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGUKIAkJCSAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuCiAJCQkgKi8KIAkJCWlmIChpICE9IGZsZW4gLSAxKSB7Ci0JCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7CiYjNDM7CQkJCXJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwKJiM0MzsJCQkJCQkJCWN0eCwgX1IwLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZGFiMTA2Y2FlMjJiNS4uZTgwMzEyMTcxYWE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMjc2LDcgJiM0MzsyNzYsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogCQkgKi8KIAkJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCAwKSk7CiAJCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwgLShCUEZfUFBDX1RBSUxDQUxMKSkpOwotCQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJCUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCQlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCQlFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwKIAkJCQkJCQkJLShCUEZfUFBDX1RBSUxDQUxMKSkpOwpAQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eAogCX0KIH0KIAotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIHsKIAlicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpOwogCkBAIC00MDcsNyAmIzQzOzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qCkBAIC02NjIsNyAmIzQzOzY2Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJUFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpOwogCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpOwogCiAJLyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovCkBAIC02NzIsNyAmIzQzOzY3Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKQogCSAqICAgZ290byBvdXQ7CiAJICovCi0JRU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCVBQQ19CQ0NfU0hPUlQoQ09ORF9FUSwgb3V0KTsKIAogCS8qCkBAIC03MDcsNyAmIzQzOzcwNyw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogdGFpbF9jYWxsX2luZm8uCiAJICovCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCiAJLyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi8KQEAgLTE3MzcsNyAmIzQzOzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZQogCQkJICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS4KIAkJCSAqLwogCQkJaWYgKGkgIT0gZmxlbiAtIDEpIHsKLQkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIHRtcDFfcmVnLCBleGl0X2FkZHIpOwomIzQzOwkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCwKJiM0MzsJCQkJCQkJCXRtcDFfcmVnLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMKaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYwpAQCAtMTc5LDkgJiM0MzsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvID0ge307CiAJX191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7CiAJX191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7CiYjNDM7CV9fdTMyIHRydW5jX2xlbiA9IDAsIGRpc2FzbV9sZW47CiAJX191MzIgKmZ1bmNfbGVucyA9IE5VTEw7CiAJRklMRSAqdGV4dF9vdXQgPSBOVUxMOwogCXVpbnQ4X3QgKmltYWdlID0gTlVMTDsKJiM0MzsJY2hhciAqdHJpcGxlID0gTlVMTDsKIAlpbnQgaSwgZXJyID0gMDsKIAogCWlmICghbGx2bV9pbml0aWFsaXplZCkgewpAQCAtMjI1LDkgJiM0MzsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzImIzM0OykpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUCiYjNDM7CSAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYywKJiM0MzsJICogd2hpY2ggY2FuJiMzOTt0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uCiYjNDM7CSAqLwomIzQzOwl0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpOwomIzQzOwlpZiAodHJpcGxlKSB7CiYjNDM7CQlpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjNjQmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgJiMzNDtwcGM2NCYjMzQ7KSkKJiM0MzsJCQl0cnVuY19sZW4gPSA4OwomIzQzOwkJZWxzZSBpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsICYjMzQ7cHBjJiMzNDspKQomIzQzOwkJCXRydW5jX2xlbiA9IDQ7CiYjNDM7CQlMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTsKJiM0MzsJfQomIzQzOwogCWZvciAocGMgPSAwLCBpID0gMDsgaSAmbHQ7IGppdGVkX2Z1bmNzOyAmIzQzOyYjNDM7aSkgewogCQlmcHJpbnRmKHRleHRfb3V0LCAmIzM0O2Z1bmMgIyVkOlxuJiMzNDssIGkpOwotCQlkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICYjNDM7IHBjLCBmdW5jX2xlbnNbaV0pOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERpc2FibGVkIEpJVCBoYXZlIHplcm8gZnVuY19sZW5zLCBoZW5jZSB1bmRlcmZsb3cKJiM0MzsJCSAqLwomIzQzOwkJZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSAmZ3Q7IHRydW5jX2xlbiA/CiYjNDM7CQkJCQlmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwOwomIzQzOwkJZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZGlzYXNtX2xlbik7CiYjNDM7CiAJCWZwcmludGYodGV4dF9vdXQsICYjMzQ7XG4mIzM0Oyk7CiAJCXBjICYjNDM7PSBmdW5jX2xlbnNbaV07CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaApAQCAtMTU5LDYgJiM0MzsxNTksNyBAQAogI2RlZmluZSBfX2FyY2hfcmlzY3Y2NAkJX19hcmNoKCYjMzQ7UklTQ1Y2NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfczM5MHgJCV9fYXJjaCgmIzM0O3MzOTB4JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2gJX19hcmNoKCYjMzQ7TE9PTkdBUkNIJiMzNDspCiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0CV9fYXJjaCgmIzM0O1BPV0VSUEM2NCYjMzQ7KQogI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2NhcHNfdW5wcml2PSYjMzQ7IEVYUEFORF9RVU9URShjYXBzKSkKICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKCkJX190ZXN0X3RhZygmIzM0O2xvYWRfbW9kZT1qaXRlZCYjMzQ7KQogI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKQlfX3Rlc3RfdGFnKCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKaW5kZXggNDhmYTM0ZDI5NTlmNC4uOTg4MGNlNGYxOTMxYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYwpAQCAtOTEsNiAmIzQzOzkxLDg0IEBAIF9faml0ZWQoJiMzNDsJcG9wcQklcmF4JiMzNDspCiBfX2ppdGVkKCYjMzQ7CWptcAl7ey4qfX0mIzM0OykJCS8qIGp1bXAgdG8gdGFpbCBjYWxsIHRndCAgICovCiBfX2ppdGVkKCYjMzQ7TDA6CWxlYXZlJiMzNDspCiBfX2ppdGVkKCYjMzQ7CXt7KHJldHF8am1wCTB4KX19JiMzNDspCQkvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovCiYjNDM7X19hcmNoX3Bvd2VycGM2NAomIzQzOy8qIHByb2dyYW0gZW50cnkgZm9yIG1haW4oKSwgcmVndWxhciBmdW5jdGlvbiBwcm9sb2d1ZSAqLwomIzQzO19faml0ZWQoJiMzNDsJbm9wJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwlsaSA5LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1mbHIgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc3RkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGR1IDEsIHt7Lip9fSgxKSYjMzQ7KQomIzQzOy8qCiYjNDM7ICogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogQWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gZGlmZmVycyBiZXR3ZWVuIFBDUkVMIGFuZCBub24tUENSRUwga2VybmVscy4KJiM0MzsgKiBTa2lwIHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2UgYW5kIHZlcmlmeSBvbmx5IHRoYXQgdGhlIGNhbGwKJiM0MzsgKiB0YXJnZXQgaXMgbG9hZGVkIGludG8gQ1RSIGJlZm9yZSBicmFuY2hpbmcuCiYjNDM7ICovCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliY3RybCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJOCwgMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGkgOCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxLCAxLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGxyIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTMsIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJsciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7ZnVuYyAjMSYjMzQ7KQomIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovCiYjNDM7X19qaXRlZCgmIzM0Owlub3AmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi8KJiM0MzsvKiB0YWlsIGNhbGwgcHJvbG9ndWUgZm9yIHN1YnByb2dyYW0gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCAwKDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAtOCgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQk5LCAzMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgOSwgMTAsIC04JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpcyB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc2xkaSB7ey4qfX0sIHt7Lip9fSwgMzImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpIHt7Lip9fSwge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpIHt7Lip9fSwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbHd6IDksIHt7Lip9fSh7ey4qfX0pJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzbHdpIHt7Lip9fSwge3suKn19LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsdwl7ey4qfX0sIDkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCTAsIHt7Lip9fSYjMzQ7KQomIzQzOy8qIGJwZl90YWlsX2NhbGwgaW1wbGVtZW50YXRpb24gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDksIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAwKDkpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDksIDksIDEmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW11bGxpIDEwLCB7ey4qfX0sIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZCAxMCwgMTAsIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIHt7Lip9fSgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQkxMCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCB7ey4qfX0oMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDEwLCAxMCwge3suKn19JiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciAxMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJMTAsIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlidAl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxMCwgMSwgLTgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZCA5LCAwKDEwKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmN0ciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJMywgOCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmxyJiMzNDspCiYjNDM7CiBTRUMoJiMzNDt0YyYjMzQ7KQogX19uYWtlZCBpbnQgbWFpbih2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwppbmRleCAzY2UzMmQxMzRlMmNjLi4wMWIxNDIwMDk3ZDI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwpAQCAtMzc4LDYgJiM0MzszNzgsNyBAQCBlbnVtIGFyY2ggewogCUFSQ0hfUklTQ1Y2NAk9IDB4OCwKIAlBUkNIX1MzOTBYCT0gMHgxMCwKIAlBUkNIX0xPT05HQVJDSAk9IDB4MjAsCiYjNDM7CUFSQ0hfUE9XRVJQQzY0CT0gMHg0MCwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKQpAQCAtMzkyLDYgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKIAlyZXR1cm4gQVJDSF9TMzkwWDsKICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXykKIAlyZXR1cm4gQVJDSF9MT09OR0FSQ0g7CiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQomIzQzOwlyZXR1cm4gQVJDSF9QT1dFUlBDNjQ7CiAjZW5kaWYKIAlyZXR1cm4gQVJDSF9VTktOT1dOOwogfQpAQCAtNTg1LDYgJiM0Mzs1ODgsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlciwKIAkJCQlhcmNoID0gQVJDSF9TMzkwWDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtMT09OR0FSQ0gmIzM0OykgPT0gMCkgewogCQkJCWFyY2ggPSBBUkNIX0xPT05HQVJDSDsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7UE9XRVJQQzY0JiMzNDspID09IDApIHsKJiM0MzsJCQkJYXJjaCA9IEFSQ0hfUE9XRVJQQzY0OwogCQkJfSBlbHNlIHsKIAkJCQlQUklOVF9GQUlMKCYjMzQ7YmFkIGFyY2ggc3BlYzogJiMzOTslcyYjMzk7XG4mIzM0OywgdmFsKTsKIAkJCQllcnIgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDEKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMTI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBQb3dlclBDIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIEl0IGFwcGVhcnMgdG8gZm9jdXMgZXhjbHVzaXZlbHkgb24gaW1wcm92ZW1lbnRzIGFuZCBmaXhlcyB3aXRoaW4gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlci4gVGhlIGZpbGVzIHRvdWNoZWQgYXJlIGFsbCB3aXRoaW4gdGhlIGBhcmNoL3Bvd2VycGMvbmV0L2AgZGlyZWN0b3J5LCBkZWFsaW5nIHdpdGggQlBGIEpJVCBjb21waWxhdGlvbiwgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBzZWxmdGVzdHMuCgpNeSBpbml0aWFsIHNjYW4gcmV2ZWFscyBzZXZlcmFsIGtleSBtb2RpZmljYXRpb25zOiB0aGUgaW50cm9kdWN0aW9uIG9mIGBDT0RFR0VOX01JTl9QQVNTRVNgIGFuZCBgQ09ERUdFTl9NQVhfUEFTU0VTYCwgYWRqdXN0bWVudHMgdG8gaG93IGZlbnRyeSBzdHVicyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYWxpZ25tZW50IGlzc3VlcyByZWxhdGVkIHRvIGBkdW1teV90cmFtcF9hZGRyYCB3aXRoaW4gdGhlIGBmaW1hZ2VgLCBhbmQgZml4ZXMgdG8gdGhlIGBleGl0X2FkZHJgIGJyYW5jaCByYW5nZSBjaGVjay4gVGhlcmUmIzM5O3MgYWxzbyBhbiB1cGRhdGUgdG8gNjQtYml0IGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25zIGZvciB0YWlsIGNhbGxzLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgYnBmX2FyY2hfdGV4dF9wb2tlYCB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGBkdW1teV90cmFtcF9hZGRyYCBsb2NhdGlvbi4gUGx1cywgdGhlIHNlbGZ0ZXN0cyBoYXZlIGJlZW4gdXBkYXRlZC4KClRoaW5raW5nIGFib3V0IEtNU0FOLCBpdCYjMzk7cyB3b3J0aCBub3RpbmcgdGhhdCBLTVNBTiBpdHNlbGYgaXMgbm90IHN1cHBvcnRlZCBvbiBQb3dlclBDLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHJlZ2FyZGxlc3Mgb2YgYXJjaCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gcnVsZXMuIFRoZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGFuZCBzZWxmdGVzdHMsIGZvY3VzaW5nIG9uIGltcHJvdmluZyB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgYW5kIGVuc3VyaW5nIGNvcnJlY3Qgb3BlcmF0aW9uLiBUaGVyZSYjMzk7cyBubyBtb2RpZmljYXRpb24gb2Yga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgZnVuY3Rpb25zIG1vZGlmeWluZyB0aGUgSklUIGltYWdlIGJ1ZmZlci4gVGhlIGNvZGUgd3JpdGVzIGR1bW15X3RyYW1wIG9yIE5PUHMgdG8gdGhlIEpJVCBpbWFnZSBidWZmZXIuIEFsc28gdGhlIEpJVCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQvZnJlZWQgYnkgdGhlIGJpbmFyeSBwYWNrIGFsbG9jYXRvci4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzLCBvciBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZS4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIEtNU0FOIHJ1bGVzIHJpZ29yb3VzbHksIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gYGZhbHNlYC4KCkhlcmUmIzM5O3MgbXkgZGV0YWlsZWQgcmVhc29uaW5nOiBUaGUgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBhbmQgc2VsZnRlc3RzLiBJdCByZXNvbHZlcyBKSVQgY29kZSBnZW5lcmF0aW9uIGlzc3VlcywgYWRkcmVzc2VzIGZlbnRyeSB0cmFtcG9saW5lIGFsaWdubWVudCwgY29ycmVjdHMgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucywgYW5kIHVwZGF0ZXMgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIHJlbGF0ZWQgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbW9yZSByZWxhdGVkIHRvIGp1bXAgdGFyZ2V0IG1pc2NhbGN1bGF0aW9ucyBvciBidWZmZXIgYm91bmRzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgKGFuZCBLU0FOIGlzIG5vdCBldmVuIHN1cHBvcnRlZCBvbiBQb3dlclBDIGFueXdheSkuCgpUaW1lIHRvIHByZXBhcmUgdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciAoYXJjaC9wb3dlcnBjL25ldC9icGZfaml0KikgYW5kIGNvcnJlc3BvbmRpbmcgQlBGIHNlbGZ0ZXN0cy4gVGhlIGNoYW5nZXMgYWRkcmVzcyBtdWx0aS1wYXNzIGNvZGUgZ2VuZXJhdGlvbiBjb252ZXJnZW5jZSwgYWxpZ25tZW50IG9mIGZlbnRyeSBzdHVicy9kdW1teSB0cmFtcG9saW5lIGFkZHJlc3MsIGJyYW5jaCByYW5nZSBjaGVja3MsIGFuZCA2NC1iaXQgcmVnaXN0ZXIgY29tcGFyaXNvbnMgZm9yIHRhaWwgY2FsbHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gSklUIGNvZGUgZ2VuZXJhdGlvbiBvciBidWZmZXIgc2l6aW5nIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGNvbXBpbGVyIHZlcmlmaWNhdGlvbiwgcnVudGltZSBleGVjdXRpb24gdGVzdHMsIG9yIEtBU0FOLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciAoYXJjaC9wb3dlcnBjL25ldC9icGZfaml0KikgYW5kIGNvcnJlc3BvbmRpbmcgQlBGIHNlbGZ0ZXN0cy4gVGhlIGNoYW5nZXMgYWRkcmVzcyBtdWx0aS1wYXNzIGNvZGUgZ2VuZXJhdGlvbiBjb252ZXJnZW5jZSwgYWxpZ25tZW50IG9mIGZlbnRyeSBzdHVicy9kdW1teSB0cmFtcG9saW5lIGFkZHJlc3MsIGJyYW5jaCByYW5nZSBjaGVja3MsIGFuZCA2NC1iaXQgcmVnaXN0ZXIgY29tcGFyaXNvbnMgZm9yIHRhaWwgY2FsbHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gSklUIGNvZGUgZ2VuZXJhdGlvbiBvciBidWZmZXIgc2l6aW5nIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGNvbXBpbGVyIHZlcmlmaWNhdGlvbiwgcnVudGltZSBleGVjdXRpb24gdGVzdHMsIG9yIEtBU0FOLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOTozNC43NDgyODY1MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYxNDI4OTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9hcmNoX3RleHRfcG9rZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciAoYXJjaC9wb3dlcnBjL25ldC9icGZfaml0KikgYW5kIGNvcnJlc3BvbmRpbmcgQlBGIHNlbGZ0ZXN0cy4gVGhlIGNoYW5nZXMgYWRkcmVzcyBtdWx0aS1wYXNzIGNvZGUgZ2VuZXJhdGlvbiBjb252ZXJnZW5jZSwgYWxpZ25tZW50IG9mIGZlbnRyeSBzdHVicy9kdW1teSB0cmFtcG9saW5lIGFkZHJlc3MsIGJyYW5jaCByYW5nZSBjaGVja3MsIGFuZCA2NC1iaXQgcmVnaXN0ZXIgY29tcGFyaXNvbnMgZm9yIHRhaWwgY2FsbHMuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8ga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBKSVQgY29kZSBnZW5lcmF0aW9uIG9yIGJ1ZmZlciBzaXppbmcgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgY29tcGlsZXIgdmVyaWZpY2F0aW9uLCBydW50aW1lIGV4ZWN1dGlvbiB0ZXN0cywgb3IgS0FTQU4sIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRyYWNraW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDk6MzQuNzQ4MjkxMDQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU0NDE3NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowOTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXFxuaW5kZXggZjMyZGU4NzA0ZDRkOS4uNGRhOGJkZTkyZTFlZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXFxuQEAgLTE0LDYgKzE0LDEzIEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHBjLW9wY29kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcXHUwMDNlXFxuIFxcbisvKlxcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcXG4rICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuXFxuKyAqL1xcbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXFxuKyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDNcXG4rXFxuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxcbiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkVcXHQyNFxcbiAjZWxzZVxcbkBAIC0xODgsNiArMTk1LDEyIEBAIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xcbiBcXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXFx0KGN0eC1cXHUwMDNlYjJwW3JdKVxcbiBcXG4rI2lmZGVmIENPTkZJR19QUEM2NFxcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgUFBDX1JBV19DTVBMTEkoYSwgaSkgICAgUFBDX1JBV19DTVBMV0koYSwgaSlcXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX1BQQzMyXFxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlxcdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cXHUwMDNlIDEyIGJ5dGVzICovXFxuICNlbHNlXFxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXFxuIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0ICAgICAgIHUzMiAqYWRkcnMsIGludCBwYXNzLCBib29sIGV4dHJhX3Bhc3MpO1xcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcXG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxvbmcgZXhpdF9hZGRyKTtcXG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcXG4gdm9pZCBzdG9yZV9mdW5jX21ldGEodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZik7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggN2IwN2I0MzU3NWYxMS4uYzI3MTdmMGQ5Y2RkNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC00OSwxMSArNDksMzUgQEAgYXNtIChcXG4gXFxcIlxcdC5wb3BzZWN0aW9uXFx0XFx0XFx0XFx0O1xcXCJcXG4gKTtcXG4gXFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIHtcXG4gXFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XFxuK1xcdGludCBzdHViX3N6O1xcbiBcXG4gXFx0LypcXG4rXFx0ICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLlxcbitcXHQgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLlxcbitcXHQgKiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsIHRvIG1ha2VcXG4rXFx0ICogb29sX3N0dWJfaWR4IFxcdTAwMjYgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWwgYWxpZ25tZW50IGRlcGVuZHNcXG4rXFx0ICogb24gc3RhcnQgb2YgZmltYWdlIGFuZCB0aGUgc3R1YidzIGluc3RydWN0aW9uIGNvdW50LiBUaGVcXG4rXFx0ICogc3R1YnMgYmxvY2sgaGFzIDExIGluc3RydWN0aW9ucyAod2l0aCBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSlcXG4rXFx0ICogb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KSBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhXFxuK1xcdCAqIE5PUCBpZiB0aGUgYWRkcmVzcyBvZiBkdW1teV90cmFtcF9hZGRyIGlzIG5vbiBhbGlnbmVkLlxcbitcXHQgKlxcbitcXHQgKiBJbiBwYXNzPTAgd2hlbiBpbWFnZT09TlVMTCwgY29uc2VydmF0aXZlbHkgYWNjb3VudCBmb3Igc3BhY2VcXG4rXFx0ICogcmVxdWlyZWQgdG8gYWNjb21tb2RhdGUgYWxpZ25tZW50IE5PUC4gSW4gY2FzZSBmaW5hbCBwYXNzIHNraXBzXFxuK1xcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxcbitcXHQgKiBqaXRlZF9sZW4gc2lnbmlmaWVzIGNvcnJlY3QgcHJvZ3JhbSBzaXplLlxcbitcXHQgKi9cXG4rXFxuK1xcdHN0dWJfc3ogPSBJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSA/IDQ0IDogNDA7XFxuK1xcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICsgY3R4LVxcdTAwM2VpZHgqNCArIHN0dWJfc3osIFNaTCkpXFxuK1xcdFxcdEVNSVQoUFBDX1JBV19OT1AoKSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKlxcdG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkclxcbiBcXHQgKiBPdXQtb2YtbGluZSBzdHViOlxcbiBcXHQgKlxcdG1mbHJcXHRyMFxcbiBcXHQgKlxcdFtifGJsXVxcdHRyYW1wXFxuQEAgLTcwLDQ0ICs5NCw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIExvbmcgYnJhbmNoIHN0dWI6XFxuLVxcdCAqXFx0LmxvbmdcXHRcXHUwMDNjZHVtbXlfdHJhbXBfYWRkclxcdTAwM2VcXG4gXFx0ICpcXHRtZmxyXFx0cjExXFxuIFxcdCAqXFx0YmNsXFx0MjAsMzEsJCs0XFxuLVxcdCAqXFx0bWZsclxcdHIxMlxcbi1cXHQgKlxcdGxkXFx0cjEyLCAtOC1TWkwocjEyKVxcbitcXHQgKlxcdG1mbHJcXHRyMTJcXHQvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC5cXG4rXFx0ICpcXHRsZFxcdHIxMiwgMjAocjEyKSAvLyBvZmZzZXQoZHVtbXlfdHJhbXBfYWRkcikgZnJvbSBwcmV2IGluc3QuIGlzIDIwXFxuIFxcdCAqXFx0bXRjdHJcXHRyMTJcXG4tXFx0ICpcXHRtdGxyXFx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxcbitcXHQgKlxcdG10bHJcXHRyMTFcXHQvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcXG4gXFx0ICpcXHRiY3RyXFxuK1xcdCAqXFx0LmxvbmdcXHRcXHUwMDNjZHVtbXlfdHJhbXBfYWRkclxcdTAwM2UgIC8vIFNaTCBieXRlcyBhbGlnbmVkXFxuIFxcdCAqL1xcbi1cXHRpZiAoaW1hZ2UpXFxuLVxcdFxcdCooKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2aW1hZ2VbY3R4LVxcdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xcbi1cXHRjdHgtXFx1MDAzZWlkeCArPSBTWkwgLyA0O1xcbiBcXHRsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC1cXHUwMDNlaWR4O1xcbiBcXHRFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19CQ0w0KCkpO1xcbiBcXHRFTUlUKFBQQ19SQVdfTUZMUihfUjEyKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTtcXG4rXFx0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19NVENUUihfUjEyKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTtcXG4gXFx0RU1JVChQUENfUkFXX0JDVFIoKSk7XFxuIFxcbitcXHRpZiAoaW1hZ2UpXFxuK1xcdFxcdCooKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2aW1hZ2VbY3R4LVxcdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VpZHggKz0gU1pMIC8gNDtcXG4rXFxuIFxcdGlmICghYnBmX2ppdF9vb2xfc3R1Yikge1xcbiBcXHRcXHRicGZfaml0X29vbF9zdHViID0gKGN0eC1cXHUwMDNlaWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7XFxuIFxcdFxcdGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtXFx1MDAzZWlkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7XFxuIFxcdH1cXG4gfVxcbiBcXG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXFxuK2ludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcXG4ge1xcbi1cXHRpZiAoIWV4aXRfYWRkciB8fCBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChjdHgtXFx1MDAzZWlkeCAqIDQpKSkge1xcbitcXHRpZiAoZXhpdF9hZGRyIFxcdTAwMjZcXHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGxvbmcpKGN0eC1cXHUwMDNlaWR4ICogNCkpKSB7XFxuIFxcdFxcdFBQQ19KTVAoZXhpdF9hZGRyKTtcXG4tXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LVxcdTAwM2VhbHRfZXhpdF9hZGRyIC0gKGN0eC1cXHUwMDNlaWR4ICogNCkpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkciBcXHUwMDI2XFx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKFxcbitcXHRcXHRcXHQobG9uZykoY3R4LVxcdTAwM2VhbHRfZXhpdF9hZGRyKSAtIChsb25nKShjdHgtXFx1MDAzZWlkeCAqIDQpKSkge1xcbiBcXHRcXHRQUENfSk1QKGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkcik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkciA9IGN0eC1cXHUwMDNlaWR4ICogNDtcXG4tXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgY3R4KTtcXG4rXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgZmltYWdlLCBjdHgpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjc0LDYgKzMwMCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdCAqL1xcbiBcXHRpZiAoY2djdHguc2VlbiBcXHUwMDI2IFNFRU5fVEFJTENBTEwgfHwgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY2djdHguaWR4ICogNCkpIHtcXG4gXFx0XFx0Y2djdHguaWR4ID0gMDtcXG4rXFx0XFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XFxuIFxcdFxcdGlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsIFxcdTAwMjZjZ2N0eCwgYWRkcnMsIDAsIGZhbHNlKSlcXG4gXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuQEAgLTI4Niw3ICszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHQgKi9cXG4gXFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCBcXHUwMDI2Y2djdHgpO1xcbiBcXHRhZGRyc1tmcC1cXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XFxuLVxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgXFx1MDAyNmNnY3R4KTtcXG4rXFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBOVUxMLCBcXHUwMDI2Y2djdHgpO1xcbiBcXG4gXFx0Zml4dXBfbGVuID0gZnAtXFx1MDAzZWF1eC1cXHUwMDNlbnVtX2V4ZW50cmllcyAqIEJQRl9GSVhVUF9MRU4gKiA0O1xcbiBcXHRleHRhYmxlX2xlbiA9IGZwLVxcdTAwM2VhdXgtXFx1MDAzZW51bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7XFxuQEAgLTMwNiwxMCArMzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdGNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcXG4gXFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XFxuIFxcbi1cXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xcbi1cXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2MgMzsgcGFzcysrKSB7XFxuK1xcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yKywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqL1xcbitcXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcysrKSB7XFxuK1xcdFxcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xcbitcXG4gXFx0XFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFxcdTAwMjYgZXBpbG9ndWUgZm9yIHJlYWwuICovXFxuIFxcdFxcdGNnY3R4LmlkeCA9IDA7XFxuK1xcdFxcdGNnY3R4LmV4ZW50cnlfaWR4ID0gMDtcXG4gXFx0XFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XFxuIFxcdFxcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoY29kZV9iYXNlLCBcXHUwMDI2Y2djdHgpO1xcbiBcXHRcXHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFxcdTAwMjZjZ2N0eCwgYWRkcnMsIHBhc3MsXFxuQEAgLTMxOCwxMSArMzQ4LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdFxcdFxcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xcbiBcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdFxcdH1cXG4tXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIFxcdTAwMjZjZ2N0eCk7XFxuK1xcdFxcdGFkZHJzW2ZwLVxcdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcXG4rXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFxcdTAwMjZjZ2N0eCk7XFxuK1xcbitcXHRcXHRwcm9nbGVuID0gY2djdHguaWR4ICogNDtcXG4gXFxuIFxcdFxcdGlmIChicGZfaml0X2VuYWJsZSBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlBhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcXFxuXFxcIiwgcGFzcyxcXG4tXFx0XFx0XFx0XFx0cHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7XFxuK1xcdFxcdFxcdFxcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xcbitcXG4rXFx0XFx0LyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi9cXG4rXFx0XFx0aWYgKHBhc3MgXFx1MDAzZT0gQ09ERUdFTl9NSU5fUEFTU0VTIFxcdTAwMjZcXHUwMDI2IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcXHUwMDI2XFx1MDAyNiBwcm9nbGVuICE9IHByZXZfcHJvZ2xlbikge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIkJQRiBKSVQ6IFByb2dyYW0gZGlkIG5vdCBjb252ZXJnZSBhZnRlciAlZCBwYXNzZXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdENPREVHRU5fTUFYX1BBU1NFUyk7XFxuK1xcdFxcdFxcdGJwZl9hcmNoX3RleHRfY29weShcXHUwMDI2Zmhkci1cXHUwMDNlc2l6ZSwgXFx1MDAyNmhkci1cXHUwMDNlc2l6ZSwgc2l6ZW9mKGhkci1cXHUwMDNlc2l6ZSkpO1xcbitcXHRcXHRcXHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChicGZfaml0X2VuYWJsZSBcXHUwMDNlIDEpXFxuQEAgLTM1Nyw3ICs0MDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHRcXHRcXHRcXHQodm9pZCAqKWZpbWFnZSArIEZVTkNUSU9OX0RFU0NSX1NJWkUpO1xcbiBcXG4gb3V0X2FkZHJzOlxcbi1cXHRcXHRpZiAoIWltYWdlIFxcdTAwMjZcXHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XFxuK1xcdFxcdGlmICghZnAtXFx1MDAzZWppdGVkIFxcdTAwMjZcXHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XFxuIFxcdFxcdFxcdGZwLVxcdTAwM2VhdXgtXFx1MDAzZXByaXZfc3RhY2tfcHRyID0gTlVMTDtcXG4gXFx0XFx0XFx0ZnJlZV9wZXJjcHUocHJpdl9zdGFja19wdHIpO1xcbiBcXHRcXHR9XFxuQEAgLTM5OSw3ICs0NDQsNyBAQCBpbnQgYnBmX2FkZF9leHRhYmxlX2VudHJ5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBpbnQgcGFzc1xcbiBcXHR1MzIgKmZpeHVwO1xcbiBcXG4gXFx0LyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqL1xcbi1cXHRpZiAocGFzcyAhPSAyKVxcbitcXHRpZiAocGFzcyBcXHUwMDNjIENPREVHRU5fTUlOX1BBU1NFUylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoIWZwLVxcdTAwM2VhdXgtXFx1MDAzZWV4dGFibGUgfHxcXG5AQCAtNzM5LDcgKzc4NCw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRlXFxuIFxcdFxcdCAqIFNldHRpbmcgdGhlIHRhaWxfY2FsbF9pbmZvIGluIHRyYW1wb2xpbmUncyBmcmFtZVxcbiBcXHRcXHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRcXHRFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0XFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcXG4gXFx0XFx0RU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7XFxuIFxcbkBAIC0xMjY1LDYgKzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxcbiAgKiBicGZfZnVuYzpcXG4gICpcXHRbbm9wfGJdXFx0b29sX3N0dWJcXG4gICogMi4gT3V0LW9mLWxpbmUgc3R1YjpcXG4rICpcXHRub3BcXHQvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudFxcbiAgKiBvb2xfc3R1YjpcXG4gICpcXHRtZmxyXFx0cjBcXG4gICpcXHRbYnxibF1cXHRcXHUwMDNjYnBmX3Byb2dcXHUwMDNlL1xcdTAwM2Nsb25nX2JyYW5jaF9zdHViXFx1MDAzZVxcbkBAIC0xMjcyLDE0ICsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXFxuICAqXFx0YlxcdGJwZl9mdW5jICsgNFxcbiAgKiAzLiBMb25nIGJyYW5jaCBzdHViOlxcbiAgKiBsb25nX2JyYW5jaF9zdHViOlxcbi0gKlxcdC5sb25nXFx0XFx1MDAzY2JyYW5jaF9hZGRyXFx1MDAzZS9cXHUwMDNjZHVtbXlfdHJhbXBcXHUwMDNlXFxuICAqXFx0bWZsclxcdHIxMVxcbiAgKlxcdGJjbFxcdDIwLDMxLCQrNFxcbiAgKlxcdG1mbHJcXHRyMTJcXG4tICpcXHRsZFxcdHIxMiwgLTE2KHIxMilcXG4rICpcXHRsZFxcdHIxMiwgMjAocjEyKVxcbiAgKlxcdG10Y3RyXFx0cjEyXFxuICAqXFx0bXRsclxcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcXG4gICpcXHRiY3RyXFxuKyAqXFx0LmxvbmdcXHRcXHUwMDNjYnJhbmNoX2FkZHJcXHUwMDNlL1xcdTAwM2NkdW1teV90cmFtcFxcdTAwM2VcXG4gICpcXG4gICogZHVtbXlfdHJhbXAgaXMgdXNlZCB0byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cy5cXG4gICpcXG5AQCAtMTM4MSwxMCArMTQyNywxMiBAQCBpbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcXG4gXFx0ICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOlxcbiBcXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXFxuIFxcdCAqIGhlcmUuIE90aGVyd2lzZSwgcmV2ZXJ0IHRvIGR1bW15X3RyYW1wLCBidXQgb25seSBpZiB3ZSBoYWQgcGF0Y2hlZCBvbGRfYWRkciBoZXJlLlxcbitcXHQgKlxcbitcXHQgKiBkdW1teV90cmFtcF9hZGRyIG1vdmVkIHRvIGJvdHRvbSBvZiBsb25nIGJyYW5jaCBzdHViLlxcbiBcXHQgKi9cXG4gXFx0aWYgKChuZXdfYWRkciBcXHUwMDI2XFx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgfHxcXG4gXFx0ICAgIChvbGRfYWRkciBcXHUwMDI2XFx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShvbGRfYWRkciAtIGlwKSkpXFxuLVxcdFxcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiAtIFNaTCksXFxuK1xcdFxcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi9cXG4gXFx0XFx0XFx0XFx0ICAobmV3X2FkZHIgXFx1MDAyNlxcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpID9cXG4gXFx0XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTtcXG4gXFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXFxuaW5kZXggYmZkYzUwNzQwZGE4ZS4uZjViOTQ0MWNmNDZhYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5AQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4XFxuIFxcbiB9XFxuIFxcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRFTUlUKFBQQ19SQVdfTVIoX1IzLCBicGZfdG9fcHBjKEJQRl9SRUdfMCkpKTtcXG4gXFxuQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbiBcXG4gXFx0RU1JVChQUENfUkFXX0JMUigpKTtcXG4gXFxuLVxcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xcbitcXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xcbiB9XFxuIFxcbiAvKiBSZWxhdGl2ZSBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiBmaW5hbCBpbWFnZSBsb2NhdGlvbiAqL1xcbkBAIC0xMTQ5LDcgKzExNDksOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxcbiBcXHRcXHRcXHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoaSAhPSBmbGVuIC0gMSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgsIF9SMCwgZXhpdF9hZGRyKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBkYWIxMDZjYWUyMmI1Li5lODAzMTIxNzFhYTc0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFx0XFx0ICovXFxuIFxcdFxcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcXG4tXFx0XFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdFxcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRcXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0LShCUEZfUFBDX1RBSUxDQUxMKSkpO1xcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcXG4gXFx0fVxcbiB9XFxuIFxcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xcbiBcXG5AQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xcbiBcXG4tXFx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XFxuK1xcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTY2Miw3ICs2NjIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfR0UsIG91dCk7XFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTtcXG4gXFxuIFxcdC8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqL1xcbkBAIC02NzIsNyArNjcyLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKVxcbiBcXHQgKiAgIGdvdG8gb3V0O1xcbiBcXHQgKi9cXG4tXFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XFxuIFxcbiBcXHQvKlxcbkBAIC03MDcsNyArNzA3LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogdGFpbF9jYWxsX2luZm8uXFxuIFxcdCAqL1xcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcXG4gXFxuIFxcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXFxuQEAgLTE3MzcsNyArMTczNyw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXFxuIFxcdFxcdFxcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChpICE9IGZsZW4gLSAxKSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCAzNTU4ZmUxMGUyOGNmLi5iMjkxZDkzNGRkMWFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xcbkBAIC0xNzksOSArMTc5LDExIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXFxuIFxcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm8gPSB7fTtcXG4gXFx0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuIFxcdF9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjO1xcbitcXHRfX3UzMiB0cnVuY19sZW4gPSAwLCBkaXNhc21fbGVuO1xcbiBcXHRfX3UzMiAqZnVuY19sZW5zID0gTlVMTDtcXG4gXFx0RklMRSAqdGV4dF9vdXQgPSBOVUxMO1xcbiBcXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XFxuK1xcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XFxuIFxcdGludCBpLCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKCFsbHZtX2luaXRpYWxpemVkKSB7XFxuQEAgLTIyNSw5ICsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcXG4gXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBsYXN0IDggYnl0ZXMgY29udGFpbnMgZHVtbXlfdHJhbXBvbGluZSBhZGRyZXNzIGluIEpJVFxcbitcXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXFxuK1xcdCAqIHdoaWNoIGNhbid0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uXFxuK1xcdCAqL1xcbitcXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xcbitcXHRpZiAodHJpcGxlKSB7XFxuK1xcdFxcdGlmIChzdHJzdHIodHJpcGxlLCBcXFwicG93ZXJwYzY0XFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwYzY0XFxcIikpXFxuK1xcdFxcdFxcdHRydW5jX2xlbiA9IDg7XFxuK1xcdFxcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFxcXCJwb3dlcnBjXFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwY1xcXCIpKVxcbitcXHRcXHRcXHR0cnVuY19sZW4gPSA0O1xcbitcXHRcXHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChwYyA9IDAsIGkgPSAwOyBpIFxcdTAwM2Mgaml0ZWRfZnVuY3M7ICsraSkge1xcbiBcXHRcXHRmcHJpbnRmKHRleHRfb3V0LCBcXFwiZnVuYyAjJWQ6XFxcXG5cXFwiLCBpKTtcXG4tXFx0XFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBmdW5jX2xlbnNbaV0pO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcXHUwMDNlIHRydW5jX2xlbiA/XFxuK1xcdFxcdFxcdFxcdFxcdGZ1bmNfbGVuc1tpXSAtIHRydW5jX2xlbiA6IDA7XFxuK1xcdFxcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZGlzYXNtX2xlbik7XFxuK1xcbiBcXHRcXHRmcHJpbnRmKHRleHRfb3V0LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0cGMgKz0gZnVuY19sZW5zW2ldO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5pbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5AQCAtMTU5LDYgKzE1OSw3IEBAXFxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcXHRcXHRfX2FyY2goXFxcIlJJU0NWNjRcXFwiKVxcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFxcdFxcdF9fYXJjaChcXFwiczM5MHhcXFwiKVxcbiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2hcXHRfX2FyY2goXFxcIkxPT05HQVJDSFxcXCIpXFxuKyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFxcdF9fYXJjaChcXFwiUE9XRVJQQzY0XFxcIilcXG4gI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpXFx0X190ZXN0X3RhZyhcXFwidGVzdF9jYXBzX3VucHJpdj1cXFwiIEVYUEFORF9RVU9URShjYXBzKSlcXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVxcdF9fdGVzdF90YWcoXFxcImxvYWRfbW9kZT1qaXRlZFxcXCIpXFxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcXHRfX3Rlc3RfdGFnKFxcXCJsb2FkX21vZGU9bm9faml0ZWRcXFwiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcXG5pbmRleCA0OGZhMzRkMjk1OWY0Li45ODgwY2U0ZjE5MzFhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xcbkBAIC05MSw2ICs5MSw4NCBAQCBfX2ppdGVkKFxcXCJcXHRwb3BxXFx0JXJheFxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGptcFxcdHt7Lip9fVxcXCIpXFx0XFx0LyoganVtcCB0byB0YWlsIGNhbGwgdGd0ICAgKi9cXG4gX19qaXRlZChcXFwiTDA6XFx0bGVhdmVcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHR7eyhyZXRxfGptcFxcdDB4KX19XFxcIilcXHRcXHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXFxuK19fYXJjaF9wb3dlcnBjNjRcXG4rLyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXFxuK19faml0ZWQoXFxcIlxcdG5vcFxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cXG4rX19qaXRlZChcXFwiXFx0bGkgOSwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCA5LCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1mbHIgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCAwLCAxNigxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZHUgMSwge3suKn19KDEpXFxcIilcXG4rLypcXG4rICogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlclxcbisgKlxcbisgKiBBZGRyZXNzIG1hdGVyaWFsaXphdGlvbiBkaWZmZXJzIGJldHdlZW4gUENSRUwgYW5kIG5vbi1QQ1JFTCBrZXJuZWxzLlxcbisgKiBTa2lwIHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2UgYW5kIHZlcmlmeSBvbmx5IHRoYXQgdGhlIGNhbGxcXG4rICogdGFyZ2V0IGlzIGxvYWRlZCBpbnRvIENUUiBiZWZvcmUgYnJhbmNoaW5nLlxcbisgKi9cXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bXRjdHIge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmN0cmxcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDgsIDNcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsaSA4LCAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkaSAxLCAxLCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAwLCAxNigxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG10bHIgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1yXFx0MywgOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJsclxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcImZ1bmMgIzFcXFwiKVxcbisvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqL1xcbitfX2ppdGVkKFxcXCJcXHRub3BcXFwiKVxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXFxuKy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwgMCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIC04KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YnRcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgOSwgMTAsIC04XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDksIC04KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGlzIHt7Lip9fSwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c2xkaSB7ey4qfX0sIHt7Lip9fSwgMzJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmkge3suKn19LCB7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxpIHt7Lip9fSwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGx3eiA5LCB7ey4qfX0oe3suKn19KVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHNsd2kge3suKn19LCB7ey4qfX0sIDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsd1xcdHt7Lip9fSwgOVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJmXFx0MCwge3suKn19XFxcIilcXG4rLyogYnBmX3RhaWxfY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCA5LCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmZcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIDAoOSlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQ5LCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDksIDksIDFcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtdWxsaSAxMCwge3suKn19LCA4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkIDEwLCAxMCwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGQgMTAsIHt7Lip9fSgxMClcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQxMCwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwge3suKn19KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgMTAsIDEwLCB7ey4qfX1cXFwiKSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xcbitfX2ppdGVkKFxcXCJcXHRtdGN0ciAxMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDEwLCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDEwLCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDEwLCAxLCAtOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCA5LCAwKDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJjdHJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDMsIDhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRibHJcXFwiKVxcbitcXG4gU0VDKFxcXCJ0Y1xcXCIpXFxuIF9fbmFrZWQgaW50IG1haW4odm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuaW5kZXggM2NlMzJkMTM0ZTJjYy4uMDFiMTQyMDA5N2QyNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuQEAgLTM3OCw2ICszNzgsNyBAQCBlbnVtIGFyY2gge1xcbiBcXHRBUkNIX1JJU0NWNjRcXHQ9IDB4OCxcXG4gXFx0QVJDSF9TMzkwWFxcdD0gMHgxMCxcXG4gXFx0QVJDSF9MT09OR0FSQ0hcXHQ9IDB4MjAsXFxuK1xcdEFSQ0hfUE9XRVJQQzY0XFx0PSAweDQwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXFxuQEAgLTM5Miw2ICszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcXG4gXFx0cmV0dXJuIEFSQ0hfUzM5MFg7XFxuICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXylcXG4gXFx0cmV0dXJuIEFSQ0hfTE9PTkdBUkNIO1xcbisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pXFxuK1xcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcXG4gI2VuZGlmXFxuIFxcdHJldHVybiBBUkNIX1VOS05PV047XFxuIH1cXG5AQCAtNTg1LDYgKzU4OCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9TMzkwWDtcXG4gXFx0XFx0XFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcXFwiTE9PTkdBUkNIXFxcIikgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9MT09OR0FSQ0g7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlBPV0VSUEM2NFxcXCIpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfUE9XRVJQQzY0O1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRQUklOVF9GQUlMKFxcXCJiYWQgYXJjaCBzcGVjOiAnJXMnXFxcXG5cXFwiLCB2YWwpO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOTozNi4yMDM2NjI5MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjczNzc5NTU4ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjA5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuaW5kZXggZjMyZGU4NzA0ZDRkOS4uNGRhOGJkZTkyZTFlZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuQEAgLTE0LDYgKzE0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BwYy1vcGNvZGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gXG4rLypcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcbisgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy5cbisgKi9cbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXG4rI2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgM1xuK1xuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxuICNkZWZpbmUgRlVOQ1RJT05fREVTQ1JfU0laRVx0MjRcbiAjZWxzZVxuQEAgLTE4OCw2ICsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7XG4gXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXHQoY3R4LVx1MDAzZWIycFtyXSlcbiBcbisjaWZkZWYgQ09ORklHX1BQQzY0XG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKVxuKyNlbHNlXG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfUFBDMzJcbiAjZGVmaW5lIEJQRl9GSVhVUF9MRU5cdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cdTAwM2UgMTIgYnl0ZXMgKi9cbiAjZWxzZVxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXG4gaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICAgdTMyICphZGRycywgaW50IHBhc3MsIGJvb2wgZXh0cmFfcGFzcyk7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuIHZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7XG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGV4aXRfYWRkcik7XG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcbiBcdFx0XHRcdFx0XHRcdFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcbiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggN2IwN2I0MzU3NWYxMS4uYzI3MTdmMGQ5Y2RkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC00OSwxMSArNDksMzUgQEAgYXNtIChcbiBcIlx0LnBvcHNlY3Rpb25cdFx0XHRcdDtcIlxuICk7XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4rdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGludCBvb2xfc3R1Yl9pZHgsIGxvbmdfYnJhbmNoX3N0dWJfaWR4O1xuK1x0aW50IHN0dWJfc3o7XG4gXG4gXHQvKlxuK1x0ICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLlxuK1x0ICogQWxpZ24gdGhlIG1pcy1hbGlnbmVkIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaW4gdGhlIGZpbWFnZS5cbitcdCAqIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YiwgdG8gbWFrZVxuK1x0ICogb29sX3N0dWJfaWR4IFx1MDAyNiBsb25nX2JyYW5jaF9zdHViX2lkeCBjb25zdGFudCBmcm9tIGVuZC5cbitcdCAqXG4rXHQgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzXG4rXHQgKiBvbiBzdGFydCBvZiBmaW1hZ2UgYW5kIHRoZSBzdHViJ3MgaW5zdHJ1Y3Rpb24gY291bnQuIFRoZVxuK1x0ICogc3R1YnMgYmxvY2sgaGFzIDExIGluc3RydWN0aW9ucyAod2l0aCBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSlcbitcdCAqIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dCkgYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYVxuK1x0ICogTk9QIGlmIHRoZSBhZGRyZXNzIG9mIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuXG4rXHQgKlxuK1x0ICogSW4gcGFzcz0wIHdoZW4gaW1hZ2U9PU5VTEwsIGNvbnNlcnZhdGl2ZWx5IGFjY291bnQgZm9yIHNwYWNlXG4rXHQgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHNcbitcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxuK1x0ICogaml0ZWRfbGVuIHNpZ25pZmllcyBjb3JyZWN0IHByb2dyYW0gc2l6ZS5cbitcdCAqL1xuK1xuK1x0c3R1Yl9zeiA9IElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpID8gNDQgOiA0MDtcbitcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICsgY3R4LVx1MDAzZWlkeCo0ICsgc3R1Yl9zeiwgU1pMKSlcbitcdFx0RU1JVChQUENfUkFXX05PUCgpKTtcbitcbitcdC8qXG4rXHQgKlx0bm9wICAgICAvLyBvcHRpb25hbCwgZm9yIGFsaWdubWVudCBvZiBkdW1teV90cmFtcF9hZGRyXG4gXHQgKiBPdXQtb2YtbGluZSBzdHViOlxuIFx0ICpcdG1mbHJcdHIwXG4gXHQgKlx0W2J8YmxdXHR0cmFtcFxuQEAgLTcwLDQ0ICs5NCw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdC8qXG4gXHQgKiBMb25nIGJyYW5jaCBzdHViOlxuLVx0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlXG4gXHQgKlx0bWZsclx0cjExXG4gXHQgKlx0YmNsXHQyMCwzMSwkKzRcbi1cdCAqXHRtZmxyXHRyMTJcbi1cdCAqXHRsZFx0cjEyLCAtOC1TWkwocjEyKVxuK1x0ICpcdG1mbHJcdHIxMlx0Ly8gbHIvcjEyIHN0b3JlcyBwYyBvZiBjdXJyZW50KHRoaXMpIGluc3QuXG4rXHQgKlx0bGRcdHIxMiwgMjAocjEyKSAvLyBvZmZzZXQoZHVtbXlfdHJhbXBfYWRkcikgZnJvbSBwcmV2IGluc3QuIGlzIDIwXG4gXHQgKlx0bXRjdHJcdHIxMlxuLVx0ICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbitcdCAqXHRtdGxyXHRyMTFcdC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuIFx0ICpcdGJjdHJcbitcdCAqXHQubG9uZ1x0XHUwMDNjZHVtbXlfdHJhbXBfYWRkclx1MDAzZSAgLy8gU1pMIGJ5dGVzIGFsaWduZWRcbiBcdCAqL1xuLVx0aWYgKGltYWdlKVxuLVx0XHQqKCh1bnNpZ25lZCBsb25nICopXHUwMDI2aW1hZ2VbY3R4LVx1MDAzZWlkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7XG4tXHRjdHgtXHUwMDNlaWR4ICs9IFNaTCAvIDQ7XG4gXHRsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC1cdTAwM2VpZHg7XG4gXHRFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNMNCgpKTtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTIpKTtcbi1cdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTtcbitcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAyMCkpO1xuIFx0RU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTtcbiBcdEVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ1RSKCkpO1xuIFxuK1x0aWYgKGltYWdlKVxuK1x0XHQqKCh1bnNpZ25lZCBsb25nICopXHUwMDI2aW1hZ2VbY3R4LVx1MDAzZWlkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7XG4rXG4rXHRjdHgtXHUwMDNlaWR4ICs9IFNaTCAvIDQ7XG4rXG4gXHRpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHtcbiBcdFx0YnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7XG4gXHRcdGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gbG9uZ19icmFuY2hfc3R1Yl9pZHgpICogNDtcbiBcdH1cbiB9XG4gXG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbitcdFx0XHRcdFx0XHRcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbiB7XG4tXHRpZiAoIWV4aXRfYWRkciB8fCBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4rXHRpZiAoZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4gXHRcdFBQQ19KTVAoZXhpdF9hZGRyKTtcbi1cdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIHtcbi1cdFx0aWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgLSAoY3R4LVx1MDAzZWlkeCAqIDQpKSkpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0fSBlbHNlIGlmIChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkciBcdTAwMjZcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShcbitcdFx0XHQobG9uZykoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiBcdFx0UFBDX0pNUChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcik7XG4gXHR9IGVsc2Uge1xuIFx0XHRjdHgtXHUwMDNlYWx0X2V4aXRfYWRkciA9IGN0eC1cdTAwM2VpZHggKiA0O1xuLVx0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuK1x0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNzQsNiArMzAwLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdCAqL1xuIFx0aWYgKGNnY3R4LnNlZW4gXHUwMDI2IFNFRU5fVEFJTENBTEwgfHwgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY2djdHguaWR4ICogNCkpIHtcbiBcdFx0Y2djdHguaWR4ID0gMDtcbitcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG4gXHRcdGlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4LCBhZGRycywgMCwgZmFsc2UpKVxuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbkBAIC0yODYsNyArMzEzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdCAqL1xuIFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCBcdTAwMjZjZ2N0eCk7XG4gXHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbi1cdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBOVUxMLCBcdTAwMjZjZ2N0eCk7XG4gXG4gXHRmaXh1cF9sZW4gPSBmcC1cdTAwM2VhdXgtXHUwMDNlbnVtX2V4ZW50cmllcyAqIEJQRl9GSVhVUF9MRU4gKiA0O1xuIFx0ZXh0YWJsZV9sZW4gPSBmcC1cdTAwM2VhdXgtXHUwMDNlbnVtX2V4ZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTtcbkBAIC0zMDYsMTAgKzMzMywxMyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0Y29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSArIEZVTkNUSU9OX0RFU0NSX1NJWkUpO1xuIFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4tXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xuLVx0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2MgMzsgcGFzcysrKSB7XG4rXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMissIGxvb3AgdW50aWwgcHJvZ3JhbSBzaXplIGNvbnZlcmdlcy4gKi9cbitcdGZvciAocGFzcyA9IDE7IHBhc3MgXHUwMDNjPSBDT0RFR0VOX01BWF9QQVNTRVM7IHBhc3MrKykge1xuK1x0XHR1MzIgcHJldl9wcm9nbGVuID0gcHJvZ2xlbjtcbitcbiBcdFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFx1MDAyNiBlcGlsb2d1ZSBmb3IgcmVhbC4gKi9cbiBcdFx0Y2djdHguaWR4ID0gMDtcbitcdFx0Y2djdHguZXhlbnRyeV9pZHggPSAwO1xuIFx0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCwgYWRkcnMsIHBhc3MsXG5AQCAtMzE4LDExICszNDgsMjYgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbi1cdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbitcdFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4rXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4rXG4rXHRcdHByb2dsZW4gPSBjZ2N0eC5pZHggKiA0O1xuIFxuIFx0XHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG4gXHRcdFx0cHJfaW5mbyhcIlBhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwiLCBwYXNzLFxuLVx0XHRcdFx0cHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7XG4rXHRcdFx0XHRwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTtcbitcbitcdFx0LyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi9cbitcdFx0aWYgKHBhc3MgXHUwMDNlPSBDT0RFR0VOX01JTl9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAocGFzcyA9PSBDT0RFR0VOX01BWF9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7XG4rXHRcdFx0cHJfZXJyKFwiQlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xcblwiLFxuK1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuK1x0XHRcdGJwZl9hcmNoX3RleHRfY29weShcdTAwMjZmaGRyLVx1MDAzZXNpemUsIFx1MDAyNmhkci1cdTAwM2VzaXplLCBzaXplb2YoaGRyLVx1MDAzZXNpemUpKTtcbitcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbitcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbkBAIC0zNTcsNyArNDAyLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRcdCh2b2lkICopZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuK1x0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuIFx0XHRcdGZwLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3B0ciA9IE5VTEw7XG4gXHRcdFx0ZnJlZV9wZXJjcHUocHJpdl9zdGFja19wdHIpO1xuIFx0XHR9XG5AQCAtMzk5LDcgKzQ0NCw3IEBAIGludCBicGZfYWRkX2V4dGFibGVfZW50cnkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIGludCBwYXNzXG4gXHR1MzIgKmZpeHVwO1xuIFxuIFx0LyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqL1xuLVx0aWYgKHBhc3MgIT0gMilcbitcdGlmIChwYXNzIFx1MDAzYyBDT0RFR0VOX01JTl9QQVNTRVMpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKCFmcC1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSB8fFxuQEAgLTczOSw3ICs3ODQsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZVxuIFx0XHQgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJ3MgZnJhbWVcbiBcdFx0ICogZGVwZW5kaW5nIG9uIGlmIHByZXZpb3VzIGZyYW1lIGhhZCB2YWx1ZSBvciByZWZlcmVuY2UuXG4gXHRcdCAqL1xuLVx0XHRFTUlUKFBQQ19SQVdfQ01QTFdJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdFx0RU1JVChQUENfUkFXX0NNUExMSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKF9SMywgX1I0LCAtQlBGX1BQQ19UQUlMQ0FMTCkpO1xuIFxuQEAgLTEyNjUsNiArMTMxMCw3IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICogYnBmX2Z1bmM6XG4gICpcdFtub3B8Yl1cdG9vbF9zdHViXG4gICogMi4gT3V0LW9mLWxpbmUgc3R1YjpcbisgKlx0bm9wXHQvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudFxuICAqIG9vbF9zdHViOlxuICAqXHRtZmxyXHRyMFxuICAqXHRbYnxibF1cdFx1MDAzY2JwZl9wcm9nXHUwMDNlL1x1MDAzY2xvbmdfYnJhbmNoX3N0dWJcdTAwM2VcbkBAIC0xMjcyLDE0ICsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICpcdGJcdGJwZl9mdW5jICsgNFxuICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6XG4gICogbG9uZ19icmFuY2hfc3R1Yjpcbi0gKlx0LmxvbmdcdFx1MDAzY2JyYW5jaF9hZGRyXHUwMDNlL1x1MDAzY2R1bW15X3RyYW1wXHUwMDNlXG4gICpcdG1mbHJcdHIxMVxuICAqXHRiY2xcdDIwLDMxLCQrNFxuICAqXHRtZmxyXHRyMTJcbi0gKlx0bGRcdHIxMiwgLTE2KHIxMilcbisgKlx0bGRcdHIxMiwgMjAocjEyKVxuICAqXHRtdGN0clx0cjEyXG4gICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiAgKlx0YmN0clxuKyAqXHQubG9uZ1x0XHUwMDNjYnJhbmNoX2FkZHJcdTAwM2UvXHUwMDNjZHVtbXlfdHJhbXBcdTAwM2VcbiAgKlxuICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuXG4gICpcbkBAIC0xMzgxLDEwICsxNDI3LDEyIEBAIGludCBicGZfYXJjaF90ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LFxuIFx0ICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOlxuIFx0ICogSWYgbmV3X2FkZHIgaXMgb3V0IG9mIHJhbmdlLCB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoZSBsb25nIGJyYW5jaCBzdHViLCBzbyBwYXRjaCBuZXdfYWRkclxuIFx0ICogaGVyZS4gT3RoZXJ3aXNlLCByZXZlcnQgdG8gZHVtbXlfdHJhbXAsIGJ1dCBvbmx5IGlmIHdlIGhhZCBwYXRjaGVkIG9sZF9hZGRyIGhlcmUuXG4rXHQgKlxuK1x0ICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi5cbiBcdCAqL1xuIFx0aWYgKChuZXdfYWRkciBcdTAwMjZcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8XG4gXHQgICAgKG9sZF9hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShvbGRfYWRkciAtIGlwKSkpXG4tXHRcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiAtIFNaTCksXG4rXHRcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi9cbiBcdFx0XHRcdCAgKG5ld19hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgP1xuIFx0XHRcdFx0ICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTtcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG5pbmRleCBiZmRjNTA3NDBkYThlLi5mNWI5NDQxY2Y0NmFhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRFTUlUKFBQQ19SQVdfTVIoX1IzLCBicGZfdG9fcHBjKEJQRl9SRUdfMCkpKTtcbiBcbkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdEVNSVQoUFBDX1JBV19CTFIoKSk7XG4gXG4tXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTtcbitcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gfVxuIFxuIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovXG5AQCAtMTE0OSw3ICsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgX1IwLCBleGl0X2FkZHIpO1xuK1x0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLFxuK1x0XHRcdFx0XHRcdFx0XHRjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZGFiMTA2Y2FlMjJiNS4uZTgwMzEyMTcxYWE3NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXHRcdCAqL1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIDApKTtcbiBcdFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCAtKEJQRl9QUENfVEFJTENBTEwpKSk7XG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksXG4gXHRcdFx0XHRcdFx0XHRcdC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcdH1cbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuIFxuQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLypcbkBAIC02NjIsNyArNjYyLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdFBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTtcbiBcbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpO1xuIFxuIFx0LyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovXG5AQCAtNjcyLDcgKzY3Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvXG4gXHQgKiBpZiAodGFpbF9jYWxsX2luZm8gPT0gTUFYX1RBSUxfQ0FMTF9DTlQpXG4gXHQgKiAgIGdvdG8gb3V0O1xuIFx0ICovXG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0VRLCBvdXQpO1xuIFxuIFx0LypcbkBAIC03MDcsNyArNzA3LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIHRhaWxfY2FsbF9pbmZvLlxuIFx0ICovXG4gXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcbiBcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXG5AQCAtMTczNyw3ICsxNzM3LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XG4rXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCxcbitcdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IDM1NThmZTEwZTI4Y2YuLmIyOTFkOTM0ZGQxYWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuQEAgLTE3OSw5ICsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm8gPSB7fTtcbiBcdF9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuIFx0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7XG4rXHRfX3UzMiB0cnVuY19sZW4gPSAwLCBkaXNhc21fbGVuO1xuIFx0X191MzIgKmZ1bmNfbGVucyA9IE5VTEw7XG4gXHRGSUxFICp0ZXh0X291dCA9IE5VTEw7XG4gXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XG4rXHRjaGFyICp0cmlwbGUgPSBOVUxMO1xuIFx0aW50IGksIGVyciA9IDA7XG4gXG4gXHRpZiAoIWxsdm1faW5pdGlhbGl6ZWQpIHtcbkBAIC0yMjUsOSArMjI3LDMwIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcIikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUXG4rXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXG4rXHQgKiB3aGljaCBjYW4ndCBkaXNhc3NlbWJsZSB0byBhIHZhbGlkIGluc3RydWN0aW9uLlxuK1x0ICovXG4rXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xuK1x0aWYgKHRyaXBsZSkge1xuK1x0XHRpZiAoc3Ryc3RyKHRyaXBsZSwgXCJwb3dlcnBjNjRcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGM2NFwiKSlcbitcdFx0XHR0cnVuY19sZW4gPSA4O1xuK1x0XHRlbHNlIGlmIChzdHJzdHIodHJpcGxlLCBcInBvd2VycGNcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGNcIikpXG4rXHRcdFx0dHJ1bmNfbGVuID0gNDtcbitcdFx0TExWTURpc3Bvc2VNZXNzYWdlKHRyaXBsZSk7XG4rXHR9XG4rXG4gXHRmb3IgKHBjID0gMCwgaSA9IDA7IGkgXHUwMDNjIGppdGVkX2Z1bmNzOyArK2kpIHtcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJmdW5jICMlZDpcXG5cIiwgaSk7XG4tXHRcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZnVuY19sZW5zW2ldKTtcbitcbitcdFx0LypcbitcdFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xuK1x0XHQgKi9cbitcdFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcdTAwM2UgdHJ1bmNfbGVuID9cbitcdFx0XHRcdFx0ZnVuY19sZW5zW2ldIC0gdHJ1bmNfbGVuIDogMDtcbitcdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBkaXNhc21fbGVuKTtcbitcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJcXG5cIik7XG4gXHRcdHBjICs9IGZ1bmNfbGVuc1tpXTtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU5LDYgKzE1OSw3IEBAXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFx0XHRfX2FyY2goXCJSSVNDVjY0XCIpXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwiczM5MHhcIilcbiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2hcdF9fYXJjaChcIkxPT05HQVJDSFwiKVxuKyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFx0X19hcmNoKFwiUE9XRVJQQzY0XCIpXG4gI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpXHRfX3Rlc3RfdGFnKFwidGVzdF9jYXBzX3VucHJpdj1cIiBFWFBBTkRfUVVPVEUoY2FwcykpXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVx0X190ZXN0X3RhZyhcImxvYWRfbW9kZT1qaXRlZFwiKVxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcdF9fdGVzdF90YWcoXCJsb2FkX21vZGU9bm9faml0ZWRcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbmluZGV4IDQ4ZmEzNGQyOTU5ZjQuLjk4ODBjZTRmMTkzMWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuQEAgLTkxLDYgKzkxLDg0IEBAIF9faml0ZWQoXCJcdHBvcHFcdCVyYXhcIilcbiBfX2ppdGVkKFwiXHRqbXBcdHt7Lip9fVwiKVx0XHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xuIF9faml0ZWQoXCJMMDpcdGxlYXZlXCIpXG4gX19qaXRlZChcIlx0e3socmV0cXxqbXBcdDB4KX19XCIpXHRcdC8qIHJldHVybiBvciBqdW1wIHRvIHJldGh1bmsgKi9cbitfX2FyY2hfcG93ZXJwYzY0XG4rLyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXG4rX19qaXRlZChcIlx0bm9wXCIpXG4rX19qaXRlZChcIi4uLlwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4rX19qaXRlZChcIlx0bGkgOSwgMFwiKVxuK19faml0ZWQoXCJcdHN0ZCA5LCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdG1mbHIgMFwiKVxuK19faml0ZWQoXCJcdHN0ZCAwLCAxNigxKVwiKVxuK19faml0ZWQoXCJcdHN0ZHUgMSwge3suKn19KDEpXCIpXG4rLypcbisgKiBsb2FkIGFkZHJlc3MgYW5kIGNhbGwgc3ViKCkgdmlhIGNvdW50IHJlZ2lzdGVyXG4rICpcbisgKiBBZGRyZXNzIG1hdGVyaWFsaXphdGlvbiBkaWZmZXJzIGJldHdlZW4gUENSRUwgYW5kIG5vbi1QQ1JFTCBrZXJuZWxzLlxuKyAqIFNraXAgdGhlIGFkZHJlc3MgZ2VuZXJhdGlvbiBzZXF1ZW5jZSBhbmQgdmVyaWZ5IG9ubHkgdGhhdCB0aGUgY2FsbFxuKyAqIHRhcmdldCBpcyBsb2FkZWQgaW50byBDVFIgYmVmb3JlIGJyYW5jaGluZy5cbisgKi9cbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtdGN0ciB7ey4qfX1cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0YmN0cmxcIilcbitfX2ppdGVkKFwiXHRtclx0OCwgM1wiKVxuK19faml0ZWQoXCJcdGxpIDgsIDBcIilcbitfX2ppdGVkKFwiXHRhZGRpIDEsIDEsIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDAsIDE2KDEpXCIpXG4rX19qaXRlZChcIlx0bXRsciAwXCIpXG4rX19qaXRlZChcIlx0bXJcdDMsIDhcIilcbitfX2ppdGVkKFwiXHRibHJcIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcImZ1bmMgIzFcIilcbisvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqL1xuK19faml0ZWQoXCJcdG5vcFwiKVxuK19faml0ZWQoXCIuLi5cIikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxkIDIsIDE2KDEzKSBhYnNlbnQgd2l0aCBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xuKy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xuK19faml0ZWQoXCJcdGxkIDEwLCAwKDEpXCIpXG4rX19qaXRlZChcIlx0bGQgOSwgLTgoMTApXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQ5LCAzM1wiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGFkZGkgOSwgMTAsIC04XCIpXG4rX19qaXRlZChcIlx0c3RkIDksIC04KDEpXCIpXG4rX19qaXRlZChcIlx0bGlzIHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0c2xkaSB7ey4qfX0sIHt7Lip9fSwgMzJcIilcbitfX2ppdGVkKFwiXHRvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRvcmkge3suKn19LCB7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxpIHt7Lip9fSwgMFwiKVxuK19faml0ZWQoXCJcdGx3eiA5LCB7ey4qfX0oe3suKn19KVwiKVxuK19faml0ZWQoXCJcdHNsd2kge3suKn19LCB7ey4qfX0sIDBcIilcbitfX2ppdGVkKFwiXHRjbXBsd1x0e3suKn19LCA5XCIpXG4rX19qaXRlZChcIlx0YmZcdDAsIHt7Lip9fVwiKVxuKy8qIGJwZl90YWlsX2NhbGwgaW1wbGVtZW50YXRpb24gKi9cbitfX2ppdGVkKFwiXHRsZCA5LCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0OSwgMzNcIilcbitfX2ppdGVkKFwiXHRiZlx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCA5LCAwKDkpXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQ5LCAzM1wiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGFkZGkgOSwgOSwgMVwiKVxuK19faml0ZWQoXCJcdG11bGxpIDEwLCB7ey4qfX0sIDhcIilcbitfX2ppdGVkKFwiXHRhZGQgMTAsIDEwLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCAxMCwge3suKn19KDEwKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0MTAsIDBcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCAxMCwge3suKn19KDEwKVwiKVxuK19faml0ZWQoXCJcdGFkZGkgMTAsIDEwLCB7ey4qfX1cIikgICAgLyogb2Zmc2V0IGRlcGVuZHMgb24gQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cbitfX2ppdGVkKFwiXHRtdGN0ciAxMFwiKVxuK19faml0ZWQoXCJcdGxkIDEwLCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0MTAsIDMzXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkaSAxMCwgMSwgLThcIilcbitfX2ppdGVkKFwiXHRzdGQgOSwgMCgxMClcIilcbitfX2ppdGVkKFwiXHRiY3RyXCIpXG4rX19qaXRlZChcIlx0bXJcdDMsIDhcIilcbitfX2ppdGVkKFwiXHRibHJcIilcbitcbiBTRUMoXCJ0Y1wiKVxuIF9fbmFrZWQgaW50IG1haW4odm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuaW5kZXggM2NlMzJkMTM0ZTJjYy4uMDFiMTQyMDA5N2QyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3OCw2ICszNzgsNyBAQCBlbnVtIGFyY2gge1xuIFx0QVJDSF9SSVNDVjY0XHQ9IDB4OCxcbiBcdEFSQ0hfUzM5MFhcdD0gMHgxMCxcbiBcdEFSQ0hfTE9PTkdBUkNIXHQ9IDB4MjAsXG4rXHRBUkNIX1BPV0VSUEM2NFx0PSAweDQwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG5AQCAtMzkyLDYgKzM5Myw4IEBAIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKVxuIFx0cmV0dXJuIEFSQ0hfUzM5MFg7XG4gI2VsaWYgZGVmaW5lZChfX2xvb25nYXJjaF9fKVxuIFx0cmV0dXJuIEFSQ0hfTE9PTkdBUkNIO1xuKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXylcbitcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcbiAjZW5kaWZcbiBcdHJldHVybiBBUkNIX1VOS05PV047XG4gfVxuQEAgLTU4NSw2ICs1ODgsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcbiBcdFx0XHRcdGFyY2ggPSBBUkNIX1MzOTBYO1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJMT09OR0FSQ0hcIikgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfTE9PTkdBUkNIO1xuK1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJQT1dFUlBDNjRcIikgPT0gMCkge1xuK1x0XHRcdFx0YXJjaCA9IEFSQ0hfUE9XRVJQQzY0O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRQUklOVF9GQUlMKFwiYmFkIGFyY2ggc3BlYzogJyVzJ1xcblwiLCB2YWwpO1xuIFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA5OjM2LjIwMzY3MjMwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MTM0MTMzMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG93ZXJQQyBCUEYgSklUIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gYXNwZWN0cy4gSSBzZWUgaXQncyB0b3VjaGluZyBgYnBmX2ppdC5oYCwgdGhlIGNvbXBpbGF0aW9uIGNvZGUgaXRzZWxmIChgYnBmX2ppdF9jb21wLmNgLCBgYnBmX2ppdF9jb21wMzIuY2AsIGBicGZfaml0X2NvbXA2NC5jYCksIGFuZCBzb21lIHNlbGYtdGVzdHMuIFRoYXQncyBhIGdvb2Qgc2lnbjsgd2UgbmVlZCB0byB2ZXJpZnkgYWxsIG9mIHRoZXNlIHBpZWNlcyB3b3JrIGNvcnJlY3RseSB3aXRoIGVhY2ggb3RoZXIgYW5kIHRoZSBhcmNoaXRlY3R1cmUncyBleGlzdGluZyBjb2RlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJcyB0aGVyZSBhIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnRyb2R1Y2VkPyBIYXMgYW4gZXhpc3Rpbmcgb3B0aW9uIGJlZW4gY2hhbmdlZCwgb3IgaXMgYW4gZXhpc3Rpbmcgb3B0aW9uIG5vdyByZXF1aXJlZD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyBvciBzaW1wbHkgcmVhZGluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHRvIHNlZSB3aGF0IG9wdGlvbnMgdGhpcyBpbXBhY3RzLiBBZnRlciB0aGF0LCBJJ2xsIGFuYWx5emUgdGhlIGNvZGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDoyNC4zMzc4MDg3MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NDEwOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODItXFx0c2VsZWN0IEFSQ0hfVVNFX1FVRVVFRF9SV0xPQ0tTXFx0XFx0aWYgUFBDX1FVRVVFRF9TUElOTE9DS1NcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxODM6XFx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODQtXFx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX1RPUERPV05fTU1BUF9MQVlPVVRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI0Ni1cXHRzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXHRpZiBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWSB8fCBNUFJPRklMRV9LRVJORUwgfHwgUFBDMzJcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNDc6XFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnPTQ9Q09ORklHX0hJR0hfUkVTX1RJTUVSUz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWc6NTpDT05GSUdfQlBGX0pJVD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWctNi1DT05GSUdfVklSVF9DUFVfQUNDT1VOVElOR19OQVRJVkU9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9OTQ9Q09ORklHX0ROU19SRVNPTFZFUj15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc6OTU6Q09ORklHX0JQRl9KSVQ9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTk2LSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz03PUNPTkZJR19CUEZfU1lTQ0FMTD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjg6Q09ORklHX0JQRl9KSVQ9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy05LUNPTkZJR19CUEZfTFNNPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGUtNC0jXFxuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAubyBicGZfaml0X2NvbXAkKEJJVFMpLm9cXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTYtXFxuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZT03PWlmZGVmIENPTkZJR19QUEM2NFxcbmFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTktZW5kaWZcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTctICovXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg6ODojaWZuZGVmIF9CUEZfSklUX0hcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaDo5OiNkZWZpbmUgX0JQRl9KSVRfSFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTEwLVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg9MTY3PXN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmgtMTc5LVxcdHVuc2lnbmVkIGludCBzdGFja19zaXplO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjE4MDpcXHRpbnQgYjJwW01BWF9CUEZfSklUX1JFRyArIDNdO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTE4MS1cXHR1bnNpZ25lZCBpbnQgZXhlbnRyeV9pZHg7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMtNDItLyogQlBGIHJlZ2lzdGVyIHVzYWdlICovXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jOjQzOiNkZWZpbmUgVE1QX1JFR1xcdFxcdFxcdChNQVhfQlBGX0pJVF9SRUcgKyAwKVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYy00NC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy03MC0vKiBCUEYgcmVnaXN0ZXIgdXNhZ2UgKi9cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzE6I2RlZmluZSBUTVBfUkVHXzFcXHQoTUFYX0JQRl9KSVRfUkVHICsgMClcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzI6I2RlZmluZSBUTVBfUkVHXzJcXHQoTUFYX0JQRl9KSVRfUkVHICsgMSlcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzM6I2RlZmluZSBBUkVOQV9WTV9TVEFSVCAgKE1BWF9CUEZfSklUX1JFRyArIDIpXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDoyNS4xNDYyMjY5MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjAyNTk2OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdXp6LXdvcnRoeT9cIiBJdCdzIHRvdWNoaW5nIHRoZSBwb3dlcnBjIEJQRiBKSVQgY29tcGlsZXIg4oCTIHRoYXQncyBhIGtleSBhcmVhLiBBbnl0aGluZyB0aGF0IGFmZmVjdHMgY29yZSBhcmNoaXRlY3R1cmUgZXhlY3V0aW9uIGxvZ2ljLCBlc3BlY2lhbGx5IHdoZW4gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBpcyBpbnZvbHZlZCB2aWEgYGJwZigpYCBzeXN0ZW0gY2FsbHMsIEJQRiBwcm9ncmFtIGxvYWRpbmcsIHZlcmlmaWNhdGlvbiwgYW5kIEpJVCBjb21waWxhdGlvbiBvbiBQb3dlclBDIChhbmQgY2FuIGJlIHJ1biBpbiBRRU1VLCBldmVuIGJldHRlciEpLCByYWlzZXMgYSBmbGFnLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGludGVybmFscyBvZiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgc2VlIGNoYW5nZXMgdG8gbXVsdGlwbGUgZmlsZXM6IGBicGZfaml0LmhgLCBgYnBmX2ppdF9jb21wLmNgLCBhbmQgYGJwZl9qaXRfY29tcDY0LmNgLiBJJ20gc2VlaW5nIHVwZGF0ZXMgdG8gaG93IHRoZSBjb21waWxlciBoYW5kbGVzIHRoaW5ncyBsaWtlIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIHRhaWwgY2FsbHMgKHVzaW5nIGRpZmZlcmVudCBjb21wYXJlIGluc3RydWN0aW9ucyksIGZlbnRyeSBzdHVicywgYnJhbmNoIHJhbmdlcyBhbmQgdGhlIGV4aXQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXNuJ3QganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGlzIGlzIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbiB0byBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgSklUIGNvbXBpbGF0aW9uLiBUaGUgYWRkaXRpb24gb2Ygc2VsZnRlc3RzIGZvciB0YWlsIGNhbGwgSklUIHZlcmlmaWNhdGlvbiBpcyBhbm90aGVyIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIGlzIGEgY29tcGxleCBhcmVhIHRvIGNvbnNpZGVyLlxuXG5JJ20gdGhpbmtpbmcsIFwiV2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyB0byBsb29rIGF0IGZ1cnRoZXI/XCIgIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgQlBGIEpJVCBvbiBQb3dlclBDLiAgYGJwZl9hcmNoX3RleHRfcG9rZWAgaXMgYWxzbyBoZXJlLiBMZXQgbWUgY29tcGlsZSBhIGxpc3Qgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgYSBxdWljayB3YXkgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnM6XG5cbiogICBgYnBmX2ludF9qaXRfY29tcGlsZWBcbiogICBgYnBmX2FyY2hfdGV4dF9wb2tlYFxuKiAgIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2BcbiogICBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWBcbiogICBgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbmBcbiogICBgYnBmX2FkZF9leHRhYmxlX2VudHJ5YFxuXG5Ob3csIHRoZSBuZXh0IHRoaW5nIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHN0YXRpYy4gR290dGEgc2VlIGlmIGl0J3MgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozMC4zNDg4MjYyMjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5ODkyNTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTcyPXN0YXRpYyB2b2lkIHByaXZfc3RhY2tfY2hlY2tfZ3VhcmQodm9pZCBfX3BlcmNwdSAqcHJpdl9zdGFja19wdHIsIGludCBhbGxvY19zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xOTAtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxOTE6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnApXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xOTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozMC42Njg3MjQ1ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAyNDE1OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipLY29uZmlnIGFuZCBCUEYgSW50ZWdyYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIHJlcXVpcmVkIGZvciB0aGlzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBuZXR3b3JraW5nIGNvZGUgYW5kIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIFRoZSBiZXN0IHdheSB0byBzdGFydCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIGFuZCBLY29uZmlnIGZpbGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCBgYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZWAuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIEknbGwgYnJvYWRlbiB0aGUgc2NvcGUgdG8gaW5jbHVkZSB0aGUgZ2VuZXJhbCBCUEYgS2NvbmZpZyBzZXR1cCwgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjMzLjA3MTE0MzkyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3MjYxNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozMy4xNzk4NzU4MTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTIzMDA5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gbG9jYXRlIHRoZSBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9ucy4gVGhlc2UgYXJlIGNydWNpYWwsIG9idmlvdXNseSwgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZsYWdzIGFyZSBzZXQsIHdoZXJlIHRoZXkncmUgdXNlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZW0gaW4gdGhlIEtjb25maWcgZmlsZXMsIGxpa2VseSB1bmRlciB0aGUgbmV0d29ya2luZyBvciBwb3NzaWJseSBzZWN1cml0eSBzdWItdHJlZXMuIEZpbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIEJQRiBmZWF0dXJlcyBpbiB0aGUgdGFyZ2V0IGtlcm5lbC4gQWZ0ZXIgbG9jYXRpbmcgdGhlbSwgSSB3aWxsIGFzc2VzcyB3aGVyZSB0aGVzZSBmbGFncyBhcmUgbG9jYXRlZCBpbiB0aGUgYnVpbGQgdHJlZS4gVGhlIG1vcmUgY29udGV4dCBJIGhhdmUsIHRoZSBiZXR0ZXIgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzE4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6MzcuMzAyODg3NDI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE4OTE4MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozOS43MjE4MTA5MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgyNzc1ODgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEJQRiBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRocm91Z2ggdGhhdCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHNlY3Rpb24sIHJvdWdobHkgYmV0d2VlbiBsaW5lcyAyNyBhbmQgNjAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIHN1YnN5c3RlbSBsaWtlIEJQRi4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgQlBGIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGFuZCB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6NDIuNTQ5NTcyNDc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2MzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDo0Mi41NDk2OTQ3ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNjY3NjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUG93ZXJQQyBOZXR3b3JrIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgcG93ZXJwYyBuZXR3b3JrIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGNyYWNrIG9wZW4gYGFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGVgLlwiIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgbmV0d29yay1yZWxhdGVkIGRyaXZlcnMgYW5kIG1vZHVsZXMgZm9yIHRoZSBQb3dlclBDIGFyY2hpdGVjdHVyZSB3aWxsIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBHTlUgTWFrZSBjb25zdHJ1Y3RzOiBvYmplY3QgZmlsZSBsaXN0cywgc291cmNlIGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGFuZCB0YXJnZXRzLiBHaXZlbiB0aGUgUG93ZXJQQydzIGhpc3RvcnksIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBwbGF0Zm9ybS1zcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgcG9zc2libGUgbGVnYWN5IGNvZGUgY29uc3RydWN0cyB0aGF0IEknbGwgbmVlZCB0byBzaWZ0IHRocm91Z2guIFRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgb3ZlcnZpZXcgb2YgaG93IHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIGJlaW5nIGludGVncmF0ZWQgYXQgdGhlIGJvYXJkIGxldmVsLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDo0NC41NjYzNzUyMTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQXJjaC1zcGVjaWZpYyBuZXR3b3JrIG1vZHVsZXNcXG4gICA0OlxcdCNcXG4gICA1OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAubyBicGZfaml0X2NvbXAkKEJJVFMpLm9cXG4gICA2OlxcdFxcbiAgIDc6XFx0aWZkZWYgQ09ORklHX1BQQzY0XFxuICAgODpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX3RpbWVkX21heV9nb3RvLm9cXG4gICA5OlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjQ0LjU2NjQ1OTE3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjg1NzkwNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIFBvd2VyUEMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiByZXZpZXdpbmcgYSBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBhcyBmb2xsb3dzOiBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIEpJVCBjb21waWxhdGlvbiwgc3BlY2lmaWNhbGx5IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIHRoZSByZWxldmFudCBQb3dlclBDIGFyY2hpdGVjdHVyZSBmbGFncyBsaWtlIGBQUENgIGFuZCBgUFBDNjRgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIHRvIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBgYnBmX2FyY2hfdGV4dF9wb2tlYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWAsIGFuZCBgYnBmX2FkZF9leHRhYmxlX2VudHJ5YC4gVGhlc2UgYXJlIGFsbCBzdHJvbmcgaW5kaWNhdG9ycyBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgYWx0ZXJlZC4gSSBhbHNvIGNoZWNrZWQgd2hpY2ggb2YgdGhlc2Ugc3ltYm9scyBhcmUgZXhwb3J0ZWQsIG9yIGluIHRoZSBzeW1ib2wgdGFibGUuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLlxuXG5CYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBJJ3ZlIGlkZW50aWZpZWQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2FyY2hfdGV4dF9wb2tlYCBhcyB0aGUgbWFpbiBub24taG90LXBhdGggZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb24uIFRoZXkgYXJlIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50cywgYW5kIGxpa2VseSB0aGUgcGxhY2VzIHdoZXJlIGEgZnV6emVyIGNhbiBzdGFydCB0byBpbmZsdWVuY2UgY29kZSBleGVjdXRpb24uXG5cbkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJ4oCZbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgYW5kIHdpbGwgdGhlcmVmb3JlIG5lZWQgdG8gYmUgdGVzdGVkIGZvciBzdGFiaWxpdHksIHNlY3VyaXR5LCBhbmQgY29ycmVjdCBvcGVyYXRpb24uIEl0J3MgbW9kaWZ5aW5nIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGFkZHJlc3NpbmcgYXNwZWN0cyBsaWtlIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YnMgYWxpZ25tZW50IGFuZCBvZmZzZXRzLCB0YWlsIGNhbGwgY29tcGFyaXNvbnMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGV4dGFibGUgaGFuZGxpbmcsIGFuZCB0aGUgdGV4dCBwb2tpbmcgbWVjaGFuaXNtLiBBbGwgb2YgdGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBKSVQgY29kZSBnZW5lcmF0aW9uIGFuZCBleGVjdXRpb24gZm9yIEJQRiBwcm9ncmFtcyBvbiBQUEMvUFBDNjQgYXJjaGl0ZWN0dXJlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB2aWEgdGhlIEJQRiBzdWJzeXN0ZW0vc3lzY2FsbC5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHRzIHRvIHJlZmxlY3QgdGhpczogSSdsbCBtYXJrIGl0IGFzIHdvcnRoIGZ1enppbmcgKG9idmlvdXNseSkuIE15IHJlYXNvbmluZyB3aWxsIGhpZ2hsaWdodCB0aGF0IHRoZSBwYXRjaCBhZmZlY3RzIEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbi4gSSdsbCBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAuIEFuZCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBuZWVkcyB0aGUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODYyLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjQ5Ljg1MjI1MzI5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk2NTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfYXJjaF90ZXh0X3Bva2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGxvZ2ljLCBpbmNsdWRpbmcgY29kZSBnZW5lcmF0aW9uIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIGZlbnRyeSBzdHViIGFsaWdubWVudCwgdGV4dCBwb2tpbmcsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGFuZCA2NC1iaXQgdGFpbCBjYWxsIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIEJQRiBwcm9ncmFtIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBiZWhhdmlvciBvbiBQb3dlclBDIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6NDkuOTgzMjI1NjA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM3OTMzNzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjQ5Ljk4MzY3NzIxOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMzc4ODgwNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQqKSBhbmQgY29ycmVzcG9uZGluZyBCUEYgc2VsZnRlc3RzLiBUaGUgY2hhbmdlcyBhZGRyZXNzIG11bHRpLXBhc3MgY29kZSBnZW5lcmF0aW9uIGNvbnZlcmdlbmNlLCBhbGlnbm1lbnQgb2YgZmVudHJ5IHN0dWJzL2R1bW15IHRyYW1wb2xpbmUgYWRkcmVzcywgYnJhbmNoIHJhbmdlIGNoZWNrcywgYW5kIDY0LWJpdCByZWdpc3RlciBjb21wYXJpc29ucyBmb3IgdGFpbCBjYWxscy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YzY3MzZlOTc0YmYzMzI2NjRmZDAyOGQ0YzE2OTQ5MjA2MmJhNDYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MDk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5pbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5AQCAtMTQsNiArMTQsMTMgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHBjLW9wY29kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcdTAwM2VcbiBcbisvKlxuKyAqIFdlIG5lZWQgYXQgbGVhc3QgMiBwYXNzZXMgZm9yIHByb3BlciBjb2RlIGdlbmVyYXRpb24sIGFuZCBtYXkgbmVlZFxuKyAqIGFkZGl0aW9uYWwgcGFzc2VzIGlmIGNvZGUgc2l6ZSBjaGFuZ2VzIGJldHdlZW4gcGFzc2VzLlxuKyAqL1xuKyNkZWZpbmUgQ09ERUdFTl9NSU5fUEFTU0VTICAgIDJcbisjZGVmaW5lIENPREVHRU5fTUFYX1BBU1NFUyAgICAzXG4rXG4gI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJX1YxXG4gI2RlZmluZSBGVU5DVElPTl9ERVNDUl9TSVpFXHQyNFxuICNlbHNlXG5AQCAtMTg4LDYgKzE5NSwxMiBAQCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0IHtcbiBcbiAjZGVmaW5lIGJwZl90b19wcGMocilcdChjdHgtXHUwMDNlYjJwW3JdKVxuIFxuKyNpZmRlZiBDT05GSUdfUFBDNjRcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpXG4rI2Vsc2VcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTFdJKGEsIGkpXG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19QUEMzMlxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlx0MyAvKiBUaHJlZSBpbnN0cnVjdGlvbnMgPVx1MDAzZSAxMiBieXRlcyAqL1xuICNlbHNlXG5AQCAtMjE0LDEwICsyMjcsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9mdW5jX2NhbGxfcmVsKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpcbiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4gXHRcdCAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTtcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuK3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4gdm9pZCBicGZfaml0X3JlYWxsb2NfcmVncyhzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcbitpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdGxvbmcgZXhpdF9hZGRyKTtcbiB2b2lkIHByZXBhcmVfZm9yX2ZzZXNzaW9uX2ZlbnRyeSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCBjb29raWVfY250LFxuIFx0XHRcdFx0XHRcdFx0XHRpbnQgY29va2llX29mZiwgaW50IHJldHZhbF9vZmYpO1xuIHZvaWQgc3RvcmVfZnVuY19tZXRhKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA3YjA3YjQzNTc1ZjExLi5jMjcxN2YwZDljZGQ0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTQ5LDExICs0OSwzNSBAQCBhc20gKFxuIFwiXHQucG9wc2VjdGlvblx0XHRcdFx0O1wiXG4gKTtcbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XG4rXHRpbnQgc3R1Yl9zejtcbiBcbiBcdC8qXG4rXHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXG4rXHQgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLlxuK1x0ICogVGhlIGFsaWdubWVudCBOT1AgbXVzdCBhcHBlYXIgYmVmb3JlIE9PTCBzdHViLCB0byBtYWtlXG4rXHQgKiBvb2xfc3R1Yl9pZHggXHUwMDI2IGxvbmdfYnJhbmNoX3N0dWJfaWR4IGNvbnN0YW50IGZyb20gZW5kLlxuK1x0ICpcbitcdCAqIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWwgYWxpZ25tZW50IGRlcGVuZHNcbitcdCAqIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWIncyBpbnN0cnVjdGlvbiBjb3VudC4gVGhlXG4rXHQgKiBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKVxuK1x0ICogb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KSBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhXG4rXHQgKiBOT1AgaWYgdGhlIGFkZHJlc3Mgb2YgZHVtbXlfdHJhbXBfYWRkciBpcyBub24gYWxpZ25lZC5cbitcdCAqXG4rXHQgKiBJbiBwYXNzPTAgd2hlbiBpbWFnZT09TlVMTCwgY29uc2VydmF0aXZlbHkgYWNjb3VudCBmb3Igc3BhY2VcbitcdCAqIHJlcXVpcmVkIHRvIGFjY29tbW9kYXRlIGFsaWdubWVudCBOT1AuIEluIGNhc2UgZmluYWwgcGFzcyBza2lwc1xuK1x0ICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kXG4rXHQgKiBqaXRlZF9sZW4gc2lnbmlmaWVzIGNvcnJlY3QgcHJvZ3JhbSBzaXplLlxuK1x0ICovXG4rXG4rXHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xuK1x0aWYgKCFpbWFnZSB8fCAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmaW1hZ2UgKyBjdHgtXHUwMDNlaWR4KjQgKyBzdHViX3N6LCBTWkwpKVxuK1x0XHRFTUlUKFBQQ19SQVdfTk9QKCkpO1xuK1xuK1x0LypcbitcdCAqXHRub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHJcbiBcdCAqIE91dC1vZi1saW5lIHN0dWI6XG4gXHQgKlx0bWZsclx0cjBcbiBcdCAqXHRbYnxibF1cdHRyYW1wXG5AQCAtNzAsNDQgKzk0LDQ2IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0LypcbiBcdCAqIExvbmcgYnJhbmNoIHN0dWI6XG4tXHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2VcbiBcdCAqXHRtZmxyXHRyMTFcbiBcdCAqXHRiY2xcdDIwLDMxLCQrNFxuLVx0ICpcdG1mbHJcdHIxMlxuLVx0ICpcdGxkXHRyMTIsIC04LVNaTChyMTIpXG4rXHQgKlx0bWZsclx0cjEyXHQvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC5cbitcdCAqXHRsZFx0cjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjBcbiBcdCAqXHRtdGN0clx0cjEyXG4tXHQgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuK1x0ICpcdG10bHJcdHIxMVx0Ly8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJXG4gXHQgKlx0YmN0clxuK1x0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlICAvLyBTWkwgYnl0ZXMgYWxpZ25lZFxuIFx0ICovXG4tXHRpZiAoaW1hZ2UpXG4tXHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbi1cdGN0eC1cdTAwM2VpZHggKz0gU1pMIC8gNDtcbiBcdGxvbmdfYnJhbmNoX3N0dWJfaWR4ID0gY3R4LVx1MDAzZWlkeDtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ0w0KCkpO1xuIFx0RU1JVChQUENfUkFXX01GTFIoX1IxMikpO1xuLVx0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIC04LVNaTCkpO1xuK1x0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7XG4gXHRFTUlUKFBQQ19SQVdfTVRDVFIoX1IxMikpO1xuIFx0RU1JVChQUENfUkFXX01UTFIoX1IxMSkpO1xuIFx0RU1JVChQUENfUkFXX0JDVFIoKSk7XG4gXG4rXHRpZiAoaW1hZ2UpXG4rXHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbitcbitcdGN0eC1cdTAwM2VpZHggKz0gU1pMIC8gNDtcbitcbiBcdGlmICghYnBmX2ppdF9vb2xfc3R1Yikge1xuIFx0XHRicGZfaml0X29vbF9zdHViID0gKGN0eC1cdTAwM2VpZHggLSBvb2xfc3R1Yl9pZHgpICogNDtcbiBcdFx0YnBmX2ppdF9sb25nX2JyYW5jaF9zdHViID0gKGN0eC1cdTAwM2VpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0O1xuIFx0fVxuIH1cbiBcbi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbitpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuK1x0XHRcdFx0XHRcdFx0aW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuIHtcbi1cdGlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbitcdGlmIChleGl0X2FkZHIgXHUwMDI2XHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGxvbmcpKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiBcdFx0UFBDX0pNUChleGl0X2FkZHIpO1xuLVx0fSBlbHNlIGlmIChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcikge1xuLVx0XHRpZiAoV0FSTl9PTighaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljdHgtXHUwMDNlYWx0X2V4aXRfYWRkciAtIChjdHgtXHUwMDNlaWR4ICogNCkpKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKFxuK1x0XHRcdChsb25nKShjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyID0gY3R4LVx1MDAzZWlkeCAqIDQ7XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4rXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3NCw2ICszMDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0ICovXG4gXHRpZiAoY2djdHguc2VlbiBcdTAwMjYgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkge1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuK1x0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuQEAgLTI4Niw3ICszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0ICovXG4gXHRicGZfaml0X2J1aWxkX3Byb2xvZ3VlKE5VTEwsIFx1MDAyNmNnY3R4KTtcbiBcdGFkZHJzW2ZwLVx1MDAzZWxlbl0gPSBjZ2N0eC5pZHggKiA0O1xuLVx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBcdTAwMjZjZ2N0eCk7XG4rXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4KTtcbiBcbiBcdGZpeHVwX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7XG4gXHRleHRhYmxlX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpO1xuQEAgLTMwNiwxMCArMzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRjb2RlX2Jhc2UgPSAodTMyICopKGltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXHRmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcbi1cdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yICovXG4tXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFx1MDAzYyAzOyBwYXNzKyspIHtcbitcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yKywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqL1xuK1x0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcysrKSB7XG4rXHRcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xuK1xuIFx0XHQvKiBOb3cgYnVpbGQgdGhlIHByb2xvZ3VlLCBib2R5IGNvZGUgXHUwMDI2IGVwaWxvZ3VlIGZvciByZWFsLiAqL1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuK1x0XHRjZ2N0eC5leGVudHJ5X2lkeCA9IDA7XG4gXHRcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xuIFx0XHRicGZfaml0X2J1aWxkX3Byb2xvZ3VlKGNvZGVfYmFzZSwgXHUwMDI2Y2djdHgpO1xuIFx0XHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4LCBhZGRycywgcGFzcyxcbkBAIC0zMTgsMTEgKzM0OCwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuLVx0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGNvZGVfYmFzZSwgXHUwMDI2Y2djdHgpO1xuK1x0XHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbitcdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbitcbitcdFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XG4gXG4gXHRcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiBcdFx0XHRwcl9pbmZvKFwiUGFzcyAlZDogc2hyaW5rID0gJWQsIHNlZW4gPSAweCV4XFxuXCIsIHBhc3MsXG4tXHRcdFx0XHRwcm9nbGVuIC0gKGNnY3R4LmlkeCAqIDQpLCBjZ2N0eC5zZWVuKTtcbitcdFx0XHRcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xuK1xuK1x0XHQvKiBDaGVjayBpZiBwcm9ncmFtIHNpemUgaGFzIGNvbnZlcmdlZCwgYnV0IGVuc3VyZSBtaW5pbXVtIHBhc3NlcyAqL1xuK1x0XHRpZiAocGFzcyBcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiA9PSBwcmV2X3Byb2dsZW4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcbitcdFx0XHRwcl9lcnIoXCJCUEYgSklUOiBQcm9ncmFtIGRpZCBub3QgY29udmVyZ2UgYWZ0ZXIgJWQgcGFzc2VzXFxuXCIsXG4rXHRcdFx0XHRcdFx0XHRcdENPREVHRU5fTUFYX1BBU1NFUyk7XG4rXHRcdFx0YnBmX2FyY2hfdGV4dF9jb3B5KFx1MDAyNmZoZHItXHUwMDNlc2l6ZSwgXHUwMDI2aGRyLVx1MDAzZXNpemUsIHNpemVvZihoZHItXHUwMDNlc2l6ZSkpO1xuK1x0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuK1x0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKGJwZl9qaXRfZW5hYmxlIFx1MDAzZSAxKVxuQEAgLTM1Nyw3ICs0MDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdFx0KHZvaWQgKilmaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcbiBvdXRfYWRkcnM6XG4tXHRcdGlmICghaW1hZ2UgXHUwMDI2XHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XG4rXHRcdGlmICghZnAtXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XG4gXHRcdFx0ZnAtXHUwMDNlYXV4LVx1MDAzZXByaXZfc3RhY2tfcHRyID0gTlVMTDtcbiBcdFx0XHRmcmVlX3BlcmNwdShwcml2X3N0YWNrX3B0cik7XG4gXHRcdH1cbkBAIC0zOTksNyArNDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3NcbiBcdHUzMiAqZml4dXA7XG4gXG4gXHQvKiBQb3B1bGF0ZSBleHRhYmxlIGVudHJpZXMgb25seSBpbiB0aGUgbGFzdCBwYXNzICovXG4tXHRpZiAocGFzcyAhPSAyKVxuK1x0aWYgKHBhc3MgXHUwMDNjIENPREVHRU5fTUlOX1BBU1NFUylcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoIWZwLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlIHx8XG5AQCAtNzM5LDcgKzc4NCw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRlXG4gXHRcdCAqIFNldHRpbmcgdGhlIHRhaWxfY2FsbF9pbmZvIGluIHRyYW1wb2xpbmUncyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7XG4gXG5AQCAtMTI2NSw2ICsxMzEwLDcgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKiBicGZfZnVuYzpcbiAgKlx0W25vcHxiXVx0b29sX3N0dWJcbiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOlxuKyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNzIsMTQgKzEzMTgsMTQgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKlx0Ylx0YnBmX2Z1bmMgKyA0XG4gICogMy4gTG9uZyBicmFuY2ggc3R1YjpcbiAgKiBsb25nX2JyYW5jaF9zdHViOlxuLSAqXHQubG9uZ1x0XHUwMDNjYnJhbmNoX2FkZHJcdTAwM2UvXHUwMDNjZHVtbXlfdHJhbXBcdTAwM2VcbiAgKlx0bWZsclx0cjExXG4gICpcdGJjbFx0MjAsMzEsJCs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuKyAqXHRsZFx0cjEyLCAyMChyMTIpXG4gICpcdG10Y3RyXHRyMTJcbiAgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuICAqXHRiY3RyXG4rICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXG4gICogZHVtbXlfdHJhbXAgaXMgdXNlZCB0byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cy5cbiAgKlxuQEAgLTEzODEsMTAgKzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbitcdCAqXG4rXHQgKiBkdW1teV90cmFtcF9hZGRyIG1vdmVkIHRvIGJvdHRvbSBvZiBsb25nIGJyYW5jaCBzdHViLlxuIFx0ICovXG4gXHRpZiAoKG5ld19hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgfHxcbiBcdCAgICAob2xkX2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSlcbi1cdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSxcbitcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdEVNSVQoUFBDX1JBV19NUihfUjMsIGJwZl90b19wcGMoQlBGX1JFR18wKSkpO1xuIFxuQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi9cbkBAIC0xMTQ5LDcgKzExNDksOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxuIFx0XHRcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuLVx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7XG4rXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXG4rXHRcdFx0XHRcdFx0XHRcdGN0eCwgX1IwLCBleGl0X2FkZHIpO1xuIFx0XHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBkYWIxMDZjYWUyMmI1Li5lODAzMTIxNzFhYTc0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcdFx0ICovXG4gXHRcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbi1cdFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4rXHRcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0XHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xuIFx0XHRFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSxcbiBcdFx0XHRcdFx0XHRcdFx0LShCUEZfUFBDX1RBSUxDQUxMKSkpO1xuQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFx0fVxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4gXG5AQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xuIFxuLVx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XG4rXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xuIH1cbiBcbiAvKlxuQEAgLTY2Miw3ICs2NjIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpO1xuIFxuIFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpO1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4rXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9MRSwgOCk7XG4gXG4gXHQvKiBkZXJlZmVyZW5jZSBUTVBfUkVHXzEgKi9cbkBAIC02NzIsNyArNjcyLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIGlmICh0YWlsX2NhbGxfaW5mbyA9PSBNQVhfVEFJTF9DQUxMX0NOVClcbiBcdCAqICAgZ290byBvdXQ7XG4gXHQgKi9cbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XG4gXG4gXHQvKlxuQEAgLTcwNyw3ICs3MDcsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0ICogdGFpbF9jYWxsX2luZm8uXG4gXHQgKi9cbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xuIFxuIFx0LyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi9cbkBAIC0xNzM3LDcgKzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxuIFx0XHRcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuLVx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCB0bXAxX3JlZywgZXhpdF9hZGRyKTtcbitcdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxuK1x0XHRcdFx0XHRcdFx0XHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc5LDkgKzE3OSwxMSBAQCBpbnQgZ2V0X2ppdGVkX3Byb2dyYW1fdGV4dChpbnQgZmQsIGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X3N6KVxuIFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9O1xuIFx0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4gXHRfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYztcbitcdF9fdTMyIHRydW5jX2xlbiA9IDAsIGRpc2FzbV9sZW47XG4gXHRfX3UzMiAqZnVuY19sZW5zID0gTlVMTDtcbiBcdEZJTEUgKnRleHRfb3V0ID0gTlVMTDtcbiBcdHVpbnQ4X3QgKmltYWdlID0gTlVMTDtcbitcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XG4gXHRpbnQgaSwgZXJyID0gMDtcbiBcbiBcdGlmICghbGx2bV9pbml0aWFsaXplZCkge1xuQEAgLTIyNSw5ICsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfcHJvZ19nZXRfaW5mb19ieV9mZCAjMlwiKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHQvKlxuK1x0ICogbGFzdCA4IGJ5dGVzIGNvbnRhaW5zIGR1bW15X3RyYW1wb2xpbmUgYWRkcmVzcyBpbiBKSVRcbitcdCAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYyxcbitcdCAqIHdoaWNoIGNhbid0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uXG4rXHQgKi9cbitcdHRyaXBsZSA9IExMVk1HZXREZWZhdWx0VGFyZ2V0VHJpcGxlKCk7XG4rXHRpZiAodHJpcGxlKSB7XG4rXHRcdGlmIChzdHJzdHIodHJpcGxlLCBcInBvd2VycGM2NFwiKSB8fCBzdHJzdHIodHJpcGxlLCBcInBwYzY0XCIpKVxuK1x0XHRcdHRydW5jX2xlbiA9IDg7XG4rXHRcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFwicG93ZXJwY1wiKSB8fCBzdHJzdHIodHJpcGxlLCBcInBwY1wiKSlcbitcdFx0XHR0cnVuY19sZW4gPSA0O1xuK1x0XHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcbitcdH1cbitcbiBcdGZvciAocGMgPSAwLCBpID0gMDsgaSBcdTAwM2Mgaml0ZWRfZnVuY3M7ICsraSkge1xuIFx0XHRmcHJpbnRmKHRleHRfb3V0LCBcImZ1bmMgIyVkOlxcblwiLCBpKTtcbi1cdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBmdW5jX2xlbnNbaV0pO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBEaXNhYmxlZCBKSVQgaGF2ZSB6ZXJvIGZ1bmNfbGVucywgaGVuY2UgdW5kZXJmbG93XG4rXHRcdCAqL1xuK1x0XHRkaXNhc21fbGVuID0gZnVuY19sZW5zW2ldIFx1MDAzZSB0cnVuY19sZW4gP1xuK1x0XHRcdFx0XHRmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwO1xuK1x0XHRkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICsgcGMsIGRpc2FzbV9sZW4pO1xuK1xuIFx0XHRmcHJpbnRmKHRleHRfb3V0LCBcIlxcblwiKTtcbiBcdFx0cGMgKz0gZnVuY19sZW5zW2ldO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IGIwYzQ0MTM4NGYyMDYuLjM2NTAwOGQxZWQ0MGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0xNTksNiArMTU5LDcgQEBcbiAjZGVmaW5lIF9fYXJjaF9yaXNjdjY0XHRcdF9fYXJjaChcIlJJU0NWNjRcIilcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFx0XHRfX2FyY2goXCJzMzkweFwiKVxuICNkZWZpbmUgX19hcmNoX2xvb25nYXJjaFx0X19hcmNoKFwiTE9PTkdBUkNIXCIpXG4rI2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0XHRfX2FyY2goXCJQT1dFUlBDNjRcIilcbiAjZGVmaW5lIF9fY2Fwc191bnByaXYoY2FwcylcdF9fdGVzdF90YWcoXCJ0ZXN0X2NhcHNfdW5wcml2PVwiIEVYUEFORF9RVU9URShjYXBzKSlcbiAjZGVmaW5lIF9fbG9hZF9pZl9KSVRlZCgpXHRfX3Rlc3RfdGFnKFwibG9hZF9tb2RlPWppdGVkXCIpXG4gI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKVx0X190ZXN0X3RhZyhcImxvYWRfbW9kZT1ub19qaXRlZFwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuaW5kZXggNDhmYTM0ZDI5NTlmNC4uOTg4MGNlNGYxOTMxYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG5AQCAtOTEsNiArOTEsODQgQEAgX19qaXRlZChcIlx0cG9wcVx0JXJheFwiKVxuIF9faml0ZWQoXCJcdGptcFx0e3suKn19XCIpXHRcdC8qIGp1bXAgdG8gdGFpbCBjYWxsIHRndCAgICovXG4gX19qaXRlZChcIkwwOlx0bGVhdmVcIilcbiBfX2ppdGVkKFwiXHR7eyhyZXRxfGptcFx0MHgpfX1cIilcdFx0LyogcmV0dXJuIG9yIGp1bXAgdG8gcmV0aHVuayAqL1xuK19fYXJjaF9wb3dlcnBjNjRcbisvKiBwcm9ncmFtIGVudHJ5IGZvciBtYWluKCksIHJlZ3VsYXIgZnVuY3Rpb24gcHJvbG9ndWUgKi9cbitfX2ppdGVkKFwiXHRub3BcIilcbitfX2ppdGVkKFwiLi4uXCIpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cbitfX2ppdGVkKFwiXHRsaSA5LCAwXCIpXG4rX19qaXRlZChcIlx0c3RkIDksIC04KDEpXCIpXG4rX19qaXRlZChcIlx0bWZsciAwXCIpXG4rX19qaXRlZChcIlx0c3RkIDAsIDE2KDEpXCIpXG4rX19qaXRlZChcIlx0c3RkdSAxLCB7ey4qfX0oMSlcIilcbisvKlxuKyAqIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXJcbisgKlxuKyAqIEFkZHJlc3MgbWF0ZXJpYWxpemF0aW9uIGRpZmZlcnMgYmV0d2VlbiBQQ1JFTCBhbmQgbm9uLVBDUkVMIGtlcm5lbHMuXG4rICogU2tpcCB0aGUgYWRkcmVzcyBnZW5lcmF0aW9uIHNlcXVlbmNlIGFuZCB2ZXJpZnkgb25seSB0aGF0IHRoZSBjYWxsXG4rICogdGFyZ2V0IGlzIGxvYWRlZCBpbnRvIENUUiBiZWZvcmUgYnJhbmNoaW5nLlxuKyAqL1xuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG10Y3RyIHt7Lip9fVwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRiY3RybFwiKVxuK19faml0ZWQoXCJcdG1yXHQ4LCAzXCIpXG4rX19qaXRlZChcIlx0bGkgOCwgMFwiKVxuK19faml0ZWQoXCJcdGFkZGkgMSwgMSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgMCwgMTYoMSlcIilcbitfX2ppdGVkKFwiXHRtdGxyIDBcIilcbitfX2ppdGVkKFwiXHRtclx0MywgOFwiKVxuK19faml0ZWQoXCJcdGJsclwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiZnVuYyAjMVwiKVxuKy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovXG4rX19qaXRlZChcIlx0bm9wXCIpXG4rX19qaXRlZChcIi4uLlwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4rLyogdGFpbCBjYWxsIHByb2xvZ3VlIGZvciBzdWJwcm9ncmFtICovXG4rX19qaXRlZChcIlx0bGQgMTAsIDAoMSlcIilcbitfX2ppdGVkKFwiXHRsZCA5LCAtOCgxMClcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDksIDMzXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkaSA5LCAxMCwgLThcIilcbitfX2ppdGVkKFwiXHRzdGQgOSwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRsaXMge3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRzbGRpIHt7Lip9fSwge3suKn19LCAzMlwiKVxuK19faml0ZWQoXCJcdG9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdG9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGkge3suKn19LCAwXCIpXG4rX19qaXRlZChcIlx0bHd6IDksIHt7Lip9fSh7ey4qfX0pXCIpXG4rX19qaXRlZChcIlx0c2x3aSB7ey4qfX0sIHt7Lip9fSwgMFwiKVxuK19faml0ZWQoXCJcdGNtcGx3XHR7ey4qfX0sIDlcIilcbitfX2ppdGVkKFwiXHRiZlx0MCwge3suKn19XCIpXG4rLyogYnBmX3RhaWxfY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xuK19faml0ZWQoXCJcdGxkIDksIC04KDEpXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQ5LCAzM1wiKVxuK19faml0ZWQoXCJcdGJmXHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDksIDAoOSlcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDksIDMzXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkaSA5LCA5LCAxXCIpXG4rX19qaXRlZChcIlx0bXVsbGkgMTAsIHt7Lip9fSwgOFwiKVxuK19faml0ZWQoXCJcdGFkZCAxMCwgMTAsIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDEwLCB7ey4qfX0oMTApXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQxMCwgMFwiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDEwLCB7ey4qfX0oMTApXCIpXG4rX19qaXRlZChcIlx0YWRkaSAxMCwgMTAsIHt7Lip9fVwiKSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xuK19faml0ZWQoXCJcdG10Y3RyIDEwXCIpXG4rX19qaXRlZChcIlx0bGQgMTAsIC04KDEpXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQxMCwgMzNcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRhZGRpIDEwLCAxLCAtOFwiKVxuK19faml0ZWQoXCJcdHN0ZCA5LCAwKDEwKVwiKVxuK19faml0ZWQoXCJcdGJjdHJcIilcbitfX2ppdGVkKFwiXHRtclx0MywgOFwiKVxuK19faml0ZWQoXCJcdGJsclwiKVxuK1xuIFNFQyhcInRjXCIpXG4gX19uYWtlZCBpbnQgbWFpbih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCAzY2UzMmQxMzRlMmNjLi4wMWIxNDIwMDk3ZDI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtMzc4LDYgKzM3OCw3IEBAIGVudW0gYXJjaCB7XG4gXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuIFx0QVJDSF9TMzkwWFx0PSAweDEwLFxuIFx0QVJDSF9MT09OR0FSQ0hcdD0gMHgyMCxcbitcdEFSQ0hfUE9XRVJQQzY0XHQ9IDB4NDAsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbkBAIC0zOTIsNiArMzkzLDggQEAgc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG4gXHRyZXR1cm4gQVJDSF9TMzkwWDtcbiAjZWxpZiBkZWZpbmVkKF9fbG9vbmdhcmNoX18pXG4gXHRyZXR1cm4gQVJDSF9MT09OR0FSQ0g7XG4rI2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKVxuK1x0cmV0dXJuIEFSQ0hfUE9XRVJQQzY0O1xuICNlbmRpZlxuIFx0cmV0dXJuIEFSQ0hfVU5LTk9XTjtcbiB9XG5AQCAtNTg1LDYgKzU4OCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfUzM5MFg7XG4gXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcIkxPT05HQVJDSFwiKSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9MT09OR0FSQ0g7XG4rXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcIlBPV0VSUEM2NFwiKSA9PSAwKSB7XG4rXHRcdFx0XHRhcmNoID0gQVJDSF9QT1dFUlBDNjQ7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFBSSU5UX0ZBSUwoXCJiYWQgYXJjaCBzcGVjOiAnJXMnXFxuXCIsIHZhbCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6NDkuOTgzNjc3OTk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzc4ODQyOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIEl0IGFwcGVhcnMgdG8gZm9jdXMgZXhjbHVzaXZlbHkgb24gaW1wcm92ZW1lbnRzIGFuZCBmaXhlcyB3aXRoaW4gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlci4gVGhlIGZpbGVzIHRvdWNoZWQgYXJlIGFsbCB3aXRoaW4gdGhlIGBhcmNoL3Bvd2VycGMvbmV0L2AgZGlyZWN0b3J5LCBkZWFsaW5nIHdpdGggQlBGIEpJVCBjb21waWxhdGlvbiwgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBzZWxmdGVzdHMuXG5cbk15IGluaXRpYWwgc2NhbiByZXZlYWxzIHNldmVyYWwga2V5IG1vZGlmaWNhdGlvbnM6IHRoZSBpbnRyb2R1Y3Rpb24gb2YgYENPREVHRU5fTUlOX1BBU1NFU2AgYW5kIGBDT0RFR0VOX01BWF9QQVNTRVNgLCBhZGp1c3RtZW50cyB0byBob3cgZmVudHJ5IHN0dWJzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhbGlnbm1lbnQgaXNzdWVzIHJlbGF0ZWQgdG8gYGR1bW15X3RyYW1wX2FkZHJgIHdpdGhpbiB0aGUgYGZpbWFnZWAsIGFuZCBmaXhlcyB0byB0aGUgYGV4aXRfYWRkcmAgYnJhbmNoIHJhbmdlIGNoZWNrLiBUaGVyZSdzIGFsc28gYW4gdXBkYXRlIHRvIDY0LWJpdCBjb21wYXJpc29uIGluc3RydWN0aW9ucyBmb3IgdGFpbCBjYWxscywgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9hcmNoX3RleHRfcG9rZWAgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBgZHVtbXlfdHJhbXBfYWRkcmAgbG9jYXRpb24uIFBsdXMsIHRoZSBzZWxmdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQuXG5cblRoaW5raW5nIGFib3V0IEtNU0FOLCBpdCdzIHdvcnRoIG5vdGluZyB0aGF0IEtNU0FOIGl0c2VsZiBpcyBub3Qgc3VwcG9ydGVkIG9uIFBvd2VyUEMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBtYWtlIHN1cmUgdGhhdCByZWdhcmRsZXNzIG9mIGFyY2gsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBLTVNBTiBydWxlcy4gVGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgYW5kIHNlbGZ0ZXN0cywgZm9jdXNpbmcgb24gaW1wcm92aW5nIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2VzcyBhbmQgZW5zdXJpbmcgY29ycmVjdCBvcGVyYXRpb24uIFRoZXJlJ3Mgbm8gbW9kaWZpY2F0aW9uIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJJ3ZlIGxvb2tlZCBhdCB0aGUgZnVuY3Rpb25zIG1vZGlmeWluZyB0aGUgSklUIGltYWdlIGJ1ZmZlci4gVGhlIGNvZGUgd3JpdGVzIGR1bW15X3RyYW1wIG9yIE5PUHMgdG8gdGhlIEpJVCBpbWFnZSBidWZmZXIuIEFsc28gdGhlIEpJVCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQvZnJlZWQgYnkgdGhlIGJpbmFyeSBwYWNrIGFsbG9jYXRvci4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzLCBvciBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgS01TQU4gcnVsZXMgcmlnb3JvdXNseSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIHNldCB0byBgZmFsc2VgLlxuXG5IZXJlJ3MgbXkgZGV0YWlsZWQgcmVhc29uaW5nOiBUaGUgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBhbmQgc2VsZnRlc3RzLiBJdCByZXNvbHZlcyBKSVQgY29kZSBnZW5lcmF0aW9uIGlzc3VlcywgYWRkcmVzc2VzIGZlbnRyeSB0cmFtcG9saW5lIGFsaWdubWVudCwgY29ycmVjdHMgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucywgYW5kIHVwZGF0ZXMgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIHJlbGF0ZWQgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbW9yZSByZWxhdGVkIHRvIGp1bXAgdGFyZ2V0IG1pc2NhbGN1bGF0aW9ucyBvciBidWZmZXIgYm91bmRzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgKGFuZCBLU0FOIGlzIG5vdCBldmVuIHN1cHBvcnRlZCBvbiBQb3dlclBDIGFueXdheSkuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwMSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTE6MDEuMzYyNTI1MjkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQqKSBhbmQgY29ycmVzcG9uZGluZyBCUEYgc2VsZnRlc3RzLiBUaGUgY2hhbmdlcyBhZGRyZXNzIG11bHRpLXBhc3MgY29kZSBnZW5lcmF0aW9uIGNvbnZlcmdlbmNlLCBhbGlnbm1lbnQgb2YgZmVudHJ5IHN0dWJzL2R1bW15IHRyYW1wb2xpbmUgYWRkcmVzcywgYnJhbmNoIHJhbmdlIGNoZWNrcywgYW5kIDY0LWJpdCByZWdpc3RlciBjb21wYXJpc29ucyBmb3IgdGFpbCBjYWxscy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQqKSBhbmQgY29ycmVzcG9uZGluZyBCUEYgc2VsZnRlc3RzLiBUaGUgY2hhbmdlcyBhZGRyZXNzIG11bHRpLXBhc3MgY29kZSBnZW5lcmF0aW9uIGNvbnZlcmdlbmNlLCBhbGlnbm1lbnQgb2YgZmVudHJ5IHN0dWJzL2R1bW15IHRyYW1wb2xpbmUgYWRkcmVzcywgYnJhbmNoIHJhbmdlIGNoZWNrcywgYW5kIDY0LWJpdCByZWdpc3RlciBjb21wYXJpc29ucyBmb3IgdGFpbCBjYWxscy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowm4l8c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 07:27:13 +0000 UTC FinishedAt: 2026-08-31 08:11:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "0f5932b0-ef1d-4c25-8c7d-62832d2d43d1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_arch_text_poke" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmNoX3RleHRfcG9rZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdCopIGFuZCBjb3JyZXNwb25kaW5nIEJQRiBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgbXVsdGktcGFzcyBjb2RlIGdlbmVyYXRpb24gY29udmVyZ2VuY2UsIGFsaWdubWVudCBvZiBmZW50cnkgc3R1YnMvZHVtbXkgdHJhbXBvbGluZSBhZGRyZXNzLCBicmFuY2ggcmFuZ2UgY2hlY2tzLCBhbmQgNjQtYml0IHJlZ2lzdGVyIGNvbXBhcmlzb25zIGZvciB0YWlsIGNhbGxzLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjNjczNmU5NzRiZjMzMjY2NGZkMDI4ZDRjMTY5NDkyMDYyYmE0NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowOTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5pbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5AQCAtMTQsNiAmIzQzOzE0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BwYy1vcGNvZGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdlIG5lZWQgYXQgbGVhc3QgMiBwYXNzZXMgZm9yIHByb3BlciBjb2RlIGdlbmVyYXRpb24sIGFuZCBtYXkgbmVlZFxuJiM0MzsgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQ09ERUdFTl9NSU5fUEFTU0VTICAgIDJcbiYjNDM7I2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgM1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX1BQQzY0X0VMRl9BQklfVjFcbiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkVcdDI0XG4gI2Vsc2VcbkBAIC0xODgsNiAmIzQzOzE5NSwxMiBAQCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0IHtcbiBcbiAjZGVmaW5lIGJwZl90b19wcGMocilcdChjdHgtXHUwMDNlYjJwW3JdKVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BQQzY0XG4mIzQzOyNkZWZpbmUgUFBDX1JBV19DTVBMTEkoYSwgaSkgICAgUFBDX1JBV19DTVBMREkoYSwgaSlcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19QUEMzMlxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlx0MyAvKiBUaHJlZSBpbnN0cnVjdGlvbnMgPVx1MDAzZSAxMiBieXRlcyAqL1xuICNlbHNlXG5AQCAtMjE0LDEwICYjNDM7MjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXG4gaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICAgdTMyICphZGRycywgaW50IHBhc3MsIGJvb2wgZXh0cmFfcGFzcyk7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4mIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4gdm9pZCBicGZfaml0X3JlYWxsb2NfcmVncyhzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcbiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0bG9uZyBleGl0X2FkZHIpO1xuIHZvaWQgcHJlcGFyZV9mb3JfZnNlc3Npb25fZmVudHJ5KHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IGNvb2tpZV9jbnQsXG4gXHRcdFx0XHRcdFx0XHRcdGludCBjb29raWVfb2ZmLCBpbnQgcmV0dmFsX29mZik7XG4gdm9pZCBzdG9yZV9mdW5jX21ldGEodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZik7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDdiMDdiNDM1NzVmMTEuLmMyNzE3ZjBkOWNkZDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtNDksMTEgJiM0Mzs0OSwzNSBAQCBhc20gKFxuIFwmIzM0O1x0LnBvcHNlY3Rpb25cdFx0XHRcdDtcJiMzNDtcbiApO1xuIFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XG4mIzQzO1x0aW50IHN0dWJfc3o7XG4gXG4gXHQvKlxuJiM0MztcdCAqIFRoZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkIGlzIHBsYWNlZCBhdCBib3R0b20gb2YgTG9uZyBicmFuY2ggc3R1Yi5cbiYjNDM7XHQgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLlxuJiM0MztcdCAqIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YiwgdG8gbWFrZVxuJiM0MztcdCAqIG9vbF9zdHViX2lkeCBcdTAwMjYgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzXG4mIzQzO1x0ICogb24gc3RhcnQgb2YgZmltYWdlIGFuZCB0aGUgc3R1YiYjMzk7cyBpbnN0cnVjdGlvbiBjb3VudC4gVGhlXG4mIzQzO1x0ICogc3R1YnMgYmxvY2sgaGFzIDExIGluc3RydWN0aW9ucyAod2l0aCBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSlcbiYjNDM7XHQgKiBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGFcbiYjNDM7XHQgKiBOT1AgaWYgdGhlIGFkZHJlc3Mgb2YgZHVtbXlfdHJhbXBfYWRkciBpcyBub24gYWxpZ25lZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZVxuJiM0MztcdCAqIHJlcXVpcmVkIHRvIGFjY29tbW9kYXRlIGFsaWdubWVudCBOT1AuIEluIGNhc2UgZmluYWwgcGFzcyBza2lwc1xuJiM0MztcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxuJiM0MztcdCAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdHN0dWJfc3ogPSBJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSA/IDQ0IDogNDA7XG4mIzQzO1x0aWYgKCFpbWFnZSB8fCAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmaW1hZ2UgJiM0MzsgY3R4LVx1MDAzZWlkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpXG4mIzQzO1x0XHRFTUlUKFBQQ19SQVdfTk9QKCkpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqXHRub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHJcbiBcdCAqIE91dC1vZi1saW5lIHN0dWI6XG4gXHQgKlx0bWZsclx0cjBcbiBcdCAqXHRbYnxibF1cdHRyYW1wXG5AQCAtNzAsNDQgJiM0Mzs5NCw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdC8qXG4gXHQgKiBMb25nIGJyYW5jaCBzdHViOlxuLVx0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlXG4gXHQgKlx0bWZsclx0cjExXG4gXHQgKlx0YmNsXHQyMCwzMSwkJiM0Mzs0XG4tXHQgKlx0bWZsclx0cjEyXG4tXHQgKlx0bGRcdHIxMiwgLTgtU1pMKHIxMilcbiYjNDM7XHQgKlx0bWZsclx0cjEyXHQvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC5cbiYjNDM7XHQgKlx0bGRcdHIxMiwgMjAocjEyKSAvLyBvZmZzZXQoZHVtbXlfdHJhbXBfYWRkcikgZnJvbSBwcmV2IGluc3QuIGlzIDIwXG4gXHQgKlx0bXRjdHJcdHIxMlxuLVx0ICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiYjNDM7XHQgKlx0bXRsclx0cjExXHQvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiBcdCAqXHRiY3RyXG4mIzQzO1x0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlICAvLyBTWkwgYnl0ZXMgYWxpZ25lZFxuIFx0ICovXG4tXHRpZiAoaW1hZ2UpXG4tXHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbi1cdGN0eC1cdTAwM2VpZHggJiM0Mzs9IFNaTCAvIDQ7XG4gXHRsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC1cdTAwM2VpZHg7XG4gXHRFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNMNCgpKTtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTIpKTtcbi1cdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTtcbiYjNDM7XHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgMjApKTtcbiBcdEVNSVQoUFBDX1JBV19NVENUUihfUjEyKSk7XG4gXHRFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNUUigpKTtcbiBcbiYjNDM7XHRpZiAoaW1hZ2UpXG4mIzQzO1x0XHQqKCh1bnNpZ25lZCBsb25nICopXHUwMDI2aW1hZ2VbY3R4LVx1MDAzZWlkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VpZHggJiM0Mzs9IFNaTCAvIDQ7XG4mIzQzO1xuIFx0aWYgKCFicGZfaml0X29vbF9zdHViKSB7XG4gXHRcdGJwZl9qaXRfb29sX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIG9vbF9zdHViX2lkeCkgKiA0O1xuIFx0XHRicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7XG4gXHR9XG4gfVxuIFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0XHRcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbiB7XG4tXHRpZiAoIWV4aXRfYWRkciB8fCBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4mIzQzO1x0aWYgKGV4aXRfYWRkciBcdTAwMjZcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGV4aXRfYWRkcik7XG4tXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKSB7XG4tXHRcdGlmIChXQVJOX09OKCFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpKVxuLVx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKFxuJiM0MztcdFx0XHQobG9uZykoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiBcdFx0UFBDX0pNUChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcik7XG4gXHR9IGVsc2Uge1xuIFx0XHRjdHgtXHUwMDNlYWx0X2V4aXRfYWRkciA9IGN0eC1cdTAwM2VpZHggKiA0O1xuLVx0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuJiM0MztcdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgZmltYWdlLCBjdHgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc0LDYgJiM0MzszMDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0ICovXG4gXHRpZiAoY2djdHguc2VlbiBcdTAwMjYgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkge1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuJiM0MztcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG4gXHRcdGlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4LCBhZGRycywgMCwgZmFsc2UpKVxuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbkBAIC0yODYsNyAmIzQzOzMxMyw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4tXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIFx1MDAyNmNnY3R4KTtcbiYjNDM7XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4KTtcbiBcbiBcdGZpeHVwX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7XG4gXHRleHRhYmxlX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpO1xuQEAgLTMwNiwxMCAmIzQzOzMzMywxMyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0Y29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcdGZjb2RlX2Jhc2UgPSAodTMyICopKGZpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcbi1cdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yICovXG4tXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFx1MDAzYyAzOyBwYXNzJiM0MzsmIzQzOykge1xuJiM0MztcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yJiM0MzssIGxvb3AgdW50aWwgcHJvZ3JhbSBzaXplIGNvbnZlcmdlcy4gKi9cbiYjNDM7XHRmb3IgKHBhc3MgPSAxOyBwYXNzIFx1MDAzYz0gQ09ERUdFTl9NQVhfUEFTU0VTOyBwYXNzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHByZXZfcHJvZ2xlbiA9IHByb2dsZW47XG4mIzQzO1xuIFx0XHQvKiBOb3cgYnVpbGQgdGhlIHByb2xvZ3VlLCBib2R5IGNvZGUgXHUwMDI2IGVwaWxvZ3VlIGZvciByZWFsLiAqL1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuJiM0MztcdFx0Y2djdHguZXhlbnRyeV9pZHggPSAwO1xuIFx0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCwgYWRkcnMsIHBhc3MsXG5AQCAtMzE4LDExICYjNDM7MzQ4LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRcdFx0YnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7XG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1x0XHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbiYjNDM7XHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1xuJiM0MztcdFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XG4gXG4gXHRcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Bhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwmIzM0OywgcGFzcyxcbi1cdFx0XHRcdHByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pO1xuJiM0MztcdFx0XHRcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovXG4mIzQzO1x0XHRpZiAocGFzcyBcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiA9PSBwcmV2X3Byb2dsZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O0JQRiBKSVQ6IFByb2dyYW0gZGlkIG5vdCBjb252ZXJnZSBhZnRlciAlZCBwYXNzZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuJiM0MztcdFx0XHRicGZfYXJjaF90ZXh0X2NvcHkoXHUwMDI2Zmhkci1cdTAwM2VzaXplLCBcdTAwMjZoZHItXHUwMDNlc2l6ZSwgc2l6ZW9mKGhkci1cdTAwM2VzaXplKSk7XG4mIzQzO1x0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuJiM0MztcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG5AQCAtMzU3LDcgJiM0Mzs0MDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdFx0KHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuJiM0MztcdFx0aWYgKCFmcC1cdTAwM2VqaXRlZCBcdTAwMjZcdTAwMjYgcHJpdl9zdGFja19wdHIpIHtcbiBcdFx0XHRmcC1cdTAwM2VhdXgtXHUwMDNlcHJpdl9zdGFja19wdHIgPSBOVUxMO1xuIFx0XHRcdGZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTtcbiBcdFx0fVxuQEAgLTM5OSw3ICYjNDM7NDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3NcbiBcdHUzMiAqZml4dXA7XG4gXG4gXHQvKiBQb3B1bGF0ZSBleHRhYmxlIGVudHJpZXMgb25seSBpbiB0aGUgbGFzdCBwYXNzICovXG4tXHRpZiAocGFzcyAhPSAyKVxuJiM0MztcdGlmIChwYXNzIFx1MDAzYyBDT0RFR0VOX01JTl9QQVNTRVMpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKCFmcC1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSB8fFxuQEAgLTczOSw3ICYjNDM7Nzg0LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGVcbiBcdFx0ICogU2V0dGluZyB0aGUgdGFpbF9jYWxsX2luZm8gaW4gdHJhbXBvbGluZSYjMzk7cyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdFx0RU1JVChQUENfUkFXX0NNUExMSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKF9SMywgX1I0LCAtQlBGX1BQQ19UQUlMQ0FMTCkpO1xuIFxuQEAgLTEyNjUsNiAmIzQzOzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxuICAqIGJwZl9mdW5jOlxuICAqXHRbbm9wfGJdXHRvb2xfc3R1YlxuICAqIDIuIE91dC1vZi1saW5lIHN0dWI6XG4mIzQzOyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNzIsMTQgJiM0MzsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICpcdGJcdGJwZl9mdW5jICYjNDM7IDRcbiAgKiAzLiBMb25nIGJyYW5jaCBzdHViOlxuICAqIGxvbmdfYnJhbmNoX3N0dWI6XG4tICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXHRtZmxyXHRyMTFcbiAgKlx0YmNsXHQyMCwzMSwkJiM0Mzs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuJiM0MzsgKlx0bGRcdHIxMiwgMjAocjEyKVxuICAqXHRtdGN0clx0cjEyXG4gICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiAgKlx0YmN0clxuJiM0MzsgKlx0LmxvbmdcdFx1MDAzY2JyYW5jaF9hZGRyXHUwMDNlL1x1MDAzY2R1bW15X3RyYW1wXHUwMDNlXG4gICpcbiAgKiBkdW1teV90cmFtcCBpcyB1c2VkIHRvIHJlZHVjZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzLlxuICAqXG5AQCAtMTM4MSwxMCAmIzQzOzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgbW92ZWQgdG8gYm90dG9tIG9mIGxvbmcgYnJhbmNoIHN0dWIuXG4gXHQgKi9cbiBcdGlmICgobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSB8fFxuIFx0ICAgIChvbGRfYWRkciBcdTAwMjZcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2Uob2xkX2FkZHIgLSBpcCkpKVxuLVx0XHRyZXQgPSBwYXRjaF91bG9uZygodm9pZCAqKShicGZfZnVuY19lbmQgLSBicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgLSBTWkwpLFxuJiM0MztcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0RU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7XG4gXG5AQCAtMjM3LDcgJiM0MzsyMzcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuJiM0MztcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gfVxuIFxuIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovXG5AQCAtMTE0OSw3ICYjNDM7MTE0OSw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXG4gXHRcdFx0ICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuLVx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7XG4mIzQzO1x0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGRhYjEwNmNhZTIyYjUuLmU4MDMxMjE3MWFhNzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcdFx0ICovXG4gXHRcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbi1cdFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksXG4gXHRcdFx0XHRcdFx0XHRcdC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4XG4gXHR9XG4gfVxuIFxuLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4mIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4gXG5AQCAtNDA3LDcgJiM0Mzs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuJiM0MztcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gfVxuIFxuIC8qXG5AQCAtNjYyLDcgJiM0Mzs2NjIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpO1xuIFxuIFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpO1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpO1xuIFxuIFx0LyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovXG5AQCAtNjcyLDcgJiM0Mzs2NzIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0ICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKVxuIFx0ICogICBnb3RvIG91dDtcbiBcdCAqL1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XG4gXG4gXHQvKlxuQEAgLTcwNyw3ICYjNDM7NzA3LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIHRhaWxfY2FsbF9pbmZvLlxuIFx0ICovXG4gXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiYjNDM7XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXG4gXHQvKiBGaXJzdCBnZXQgYWRkcmVzcyBvZiB0YWlsX2NhbGxfaW5mbyAqL1xuQEAgLTE3MzcsNyAmIzQzOzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxuIFx0XHRcdCAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XG4mIzQzO1x0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc5LDkgJiM0MzsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm8gPSB7fTtcbiBcdF9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuIFx0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7XG4mIzQzO1x0X191MzIgdHJ1bmNfbGVuID0gMCwgZGlzYXNtX2xlbjtcbiBcdF9fdTMyICpmdW5jX2xlbnMgPSBOVUxMO1xuIFx0RklMRSAqdGV4dF9vdXQgPSBOVUxMO1xuIFx0dWludDhfdCAqaW1hZ2UgPSBOVUxMO1xuJiM0MztcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XG4gXHRpbnQgaSwgZXJyID0gMDtcbiBcbiBcdGlmICghbGx2bV9pbml0aWFsaXplZCkge1xuQEAgLTIyNSw5ICYjNDM7MjI3LDMwIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9wcm9nX2dldF9pbmZvX2J5X2ZkICMyXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBsYXN0IDggYnl0ZXMgY29udGFpbnMgZHVtbXlfdHJhbXBvbGluZSBhZGRyZXNzIGluIEpJVFxuJiM0MztcdCAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYyxcbiYjNDM7XHQgKiB3aGljaCBjYW4mIzM5O3QgZGlzYXNzZW1ibGUgdG8gYSB2YWxpZCBpbnN0cnVjdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xuJiM0MztcdGlmICh0cmlwbGUpIHtcbiYjNDM7XHRcdGlmIChzdHJzdHIodHJpcGxlLCBcJiMzNDtwb3dlcnBjNjRcJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsIFwmIzM0O3BwYzY0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0dHJ1bmNfbGVuID0gODtcbiYjNDM7XHRcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFwmIzM0O3Bvd2VycGNcJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsIFwmIzM0O3BwY1wmIzM0OykpXG4mIzQzO1x0XHRcdHRydW5jX2xlbiA9IDQ7XG4mIzQzO1x0XHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChwYyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBqaXRlZF9mdW5jczsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCYjMzQ7ZnVuYyAjJWQ6XFxuXCYjMzQ7LCBpKTtcbi1cdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZnVuY19sZW5zW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkaXNhc21fbGVuID0gZnVuY19sZW5zW2ldIFx1MDAzZSB0cnVuY19sZW4gP1xuJiM0MztcdFx0XHRcdFx0ZnVuY19sZW5zW2ldIC0gdHJ1bmNfbGVuIDogMDtcbiYjNDM7XHRcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgJiM0MzsgcGMsIGRpc2FzbV9sZW4pO1xuJiM0MztcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cGMgJiM0Mzs9IGZ1bmNfbGVuc1tpXTtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU5LDYgJiM0MzsxNTksNyBAQFxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwmIzM0O1JJU0NWNjRcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwmIzM0O3MzOTB4XCYjMzQ7KVxuICNkZWZpbmUgX19hcmNoX2xvb25nYXJjaFx0X19hcmNoKFwmIzM0O0xPT05HQVJDSFwmIzM0OylcbiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0XHRfX2FyY2goXCYjMzQ7UE9XRVJQQzY0XCYjMzQ7KVxuICNkZWZpbmUgX19jYXBzX3VucHJpdihjYXBzKVx0X190ZXN0X3RhZyhcJiMzNDt0ZXN0X2NhcHNfdW5wcml2PVwmIzM0OyBFWFBBTkRfUVVPVEUoY2FwcykpXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVx0X190ZXN0X3RhZyhcJiMzNDtsb2FkX21vZGU9aml0ZWRcJiMzNDspXG4gI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKVx0X190ZXN0X3RhZyhcJiMzNDtsb2FkX21vZGU9bm9faml0ZWRcJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG5pbmRleCA0OGZhMzRkMjk1OWY0Li45ODgwY2U0ZjE5MzFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbkBAIC05MSw2ICYjNDM7OTEsODQgQEAgX19qaXRlZChcJiMzNDtcdHBvcHFcdCVyYXhcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGptcFx0e3suKn19XCYjMzQ7KVx0XHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xuIF9faml0ZWQoXCYjMzQ7TDA6XHRsZWF2ZVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0e3socmV0cXxqbXBcdDB4KX19XCYjMzQ7KVx0XHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXG4mIzQzO19fYXJjaF9wb3dlcnBjNjRcbiYjNDM7LyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaSA5LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDksIC04KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bWZsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkdSAxLCB7ey4qfX0oMSlcJiMzNDspXG4mIzQzOy8qXG4mIzQzOyAqIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gZGlmZmVycyBiZXR3ZWVuIFBDUkVMIGFuZCBub24tUENSRUwga2VybmVscy5cbiYjNDM7ICogU2tpcCB0aGUgYWRkcmVzcyBnZW5lcmF0aW9uIHNlcXVlbmNlIGFuZCB2ZXJpZnkgb25seSB0aGF0IHRoZSBjYWxsXG4mIzQzOyAqIHRhcmdldCBpcyBsb2FkZWQgaW50byBDVFIgYmVmb3JlIGJyYW5jaGluZy5cbiYjNDM7ICovXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtdGN0ciB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YmN0cmxcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtclx0OCwgM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxpIDgsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRpIDEsIDEsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXRsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2Z1bmMgIzFcJiMzNDspXG4mIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzOy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGQgMTAsIDAoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRjbXBsZGlcdDksIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSA5LCAxMCwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgLTgoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaXMge3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzbGRpIHt7Lip9fSwge3suKn19LCAzMlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGkge3suKn19LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bHd6IDksIHt7Lip9fSh7ey4qfX0pXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c2x3aSB7ey4qfX0sIHt7Lip9fSwgMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGx3XHR7ey4qfX0sIDlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0MCwge3suKn19XCYjMzQ7KVxuJiM0MzsvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0OSwgMzNcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAwKDkpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y21wbGRpXHQ5LCAzM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGJ0XHR7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgOSwgOSwgMVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG11bGxpIDEwLCB7ey4qfX0sIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGQgMTAsIDEwLCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRidFx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgMTAsIDEwLCB7ey4qfX1cJiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtdGN0ciAxMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDEwLCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSAxMCwgMSwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgMCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiY3RyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO1xuIFNFQyhcJiMzNDt0Y1wmIzM0OylcbiBfX25ha2VkIGludCBtYWluKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IDNjZTMyZDEzNGUyY2MuLjAxYjE0MjAwOTdkMjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbkBAIC0zNzgsNiAmIzQzOzM3OCw3IEBAIGVudW0gYXJjaCB7XG4gXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuIFx0QVJDSF9TMzkwWFx0PSAweDEwLFxuIFx0QVJDSF9MT09OR0FSQ0hcdD0gMHgyMCxcbiYjNDM7XHRBUkNIX1BPV0VSUEM2NFx0PSAweDQwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG5AQCAtMzkyLDYgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiBcdHJldHVybiBBUkNIX1MzOTBYO1xuICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXylcbiBcdHJldHVybiBBUkNIX0xPT05HQVJDSDtcbiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKVxuJiM0MztcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcbiAjZW5kaWZcbiBcdHJldHVybiBBUkNIX1VOS05PV047XG4gfVxuQEAgLTU4NSw2ICYjNDM7NTg4LDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0XHRhcmNoID0gQVJDSF9TMzkwWDtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O0xPT05HQVJDSFwmIzM0OykgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfTE9PTkdBUkNIO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1BPV0VSUEM2NFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFyY2ggPSBBUkNIX1BPV0VSUEM2NDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0UFJJTlRfRkFJTChcJiMzNDtiYWQgYXJjaCBzcGVjOiAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHZhbCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmNoX3RleHRfcG9rZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGxvZ2ljLCBpbmNsdWRpbmcgY29kZSBnZW5lcmF0aW9uIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIGZlbnRyeSBzdHViIGFsaWdubWVudCwgdGV4dCBwb2tpbmcsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGFuZCA2NC1iaXQgdGFpbCBjYWxsIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIEJQRiBwcm9ncmFtIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBiZWhhdmlvciBvbiBQb3dlclBDIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA4OjA5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAppbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaApAQCAtMTQsNiAmIzQzOzE0LDEzIEBACiAjaW5jbHVkZSAmbHQ7YXNtL3BwYy1vcGNvZGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWlsZF9idWcuaCZndDsKIAomIzQzOy8qCiYjNDM7ICogV2UgbmVlZCBhdCBsZWFzdCAyIHBhc3NlcyBmb3IgcHJvcGVyIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIG1heSBuZWVkCiYjNDM7ICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBDT0RFR0VOX01JTl9QQVNTRVMgICAgMgomIzQzOyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDMKJiM0MzsKICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMQogI2RlZmluZSBGVU5DVElPTl9ERVNDUl9TSVpFCTI0CiAjZWxzZQpAQCAtMTg4LDYgJiM0MzsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7CiAKICNkZWZpbmUgYnBmX3RvX3BwYyhyKQkoY3R4LSZndDtiMnBbcl0pCiAKJiM0MzsjaWZkZWYgQ09ORklHX1BQQzY0CiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QUEMzMgogI2RlZmluZSBCUEZfRklYVVBfTEVOCTMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID0mZ3Q7IDEyIGJ5dGVzICovCiAjZWxzZQpAQCAtMjE0LDEwICYjNDM7MjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqCiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsCiAJCSAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTsKIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7CiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsCiYjNDM7CQkJCQkJCQkJCWxvbmcgZXhpdF9hZGRyKTsKIHZvaWQgcHJlcGFyZV9mb3JfZnNlc3Npb25fZmVudHJ5KHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IGNvb2tpZV9jbnQsCiAJCQkJCQkJCWludCBjb29raWVfb2ZmLCBpbnQgcmV0dmFsX29mZik7CiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDdiMDdiNDM1NzVmMTEuLmMyNzE3ZjBkOWNkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYwpAQCAtNDksMTEgJiM0Mzs0OSwzNSBAQCBhc20gKAogJiMzNDsJLnBvcHNlY3Rpb24JCQkJOyYjMzQ7CiApOwogCi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJaW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7CiYjNDM7CWludCBzdHViX3N6OwogCiAJLyoKJiM0MzsJICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLgomIzQzOwkgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLgomIzQzOwkgKiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsIHRvIG1ha2UKJiM0MzsJICogb29sX3N0dWJfaWR4ICZhbXA7IGxvbmdfYnJhbmNoX3N0dWJfaWR4IGNvbnN0YW50IGZyb20gZW5kLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzCiYjNDM7CSAqIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWImIzM5O3MgaW5zdHJ1Y3Rpb24gY291bnQuIFRoZQomIzQzOwkgKiBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKQomIzQzOwkgKiBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGEKJiM0MzsJICogTk9QIGlmIHRoZSBhZGRyZXNzIG9mIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuCiYjNDM7CSAqCiYjNDM7CSAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZQomIzQzOwkgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHMKJiM0MzsJICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kCiYjNDM7CSAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwOwomIzQzOwlpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtJmd0O2lkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpCiYjNDM7CQlFTUlUKFBQQ19SQVdfTk9QKCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKglub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHIKIAkgKiBPdXQtb2YtbGluZSBzdHViOgogCSAqCW1mbHIJcjAKIAkgKglbYnxibF0JdHJhbXAKQEAgLTcwLDQ0ICYjNDM7OTQsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAkvKgogCSAqIExvbmcgYnJhbmNoIHN0dWI6Ci0JICoJLmxvbmcJJmx0O2R1bW15X3RyYW1wX2FkZHImZ3Q7CiAJICoJbWZscglyMTEKIAkgKgliY2wJMjAsMzEsJCYjNDM7NAotCSAqCW1mbHIJcjEyCi0JICoJbGQJcjEyLCAtOC1TWkwocjEyKQomIzQzOwkgKgltZmxyCXIxMgkvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC4KJiM0MzsJICoJbGQJcjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjAKIAkgKgltdGN0cglyMTIKLQkgKgltdGxyCXIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQkkKJiM0MzsJICoJbXRscglyMTEJLy8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJCiAJICoJYmN0cgomIzQzOwkgKgkubG9uZwkmbHQ7ZHVtbXlfdHJhbXBfYWRkciZndDsgIC8vIFNaTCBieXRlcyBhbGlnbmVkCiAJICovCi0JaWYgKGltYWdlKQotCQkqKCh1bnNpZ25lZCBsb25nICopJmFtcDtpbWFnZVtjdHgtJmd0O2lkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7Ci0JY3R4LSZndDtpZHggJiM0Mzs9IFNaTCAvIDQ7CiAJbG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtJmd0O2lkeDsKIAlFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDTDQoKSk7CiAJRU1JVChQUENfUkFXX01GTFIoX1IxMikpOwotCUVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTsKJiM0MzsJRU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7CiAJRU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTsKIAlFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDVFIoKSk7CiAKJiM0MzsJaWYgKGltYWdlKQomIzQzOwkJKigodW5zaWduZWQgbG9uZyAqKSZhbXA7aW1hZ2VbY3R4LSZndDtpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wOwomIzQzOwomIzQzOwljdHgtJmd0O2lkeCAmIzQzOz0gU1pMIC8gNDsKJiM0MzsKIAlpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHsKIAkJYnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtJmd0O2lkeCAtIG9vbF9zdHViX2lkeCkgKiA0OwogCQlicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LSZndDtpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0OwogCX0KIH0KIAotaW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpCiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwKJiM0MzsJCQkJCQkJaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKQogewotCWlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiYjNDM7CWlmIChleGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtJmd0O2lkeCAqIDQpKSkgewogCQlQUENfSk1QKGV4aXRfYWRkcik7Ci0JfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIpIHsKLQkJaWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LSZndDthbHRfZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKAomIzQzOwkJCShsb25nKShjdHgtJmd0O2FsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiAJCVBQQ19KTVAoY3R4LSZndDthbHRfZXhpdF9hZGRyKTsKIAl9IGVsc2UgewogCQljdHgtJmd0O2FsdF9leGl0X2FkZHIgPSBjdHgtJmd0O2lkeCAqIDQ7Ci0JCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7CiYjNDM7CQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNzQsNiAmIzQzOzMwMCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJICovCiAJaWYgKGNnY3R4LnNlZW4gJmFtcDsgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkgewogCQljZ2N0eC5pZHggPSAwOwomIzQzOwkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsICZhbXA7Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpCiAJCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjg2LDcgJiM0MzszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCSAqLwogCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiAJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwotCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgJmFtcDtjZ2N0eCk7CiAKIAlmaXh1cF9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7CiAJZXh0YWJsZV9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpOwpAQCAtMzA2LDEwICYjNDM7MzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJY29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTsKIAlmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKLQkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqLwotCWZvciAocGFzcyA9IDE7IHBhc3MgJmx0OyAzOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiYjNDM7LCBsb29wIHVudGlsIHByb2dyYW0gc2l6ZSBjb252ZXJnZXMuICovCiYjNDM7CWZvciAocGFzcyA9IDE7IHBhc3MgJmx0Oz0gQ09ERUdFTl9NQVhfUEFTU0VTOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHByZXZfcHJvZ2xlbiA9IHByb2dsZW47CiYjNDM7CiAJCS8qIE5vdyBidWlsZCB0aGUgcHJvbG9ndWUsIGJvZHkgY29kZSAmYW1wOyBlcGlsb2d1ZSBmb3IgcmVhbC4gKi8KIAkJY2djdHguaWR4ID0gMDsKJiM0MzsJCWNnY3R4LmV4ZW50cnlfaWR4ID0gMDsKIAkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoY29kZV9iYXNlLCAmYW1wO2NnY3R4KTsKIAkJaWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCAmYW1wO2NnY3R4LCBhZGRycywgcGFzcywKQEAgLTMxOCwxMSAmIzQzOzM0OCwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwkJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwomIzQzOwkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwomIzQzOwkJcHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7CiAKIAkJaWYgKGJwZl9qaXRfZW5hYmxlICZndDsgMSkKIAkJCXByX2luZm8oJiMzNDtQYXNzICVkOiBzaHJpbmsgPSAlZCwgc2VlbiA9IDB4JXhcbiYjMzQ7LCBwYXNzLAotCQkJCXByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pOwomIzQzOwkJCQlwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTsKJiM0MzsKJiM0MzsJCS8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovCiYjNDM7CQlpZiAocGFzcyAmZ3Q7PSBDT0RFR0VOX01JTl9QQVNTRVMgJmFtcDsmYW1wOyBwcm9nbGVuID09IHByZXZfcHJvZ2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyAmYW1wOyZhbXA7IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7QlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xuJiMzNDssCiYjNDM7CQkJCQkJCQlDT0RFR0VOX01BWF9QQVNTRVMpOwomIzQzOwkJCWJwZl9hcmNoX3RleHRfY29weSgmYW1wO2ZoZHItJmd0O3NpemUsICZhbXA7aGRyLSZndDtzaXplLCBzaXplb2YoaGRyLSZndDtzaXplKSk7CiYjNDM7CQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiYjNDM7CQkJZ290byBvdXRfZXJyOwomIzQzOwkJfQogCX0KIAogCWlmIChicGZfaml0X2VuYWJsZSAmZ3Q7IDEpCkBAIC0zNTcsNyAmIzQzOzQwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCQkJKHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKIG91dF9hZGRyczoKLQkJaWYgKCFpbWFnZSAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiYjNDM7CQlpZiAoIWZwLSZndDtqaXRlZCAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiAJCQlmcC0mZ3Q7YXV4LSZndDtwcml2X3N0YWNrX3B0ciA9IE5VTEw7CiAJCQlmcmVlX3BlcmNwdShwcml2X3N0YWNrX3B0cik7CiAJCX0KQEAgLTM5OSw3ICYjNDM7NDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3MKIAl1MzIgKmZpeHVwOwogCiAJLyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqLwotCWlmIChwYXNzICE9IDIpCiYjNDM7CWlmIChwYXNzICZsdDsgQ09ERUdFTl9NSU5fUEFTU0VTKQogCQlyZXR1cm4gMDsKIAogCWlmICghZnAtJmd0O2F1eC0mZ3Q7ZXh0YWJsZSB8fApAQCAtNzM5LDcgJiM0Mzs3ODQsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZQogCQkgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJiMzOTtzIGZyYW1lCiAJCSAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLgogCQkgKi8KLQkJRU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7CiAKQEAgLTEyNjUsNiAmIzQzOzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKQogICogYnBmX2Z1bmM6CiAgKglbbm9wfGJdCW9vbF9zdHViCiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOgomIzQzOyAqCW5vcAkvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudAogICogb29sX3N0dWI6CiAgKgltZmxyCXIwCiAgKglbYnxibF0JJmx0O2JwZl9wcm9nJmd0Oy8mbHQ7bG9uZ19icmFuY2hfc3R1YiZndDsKQEAgLTEyNzIsMTQgJiM0MzsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpCiAgKgliCWJwZl9mdW5jICYjNDM7IDQKICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6CiAgKiBsb25nX2JyYW5jaF9zdHViOgotICoJLmxvbmcJJmx0O2JyYW5jaF9hZGRyJmd0Oy8mbHQ7ZHVtbXlfdHJhbXAmZ3Q7CiAgKgltZmxyCXIxMQogICoJYmNsCTIwLDMxLCQmIzQzOzQKICAqCW1mbHIJcjEyCi0gKglsZAlyMTIsIC0xNihyMTIpCiYjNDM7ICoJbGQJcjEyLCAyMChyMTIpCiAgKgltdGN0cglyMTIKICAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQogICoJYmN0cgomIzQzOyAqCS5sb25nCSZsdDticmFuY2hfYWRkciZndDsvJmx0O2R1bW15X3RyYW1wJmd0OwogICoKICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuCiAgKgpAQCAtMTM4MSwxMCAmIzQzOzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsCiAJICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOgogCSAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHIKIAkgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS4KJiM0MzsJICoKJiM0MzsJICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi4KIAkgKi8KIAlpZiAoKG5ld19hZGRyICZhbXA7JmFtcDsgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8CiAJICAgIChvbGRfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSkKLQkJcmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSwKJiM0MzsJCXJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi8KIAkJCQkgIChuZXdfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/CiAJCQkJICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMKQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgKIAogfQogCi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogewogCUVNSVQoUFBDX1JBV19NUihfUjMsIGJwZl90b19wcGMoQlBGX1JFR18wKSkpOwogCkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovCkBAIC0xMTQ5LDcgJiM0MzsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGUKIAkJCSAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuCiAJCQkgKi8KIAkJCWlmIChpICE9IGZsZW4gLSAxKSB7Ci0JCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7CiYjNDM7CQkJCXJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwKJiM0MzsJCQkJCQkJCWN0eCwgX1IwLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZGFiMTA2Y2FlMjJiNS4uZTgwMzEyMTcxYWE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMjc2LDcgJiM0MzsyNzYsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogCQkgKi8KIAkJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCAwKSk7CiAJCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwgLShCUEZfUFBDX1RBSUxDQUxMKSkpOwotCQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJCUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCQlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCQlFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwKIAkJCQkJCQkJLShCUEZfUFBDX1RBSUxDQUxMKSkpOwpAQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eAogCX0KIH0KIAotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIHsKIAlicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpOwogCkBAIC00MDcsNyAmIzQzOzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qCkBAIC02NjIsNyAmIzQzOzY2Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJUFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpOwogCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpOwogCiAJLyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovCkBAIC02NzIsNyAmIzQzOzY3Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKQogCSAqICAgZ290byBvdXQ7CiAJICovCi0JRU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCVBQQ19CQ0NfU0hPUlQoQ09ORF9FUSwgb3V0KTsKIAogCS8qCkBAIC03MDcsNyAmIzQzOzcwNyw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogdGFpbF9jYWxsX2luZm8uCiAJICovCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCiAJLyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi8KQEAgLTE3MzcsNyAmIzQzOzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZQogCQkJICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS4KIAkJCSAqLwogCQkJaWYgKGkgIT0gZmxlbiAtIDEpIHsKLQkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIHRtcDFfcmVnLCBleGl0X2FkZHIpOwomIzQzOwkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCwKJiM0MzsJCQkJCQkJCXRtcDFfcmVnLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMKaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYwpAQCAtMTc5LDkgJiM0MzsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvID0ge307CiAJX191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7CiAJX191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7CiYjNDM7CV9fdTMyIHRydW5jX2xlbiA9IDAsIGRpc2FzbV9sZW47CiAJX191MzIgKmZ1bmNfbGVucyA9IE5VTEw7CiAJRklMRSAqdGV4dF9vdXQgPSBOVUxMOwogCXVpbnQ4X3QgKmltYWdlID0gTlVMTDsKJiM0MzsJY2hhciAqdHJpcGxlID0gTlVMTDsKIAlpbnQgaSwgZXJyID0gMDsKIAogCWlmICghbGx2bV9pbml0aWFsaXplZCkgewpAQCAtMjI1LDkgJiM0MzsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzImIzM0OykpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUCiYjNDM7CSAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYywKJiM0MzsJICogd2hpY2ggY2FuJiMzOTt0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uCiYjNDM7CSAqLwomIzQzOwl0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpOwomIzQzOwlpZiAodHJpcGxlKSB7CiYjNDM7CQlpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjNjQmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgJiMzNDtwcGM2NCYjMzQ7KSkKJiM0MzsJCQl0cnVuY19sZW4gPSA4OwomIzQzOwkJZWxzZSBpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsICYjMzQ7cHBjJiMzNDspKQomIzQzOwkJCXRydW5jX2xlbiA9IDQ7CiYjNDM7CQlMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTsKJiM0MzsJfQomIzQzOwogCWZvciAocGMgPSAwLCBpID0gMDsgaSAmbHQ7IGppdGVkX2Z1bmNzOyAmIzQzOyYjNDM7aSkgewogCQlmcHJpbnRmKHRleHRfb3V0LCAmIzM0O2Z1bmMgIyVkOlxuJiMzNDssIGkpOwotCQlkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICYjNDM7IHBjLCBmdW5jX2xlbnNbaV0pOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERpc2FibGVkIEpJVCBoYXZlIHplcm8gZnVuY19sZW5zLCBoZW5jZSB1bmRlcmZsb3cKJiM0MzsJCSAqLwomIzQzOwkJZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSAmZ3Q7IHRydW5jX2xlbiA/CiYjNDM7CQkJCQlmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwOwomIzQzOwkJZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZGlzYXNtX2xlbik7CiYjNDM7CiAJCWZwcmludGYodGV4dF9vdXQsICYjMzQ7XG4mIzM0Oyk7CiAJCXBjICYjNDM7PSBmdW5jX2xlbnNbaV07CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaApAQCAtMTU5LDYgJiM0MzsxNTksNyBAQAogI2RlZmluZSBfX2FyY2hfcmlzY3Y2NAkJX19hcmNoKCYjMzQ7UklTQ1Y2NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfczM5MHgJCV9fYXJjaCgmIzM0O3MzOTB4JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2gJX19hcmNoKCYjMzQ7TE9PTkdBUkNIJiMzNDspCiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0CV9fYXJjaCgmIzM0O1BPV0VSUEM2NCYjMzQ7KQogI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2NhcHNfdW5wcml2PSYjMzQ7IEVYUEFORF9RVU9URShjYXBzKSkKICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKCkJX190ZXN0X3RhZygmIzM0O2xvYWRfbW9kZT1qaXRlZCYjMzQ7KQogI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKQlfX3Rlc3RfdGFnKCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKaW5kZXggNDhmYTM0ZDI5NTlmNC4uOTg4MGNlNGYxOTMxYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYwpAQCAtOTEsNiAmIzQzOzkxLDg0IEBAIF9faml0ZWQoJiMzNDsJcG9wcQklcmF4JiMzNDspCiBfX2ppdGVkKCYjMzQ7CWptcAl7ey4qfX0mIzM0OykJCS8qIGp1bXAgdG8gdGFpbCBjYWxsIHRndCAgICovCiBfX2ppdGVkKCYjMzQ7TDA6CWxlYXZlJiMzNDspCiBfX2ppdGVkKCYjMzQ7CXt7KHJldHF8am1wCTB4KX19JiMzNDspCQkvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovCiYjNDM7X19hcmNoX3Bvd2VycGM2NAomIzQzOy8qIHByb2dyYW0gZW50cnkgZm9yIG1haW4oKSwgcmVndWxhciBmdW5jdGlvbiBwcm9sb2d1ZSAqLwomIzQzO19faml0ZWQoJiMzNDsJbm9wJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwlsaSA5LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1mbHIgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc3RkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGR1IDEsIHt7Lip9fSgxKSYjMzQ7KQomIzQzOy8qCiYjNDM7ICogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogQWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gZGlmZmVycyBiZXR3ZWVuIFBDUkVMIGFuZCBub24tUENSRUwga2VybmVscy4KJiM0MzsgKiBTa2lwIHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2UgYW5kIHZlcmlmeSBvbmx5IHRoYXQgdGhlIGNhbGwKJiM0MzsgKiB0YXJnZXQgaXMgbG9hZGVkIGludG8gQ1RSIGJlZm9yZSBicmFuY2hpbmcuCiYjNDM7ICovCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliY3RybCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJOCwgMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGkgOCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxLCAxLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGxyIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTMsIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJsciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7ZnVuYyAjMSYjMzQ7KQomIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovCiYjNDM7X19qaXRlZCgmIzM0Owlub3AmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi8KJiM0MzsvKiB0YWlsIGNhbGwgcHJvbG9ndWUgZm9yIHN1YnByb2dyYW0gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCAwKDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAtOCgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQk5LCAzMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgOSwgMTAsIC04JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpcyB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc2xkaSB7ey4qfX0sIHt7Lip9fSwgMzImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpIHt7Lip9fSwge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpIHt7Lip9fSwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbHd6IDksIHt7Lip9fSh7ey4qfX0pJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzbHdpIHt7Lip9fSwge3suKn19LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsdwl7ey4qfX0sIDkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCTAsIHt7Lip9fSYjMzQ7KQomIzQzOy8qIGJwZl90YWlsX2NhbGwgaW1wbGVtZW50YXRpb24gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDksIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAwKDkpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDksIDksIDEmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW11bGxpIDEwLCB7ey4qfX0sIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZCAxMCwgMTAsIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIHt7Lip9fSgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQkxMCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCB7ey4qfX0oMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDEwLCAxMCwge3suKn19JiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciAxMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJMTAsIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlidAl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxMCwgMSwgLTgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZCA5LCAwKDEwKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmN0ciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJMywgOCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmxyJiMzNDspCiYjNDM7CiBTRUMoJiMzNDt0YyYjMzQ7KQogX19uYWtlZCBpbnQgbWFpbih2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwppbmRleCAzY2UzMmQxMzRlMmNjLi4wMWIxNDIwMDk3ZDI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwpAQCAtMzc4LDYgJiM0MzszNzgsNyBAQCBlbnVtIGFyY2ggewogCUFSQ0hfUklTQ1Y2NAk9IDB4OCwKIAlBUkNIX1MzOTBYCT0gMHgxMCwKIAlBUkNIX0xPT05HQVJDSAk9IDB4MjAsCiYjNDM7CUFSQ0hfUE9XRVJQQzY0CT0gMHg0MCwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKQpAQCAtMzkyLDYgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKIAlyZXR1cm4gQVJDSF9TMzkwWDsKICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXykKIAlyZXR1cm4gQVJDSF9MT09OR0FSQ0g7CiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQomIzQzOwlyZXR1cm4gQVJDSF9QT1dFUlBDNjQ7CiAjZW5kaWYKIAlyZXR1cm4gQVJDSF9VTktOT1dOOwogfQpAQCAtNTg1LDYgJiM0Mzs1ODgsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlciwKIAkJCQlhcmNoID0gQVJDSF9TMzkwWDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtMT09OR0FSQ0gmIzM0OykgPT0gMCkgewogCQkJCWFyY2ggPSBBUkNIX0xPT05HQVJDSDsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7UE9XRVJQQzY0JiMzNDspID09IDApIHsKJiM0MzsJCQkJYXJjaCA9IEFSQ0hfUE9XRVJQQzY0OwogCQkJfSBlbHNlIHsKIAkJCQlQUklOVF9GQUlMKCYjMzQ7YmFkIGFyY2ggc3BlYzogJiMzOTslcyYjMzk7XG4mIzM0OywgdmFsKTsKIAkJCQllcnIgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvd2VyUEMgQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgUG93ZXJQQyBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgQlBGIEpJVCBjb21waWxhdGlvbiBhc3BlY3RzLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgYnBmX2ppdC5oYCwgdGhlIGNvbXBpbGF0aW9uIGNvZGUgaXRzZWxmIChgYnBmX2ppdF9jb21wLmNgLCBgYnBmX2ppdF9jb21wMzIuY2AsIGBicGZfaml0X2NvbXA2NC5jYCksIGFuZCBzb21lIHNlbGYtdGVzdHMuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ247IHdlIG5lZWQgdG8gdmVyaWZ5IGFsbCBvZiB0aGVzZSBwaWVjZXMgd29yayBjb3JyZWN0bHkgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIGV4aXN0aW5nIGNvZGUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJcyB0aGVyZSBhIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnRyb2R1Y2VkPyBIYXMgYW4gZXhpc3Rpbmcgb3B0aW9uIGJlZW4gY2hhbmdlZCwgb3IgaXMgYW4gZXhpc3Rpbmcgb3B0aW9uIG5vdyByZXF1aXJlZD8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgb3Igc2ltcGx5IHJlYWRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB0byBzZWUgd2hhdCBvcHRpb25zIHRoaXMgaW1wYWN0cy4gQWZ0ZXIgdGhhdCwgSSYjMzk7bGwgYW5hbHl6ZSB0aGUgY29kZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODItXHRzZWxlY3QgQVJDSF9VU0VfUVVFVUVEX1JXTE9DS1NcdFx0aWYgUFBDX1FVRVVFRF9TUElOTE9DS1NcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE4MzpcdHNlbGVjdCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODQtXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfVE9QRE9XTl9NTUFQX0xBWU9VVFxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI0Ni1cdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1x0aWYgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUlkgfHwgTVBST0ZJTEVfS0VSTkVMIHx8IFBQQzMyXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNDc6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjQ4LVx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1Ncbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZz00PUNPTkZJR19ISUdIX1JFU19USU1FUlM9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWc6NTpDT05GSUdfQlBGX0pJVD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZy02LUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9OTQ9Q09ORklHX0ROU19SRVNPTFZFUj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo5NTpDT05GSUdfQlBGX0pJVD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy05Ni0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTc9Q09ORklHX0JQRl9TWVNDQUxMPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzo4OkNPTkZJR19CUEZfSklUPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy05LUNPTkZJR19CUEZfTFNNPXlcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTQtI1xuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wJChCSVRTKS5vXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTYtXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlPTc9aWZkZWYgQ09ORklHX1BQQzY0XG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfdGltZWRfbWF5X2dvdG8ub1xuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZS05LWVuZGlmXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmgtNy0gKi9cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjg6I2lmbmRlZiBfQlBGX0pJVF9IXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaDo5OiNkZWZpbmUgX0JQRl9KSVRfSFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmgtMTAtXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg9MTY3PXN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTE3OS1cdHVuc2lnbmVkIGludCBzdGFja19zaXplO1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg6MTgwOlx0aW50IGIycFtNQVhfQlBGX0pJVF9SRUcgJiM0MzsgM107XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaC0xODEtXHR1bnNpZ25lZCBpbnQgZXhlbnRyeV9pZHg7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jLTQyLS8qIEJQRiByZWdpc3RlciB1c2FnZSAqL1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jOjQzOiNkZWZpbmUgVE1QX1JFR1x0XHRcdChNQVhfQlBGX0pJVF9SRUcgJiM0MzsgMClcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYy00NC1cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtNzAtLyogQlBGIHJlZ2lzdGVyIHVzYWdlICovXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzE6I2RlZmluZSBUTVBfUkVHXzFcdChNQVhfQlBGX0pJVF9SRUcgJiM0MzsgMClcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzo3MjojZGVmaW5lIFRNUF9SRUdfMlx0KE1BWF9CUEZfSklUX1JFRyAmIzQzOyAxKVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjczOiNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgIChNQVhfQlBGX0pJVF9SRUcgJiM0MzsgMilcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy03NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3dlclBDIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdXp6LXdvcnRoeT8mIzM0OyBJdCYjMzk7cyB0b3VjaGluZyB0aGUgcG93ZXJwYyBCUEYgSklUIGNvbXBpbGVyIOKAkyB0aGF0JiMzOTtzIGEga2V5IGFyZWEuIEFueXRoaW5nIHRoYXQgYWZmZWN0cyBjb3JlIGFyY2hpdGVjdHVyZSBleGVjdXRpb24gbG9naWMsIGVzcGVjaWFsbHkgd2hlbiB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIGludm9sdmVkIHZpYSBgYnBmKClgIHN5c3RlbSBjYWxscywgQlBGIHByb2dyYW0gbG9hZGluZywgdmVyaWZpY2F0aW9uLCBhbmQgSklUIGNvbXBpbGF0aW9uIG9uIFBvd2VyUEMgKGFuZCBjYW4gYmUgcnVuIGluIFFFTVUsIGV2ZW4gYmV0dGVyISksIHJhaXNlcyBhIGZsYWcuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGludGVybmFscyBvZiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgc2VlIGNoYW5nZXMgdG8gbXVsdGlwbGUgZmlsZXM6IGBicGZfaml0LmhgLCBgYnBmX2ppdF9jb21wLmNgLCBhbmQgYGJwZl9qaXRfY29tcDY0LmNgLiBJJiMzOTttIHNlZWluZyB1cGRhdGVzIHRvIGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGluZ3MgbGlrZSBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCB0YWlsIGNhbGxzICh1c2luZyBkaWZmZXJlbnQgY29tcGFyZSBpbnN0cnVjdGlvbnMpLCBmZW50cnkgc3R1YnMsIGJyYW5jaCByYW5nZXMgYW5kIHRoZSBleGl0IGluc3RydWN0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9uIHRvIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBKSVQgY29tcGlsYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBzZWxmdGVzdHMgZm9yIHRhaWwgY2FsbCBKSVQgdmVyaWZpY2F0aW9uIGlzIGFub3RoZXIgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgaXMgYSBjb21wbGV4IGFyZWEgdG8gY29uc2lkZXIuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgdG8gbG9vayBhdCBmdXJ0aGVyPyYjMzQ7ICBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIEJQRiBKSVQgb24gUG93ZXJQQy4gIGBicGZfYXJjaF90ZXh0X3Bva2VgIGlzIGFsc28gaGVyZS4gTGV0IG1lIGNvbXBpbGUgYSBsaXN0IG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFzIGEgcXVpY2sgd2F5IHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zOgoKKiAgIGBicGZfaW50X2ppdF9jb21waWxlYAoqICAgYGJwZl9hcmNoX3RleHRfcG9rZWAKKiAgIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AKKiAgIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYAoqICAgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gCiogICBgYnBmX2FkZF9leHRhYmxlX2VudHJ5YAoKTm93LCB0aGUgbmV4dCB0aGluZyBpcyB0byBxdWlja2x5IGNoZWNrIGlmIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBzdGF0aWMuIEdvdHRhIHNlZSBpZiBpdCYjMzk7cyBleHRlcm5hbGx5IGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mj1zdGF0aWMgdm9pZCBwcml2X3N0YWNrX2NoZWNrX2d1YXJkKHZvaWQgX19wZXJjcHUgKnByaXZfc3RhY2tfcHRyLCBpbnQgYWxsb2Nfc2l6ZSxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTE5MC1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTkxOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xOTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqS2NvbmZpZyBhbmQgQlBGIEludGVncmF0aW9uIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgcmVxdWlyZWQgZm9yIHRoaXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIG5ldHdvcmtpbmcgY29kZSBhbmQgdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29uZmlndXJhdGlvbi4gVGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGBhcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlIHRvIGluY2x1ZGUgdGhlIGdlbmVyYWwgQlBGIEtjb25maWcgc2V0dXAsIGJlY2F1c2UgSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGxvY2F0ZSB0aGUgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbnMuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBwb3RlbnRpYWxseSB0d2Vha2luZyB0aGUgQlBGIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmbGFncyBhcmUgc2V0LCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZW0gaW4gdGhlIEtjb25maWcgZmlsZXMsIGxpa2VseSB1bmRlciB0aGUgbmV0d29ya2luZyBvciBwb3NzaWJseSBzZWN1cml0eSBzdWItdHJlZXMuIEZpbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIEJQRiBmZWF0dXJlcyBpbiB0aGUgdGFyZ2V0IGtlcm5lbC4gQWZ0ZXIgbG9jYXRpbmcgdGhlbSwgSSB3aWxsIGFzc2VzcyB3aGVyZSB0aGVzZSBmbGFncyBhcmUgbG9jYXRlZCBpbiB0aGUgYnVpbGQgdHJlZS4gVGhlIG1vcmUgY29udGV4dCBJIGhhdmUsIHRoZSBiZXR0ZXIgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEJQRiBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCB0aGF0LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgc2VjdGlvbiwgcm91Z2hseSBiZXR3ZWVuIGxpbmVzIDI3IGFuZCA2MC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIHN1YnN5c3RlbSBsaWtlIEJQRi4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb25hbGl0eSBvciBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgQlBGIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGFuZCB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBvd2VyUEMgTmV0d29yayBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBwb3dlcnBjIG5ldHdvcmsgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gYGFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGVgLiYjMzQ7IEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgbmV0d29yay1yZWxhdGVkIGRyaXZlcnMgYW5kIG1vZHVsZXMgZm9yIHRoZSBQb3dlclBDIGFyY2hpdGVjdHVyZSB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgc3RhbmRhcmQgR05VIE1ha2UgY29uc3RydWN0czogb2JqZWN0IGZpbGUgbGlzdHMsIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGxpa2VseSBzb21lIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBhbmQgdGFyZ2V0cy4gR2l2ZW4gdGhlIFBvd2VyUEMmIzM5O3MgaGlzdG9yeSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBwbGF0Zm9ybS1zcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgcG9zc2libGUgbGVnYWN5IGNvZGUgY29uc3RydWN0cyB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gc2lmdCB0aHJvdWdoLiBUaGlzIE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIG92ZXJ2aWV3IG9mIGhvdyB0aGUgbmV0d29ya2luZyBzdGFjayBpcyBiZWluZyBpbnRlZ3JhdGVkIGF0IHRoZSBib2FyZCBsZXZlbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEFyY2gtc3BlY2lmaWMgbmV0d29yayBtb2R1bGVzXG4gICA0Olx0I1xuICAgNTpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wJChCSVRTKS5vXG4gICA2Olx0XG4gICA3Olx0aWZkZWYgQ09ORklHX1BQQzY0XG4gICA4Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfdGltZWRfbWF5X2dvdG8ub1xuICAgOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODYyCgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciBQb3dlclBDKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgYmVlbiByZXZpZXdpbmcgYSBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBhcyBmb2xsb3dzOiBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIEpJVCBjb21waWxhdGlvbiwgc3BlY2lmaWNhbGx5IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIHRoZSByZWxldmFudCBQb3dlclBDIGFyY2hpdGVjdHVyZSBmbGFncyBsaWtlIGBQUENgIGFuZCBgUFBDNjRgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhhdCBhcmUgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyB0byBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBicGZfaW50X2ppdF9jb21waWxlYCwgYGJwZl9hcmNoX3RleHRfcG9rZWAsIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYCwgYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfYnVpbGRfZXBpbG9ndWVgLCBhbmQgYGJwZl9hZGRfZXh0YWJsZV9lbnRyeWAuIFRoZXNlIGFyZSBhbGwgc3Ryb25nIGluZGljYXRvcnMgb2YgY29yZSBmdW5jdGlvbmFsaXR5IGJlaW5nIGFsdGVyZWQuIEkgYWxzbyBjaGVja2VkIHdoaWNoIG9mIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLCBvciBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuCgpCYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBJJiMzOTt2ZSBpZGVudGlmaWVkIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAgYXMgdGhlIG1haW4gbm9uLWhvdC1wYXRoIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uLiBUaGV5IGFyZSB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludHMsIGFuZCBsaWtlbHkgdGhlIHBsYWNlcyB3aGVyZSBhIGZ1enplciBjYW4gc3RhcnQgdG8gaW5mbHVlbmNlIGNvZGUgZXhlY3V0aW9uLgoKR2l2ZW4gdGhlc2UgZmluZGluZ3MsIEnigJltIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBhbmQgd2lsbCB0aGVyZWZvcmUgbmVlZCB0byBiZSB0ZXN0ZWQgZm9yIHN0YWJpbGl0eSwgc2VjdXJpdHksIGFuZCBjb3JyZWN0IG9wZXJhdGlvbi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGFkZHJlc3NpbmcgYXNwZWN0cyBsaWtlIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YnMgYWxpZ25tZW50IGFuZCBvZmZzZXRzLCB0YWlsIGNhbGwgY29tcGFyaXNvbnMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGV4dGFibGUgaGFuZGxpbmcsIGFuZCB0aGUgdGV4dCBwb2tpbmcgbWVjaGFuaXNtLiBBbGwgb2YgdGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBKSVQgY29kZSBnZW5lcmF0aW9uIGFuZCBleGVjdXRpb24gZm9yIEJQRiBwcm9ncmFtcyBvbiBQUEMvUFBDNjQgYXJjaGl0ZWN0dXJlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB2aWEgdGhlIEJQRiBzdWJzeXN0ZW0vc3lzY2FsbC4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlIHJlc3VsdHMgdG8gcmVmbGVjdCB0aGlzOiBJJiMzOTtsbCBtYXJrIGl0IGFzIHdvcnRoIGZ1enppbmcgKG9idmlvdXNseSkuIE15IHJlYXNvbmluZyB3aWxsIGhpZ2hsaWdodCB0aGF0IHRoZSBwYXRjaCBhZmZlY3RzIEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbi4gSSYjMzk7bGwgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfYXJjaF90ZXh0X3Bva2VgLiBBbmQgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgbmVlZHMgdGhlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmNoX3RleHRfcG9rZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGxvZ2ljLCBpbmNsdWRpbmcgY29kZSBnZW5lcmF0aW9uIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIGZlbnRyeSBzdHViIGFsaWdubWVudCwgdGV4dCBwb2tpbmcsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGFuZCA2NC1iaXQgdGFpbCBjYWxsIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIEJQRiBwcm9ncmFtIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBiZWhhdmlvciBvbiBQb3dlclBDIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgKGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdCopIGFuZCBjb3JyZXNwb25kaW5nIEJQRiBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgbXVsdGktcGFzcyBjb2RlIGdlbmVyYXRpb24gY29udmVyZ2VuY2UsIGFsaWdubWVudCBvZiBmZW50cnkgc3R1YnMvZHVtbXkgdHJhbXBvbGluZSBhZGRyZXNzLCBicmFuY2ggcmFuZ2UgY2hlY2tzLCBhbmQgNjQtYml0IHJlZ2lzdGVyIGNvbXBhcmlzb25zIGZvciB0YWlsIGNhbGxzLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA4OjA5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAppbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaApAQCAtMTQsNiAmIzQzOzE0LDEzIEBACiAjaW5jbHVkZSAmbHQ7YXNtL3BwYy1vcGNvZGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWlsZF9idWcuaCZndDsKIAomIzQzOy8qCiYjNDM7ICogV2UgbmVlZCBhdCBsZWFzdCAyIHBhc3NlcyBmb3IgcHJvcGVyIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIG1heSBuZWVkCiYjNDM7ICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBDT0RFR0VOX01JTl9QQVNTRVMgICAgMgomIzQzOyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDMKJiM0MzsKICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMQogI2RlZmluZSBGVU5DVElPTl9ERVNDUl9TSVpFCTI0CiAjZWxzZQpAQCAtMTg4LDYgJiM0MzsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7CiAKICNkZWZpbmUgYnBmX3RvX3BwYyhyKQkoY3R4LSZndDtiMnBbcl0pCiAKJiM0MzsjaWZkZWYgQ09ORklHX1BQQzY0CiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QUEMzMgogI2RlZmluZSBCUEZfRklYVVBfTEVOCTMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID0mZ3Q7IDEyIGJ5dGVzICovCiAjZWxzZQpAQCAtMjE0LDEwICYjNDM7MjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqCiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsCiAJCSAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTsKIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpOwomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7CiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsCiYjNDM7CQkJCQkJCQkJCWxvbmcgZXhpdF9hZGRyKTsKIHZvaWQgcHJlcGFyZV9mb3JfZnNlc3Npb25fZmVudHJ5KHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IGNvb2tpZV9jbnQsCiAJCQkJCQkJCWludCBjb29raWVfb2ZmLCBpbnQgcmV0dmFsX29mZik7CiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDdiMDdiNDM1NzVmMTEuLmMyNzE3ZjBkOWNkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYwpAQCAtNDksMTEgJiM0Mzs0OSwzNSBAQCBhc20gKAogJiMzNDsJLnBvcHNlY3Rpb24JCQkJOyYjMzQ7CiApOwogCi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJaW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7CiYjNDM7CWludCBzdHViX3N6OwogCiAJLyoKJiM0MzsJICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLgomIzQzOwkgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLgomIzQzOwkgKiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsIHRvIG1ha2UKJiM0MzsJICogb29sX3N0dWJfaWR4ICZhbXA7IGxvbmdfYnJhbmNoX3N0dWJfaWR4IGNvbnN0YW50IGZyb20gZW5kLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzCiYjNDM7CSAqIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWImIzM5O3MgaW5zdHJ1Y3Rpb24gY291bnQuIFRoZQomIzQzOwkgKiBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKQomIzQzOwkgKiBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGEKJiM0MzsJICogTk9QIGlmIHRoZSBhZGRyZXNzIG9mIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuCiYjNDM7CSAqCiYjNDM7CSAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZQomIzQzOwkgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHMKJiM0MzsJICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kCiYjNDM7CSAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwOwomIzQzOwlpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtJmd0O2lkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpCiYjNDM7CQlFTUlUKFBQQ19SQVdfTk9QKCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKglub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHIKIAkgKiBPdXQtb2YtbGluZSBzdHViOgogCSAqCW1mbHIJcjAKIAkgKglbYnxibF0JdHJhbXAKQEAgLTcwLDQ0ICYjNDM7OTQsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAkvKgogCSAqIExvbmcgYnJhbmNoIHN0dWI6Ci0JICoJLmxvbmcJJmx0O2R1bW15X3RyYW1wX2FkZHImZ3Q7CiAJICoJbWZscglyMTEKIAkgKgliY2wJMjAsMzEsJCYjNDM7NAotCSAqCW1mbHIJcjEyCi0JICoJbGQJcjEyLCAtOC1TWkwocjEyKQomIzQzOwkgKgltZmxyCXIxMgkvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC4KJiM0MzsJICoJbGQJcjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjAKIAkgKgltdGN0cglyMTIKLQkgKgltdGxyCXIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQkkKJiM0MzsJICoJbXRscglyMTEJLy8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJCiAJICoJYmN0cgomIzQzOwkgKgkubG9uZwkmbHQ7ZHVtbXlfdHJhbXBfYWRkciZndDsgIC8vIFNaTCBieXRlcyBhbGlnbmVkCiAJICovCi0JaWYgKGltYWdlKQotCQkqKCh1bnNpZ25lZCBsb25nICopJmFtcDtpbWFnZVtjdHgtJmd0O2lkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7Ci0JY3R4LSZndDtpZHggJiM0Mzs9IFNaTCAvIDQ7CiAJbG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtJmd0O2lkeDsKIAlFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDTDQoKSk7CiAJRU1JVChQUENfUkFXX01GTFIoX1IxMikpOwotCUVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTsKJiM0MzsJRU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7CiAJRU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTsKIAlFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7CiAJRU1JVChQUENfUkFXX0JDVFIoKSk7CiAKJiM0MzsJaWYgKGltYWdlKQomIzQzOwkJKigodW5zaWduZWQgbG9uZyAqKSZhbXA7aW1hZ2VbY3R4LSZndDtpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wOwomIzQzOwomIzQzOwljdHgtJmd0O2lkeCAmIzQzOz0gU1pMIC8gNDsKJiM0MzsKIAlpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHsKIAkJYnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtJmd0O2lkeCAtIG9vbF9zdHViX2lkeCkgKiA0OwogCQlicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LSZndDtpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0OwogCX0KIH0KIAotaW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpCiYjNDM7aW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwKJiM0MzsJCQkJCQkJaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKQogewotCWlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiYjNDM7CWlmIChleGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtJmd0O2lkeCAqIDQpKSkgewogCQlQUENfSk1QKGV4aXRfYWRkcik7Ci0JfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIpIHsKLQkJaWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LSZndDthbHRfZXhpdF9hZGRyIC0gKGN0eC0mZ3Q7aWR4ICogNCkpKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJfSBlbHNlIGlmIChjdHgtJmd0O2FsdF9leGl0X2FkZHIgJmFtcDsmYW1wOyBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKAomIzQzOwkJCShsb25nKShjdHgtJmd0O2FsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiAJCVBQQ19KTVAoY3R4LSZndDthbHRfZXhpdF9hZGRyKTsKIAl9IGVsc2UgewogCQljdHgtJmd0O2FsdF9leGl0X2FkZHIgPSBjdHgtJmd0O2lkeCAqIDQ7Ci0JCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7CiYjNDM7CQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNzQsNiAmIzQzOzMwMCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJICovCiAJaWYgKGNnY3R4LnNlZW4gJmFtcDsgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkgewogCQljZ2N0eC5pZHggPSAwOwomIzQzOwkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsICZhbXA7Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpCiAJCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjg2LDcgJiM0MzszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCSAqLwogCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiAJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwotCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgJmFtcDtjZ2N0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgJmFtcDtjZ2N0eCk7CiAKIAlmaXh1cF9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7CiAJZXh0YWJsZV9sZW4gPSBmcC0mZ3Q7YXV4LSZndDtudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpOwpAQCAtMzA2LDEwICYjNDM7MzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJY29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTsKIAlmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKLQkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqLwotCWZvciAocGFzcyA9IDE7IHBhc3MgJmx0OyAzOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiYjNDM7LCBsb29wIHVudGlsIHByb2dyYW0gc2l6ZSBjb252ZXJnZXMuICovCiYjNDM7CWZvciAocGFzcyA9IDE7IHBhc3MgJmx0Oz0gQ09ERUdFTl9NQVhfUEFTU0VTOyBwYXNzJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHByZXZfcHJvZ2xlbiA9IHByb2dsZW47CiYjNDM7CiAJCS8qIE5vdyBidWlsZCB0aGUgcHJvbG9ndWUsIGJvZHkgY29kZSAmYW1wOyBlcGlsb2d1ZSBmb3IgcmVhbC4gKi8KIAkJY2djdHguaWR4ID0gMDsKJiM0MzsJCWNnY3R4LmV4ZW50cnlfaWR4ID0gMDsKIAkJY2djdHguYWx0X2V4aXRfYWRkciA9IDA7CiAJCWJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoY29kZV9iYXNlLCAmYW1wO2NnY3R4KTsKIAkJaWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCAmYW1wO2NnY3R4LCBhZGRycywgcGFzcywKQEAgLTMxOCwxMSAmIzQzOzM0OCwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwkJYWRkcnNbZnAtJmd0O2xlbl0gPSBjZ2N0eC5pZHggKiA0OwomIzQzOwkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsICZhbXA7Y2djdHgpOwomIzQzOwomIzQzOwkJcHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7CiAKIAkJaWYgKGJwZl9qaXRfZW5hYmxlICZndDsgMSkKIAkJCXByX2luZm8oJiMzNDtQYXNzICVkOiBzaHJpbmsgPSAlZCwgc2VlbiA9IDB4JXhcbiYjMzQ7LCBwYXNzLAotCQkJCXByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pOwomIzQzOwkJCQlwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTsKJiM0MzsKJiM0MzsJCS8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovCiYjNDM7CQlpZiAocGFzcyAmZ3Q7PSBDT0RFR0VOX01JTl9QQVNTRVMgJmFtcDsmYW1wOyBwcm9nbGVuID09IHByZXZfcHJvZ2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyAmYW1wOyZhbXA7IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7QlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xuJiMzNDssCiYjNDM7CQkJCQkJCQlDT0RFR0VOX01BWF9QQVNTRVMpOwomIzQzOwkJCWJwZl9hcmNoX3RleHRfY29weSgmYW1wO2ZoZHItJmd0O3NpemUsICZhbXA7aGRyLSZndDtzaXplLCBzaXplb2YoaGRyLSZndDtzaXplKSk7CiYjNDM7CQkJYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7CiYjNDM7CQkJZ290byBvdXRfZXJyOwomIzQzOwkJfQogCX0KIAogCWlmIChicGZfaml0X2VuYWJsZSAmZ3Q7IDEpCkBAIC0zNTcsNyAmIzQzOzQwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCQkJKHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAKIG91dF9hZGRyczoKLQkJaWYgKCFpbWFnZSAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiYjNDM7CQlpZiAoIWZwLSZndDtqaXRlZCAmYW1wOyZhbXA7IHByaXZfc3RhY2tfcHRyKSB7CiAJCQlmcC0mZ3Q7YXV4LSZndDtwcml2X3N0YWNrX3B0ciA9IE5VTEw7CiAJCQlmcmVlX3BlcmNwdShwcml2X3N0YWNrX3B0cik7CiAJCX0KQEAgLTM5OSw3ICYjNDM7NDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3MKIAl1MzIgKmZpeHVwOwogCiAJLyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqLwotCWlmIChwYXNzICE9IDIpCiYjNDM7CWlmIChwYXNzICZsdDsgQ09ERUdFTl9NSU5fUEFTU0VTKQogCQlyZXR1cm4gMDsKIAogCWlmICghZnAtJmd0O2F1eC0mZ3Q7ZXh0YWJsZSB8fApAQCAtNzM5LDcgJiM0Mzs3ODQsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZQogCQkgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJiMzOTtzIGZyYW1lCiAJCSAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLgogCQkgKi8KLQkJRU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7CiAKQEAgLTEyNjUsNiAmIzQzOzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKQogICogYnBmX2Z1bmM6CiAgKglbbm9wfGJdCW9vbF9zdHViCiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOgomIzQzOyAqCW5vcAkvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudAogICogb29sX3N0dWI6CiAgKgltZmxyCXIwCiAgKglbYnxibF0JJmx0O2JwZl9wcm9nJmd0Oy8mbHQ7bG9uZ19icmFuY2hfc3R1YiZndDsKQEAgLTEyNzIsMTQgJiM0MzsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpCiAgKgliCWJwZl9mdW5jICYjNDM7IDQKICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6CiAgKiBsb25nX2JyYW5jaF9zdHViOgotICoJLmxvbmcJJmx0O2JyYW5jaF9hZGRyJmd0Oy8mbHQ7ZHVtbXlfdHJhbXAmZ3Q7CiAgKgltZmxyCXIxMQogICoJYmNsCTIwLDMxLCQmIzQzOzQKICAqCW1mbHIJcjEyCi0gKglsZAlyMTIsIC0xNihyMTIpCiYjNDM7ICoJbGQJcjEyLCAyMChyMTIpCiAgKgltdGN0cglyMTIKICAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQogICoJYmN0cgomIzQzOyAqCS5sb25nCSZsdDticmFuY2hfYWRkciZndDsvJmx0O2R1bW15X3RyYW1wJmd0OwogICoKICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuCiAgKgpAQCAtMTM4MSwxMCAmIzQzOzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsCiAJICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOgogCSAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHIKIAkgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS4KJiM0MzsJICoKJiM0MzsJICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi4KIAkgKi8KIAlpZiAoKG5ld19hZGRyICZhbXA7JmFtcDsgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8CiAJICAgIChvbGRfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSkKLQkJcmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSwKJiM0MzsJCXJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi8KIAkJCQkgIChuZXdfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/CiAJCQkJICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMKQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgKIAogfQogCi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQomIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogewogCUVNSVQoUFBDX1JBV19NUihfUjMsIGJwZl90b19wcGMoQlBGX1JFR18wKSkpOwogCkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovCkBAIC0xMTQ5LDcgJiM0MzsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGUKIAkJCSAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuCiAJCQkgKi8KIAkJCWlmIChpICE9IGZsZW4gLSAxKSB7Ci0JCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7CiYjNDM7CQkJCXJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwKJiM0MzsJCQkJCQkJCWN0eCwgX1IwLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZGFiMTA2Y2FlMjJiNS4uZTgwMzEyMTcxYWE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMjc2LDcgJiM0MzsyNzYsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogCQkgKi8KIAkJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCAwKSk7CiAJCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwgLShCUEZfUFBDX1RBSUxDQUxMKSkpOwotCQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJCUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCQlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCQlFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSwKIAkJCQkJCQkJLShCUEZfUFBDX1RBSUxDQUxMKSkpOwpAQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eAogCX0KIH0KIAotdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIHsKIAlicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpOwogCkBAIC00MDcsNyAmIzQzOzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiAKIAlFTUlUKFBQQ19SQVdfQkxSKCkpOwogCi0JYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7CiYjNDM7CWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7CiB9CiAKIC8qCkBAIC02NjIsNyAmIzQzOzY2Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJUFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpOwogCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpOwogCiAJLyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovCkBAIC02NzIsNyAmIzQzOzY3Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKQogCSAqICAgZ290byBvdXQ7CiAJICovCi0JRU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CUVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwogCVBQQ19CQ0NfU0hPUlQoQ09ORF9FUSwgb3V0KTsKIAogCS8qCkBAIC03MDcsNyAmIzQzOzcwNyw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvCiAJICogdGFpbF9jYWxsX2luZm8uCiAJICovCiAJRU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpOwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpOwogCiAJLyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi8KQEAgLTE3MzcsNyAmIzQzOzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZQogCQkJICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS4KIAkJCSAqLwogCQkJaWYgKGkgIT0gZmxlbiAtIDEpIHsKLQkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIHRtcDFfcmVnLCBleGl0X2FkZHIpOwomIzQzOwkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCwKJiM0MzsJCQkJCQkJCXRtcDFfcmVnLCBleGl0X2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMKaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYwpAQCAtMTc5LDkgJiM0MzsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvID0ge307CiAJX191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7CiAJX191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7CiYjNDM7CV9fdTMyIHRydW5jX2xlbiA9IDAsIGRpc2FzbV9sZW47CiAJX191MzIgKmZ1bmNfbGVucyA9IE5VTEw7CiAJRklMRSAqdGV4dF9vdXQgPSBOVUxMOwogCXVpbnQ4X3QgKmltYWdlID0gTlVMTDsKJiM0MzsJY2hhciAqdHJpcGxlID0gTlVMTDsKIAlpbnQgaSwgZXJyID0gMDsKIAogCWlmICghbGx2bV9pbml0aWFsaXplZCkgewpAQCAtMjI1LDkgJiM0MzsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeikKIAlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzImIzM0OykpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUCiYjNDM7CSAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYywKJiM0MzsJICogd2hpY2ggY2FuJiMzOTt0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uCiYjNDM7CSAqLwomIzQzOwl0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpOwomIzQzOwlpZiAodHJpcGxlKSB7CiYjNDM7CQlpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjNjQmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgJiMzNDtwcGM2NCYjMzQ7KSkKJiM0MzsJCQl0cnVuY19sZW4gPSA4OwomIzQzOwkJZWxzZSBpZiAoc3Ryc3RyKHRyaXBsZSwgJiMzNDtwb3dlcnBjJiMzNDspIHx8IHN0cnN0cih0cmlwbGUsICYjMzQ7cHBjJiMzNDspKQomIzQzOwkJCXRydW5jX2xlbiA9IDQ7CiYjNDM7CQlMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTsKJiM0MzsJfQomIzQzOwogCWZvciAocGMgPSAwLCBpID0gMDsgaSAmbHQ7IGppdGVkX2Z1bmNzOyAmIzQzOyYjNDM7aSkgewogCQlmcHJpbnRmKHRleHRfb3V0LCAmIzM0O2Z1bmMgIyVkOlxuJiMzNDssIGkpOwotCQlkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICYjNDM7IHBjLCBmdW5jX2xlbnNbaV0pOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERpc2FibGVkIEpJVCBoYXZlIHplcm8gZnVuY19sZW5zLCBoZW5jZSB1bmRlcmZsb3cKJiM0MzsJCSAqLwomIzQzOwkJZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSAmZ3Q7IHRydW5jX2xlbiA/CiYjNDM7CQkJCQlmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwOwomIzQzOwkJZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZGlzYXNtX2xlbik7CiYjNDM7CiAJCWZwcmludGYodGV4dF9vdXQsICYjMzQ7XG4mIzM0Oyk7CiAJCXBjICYjNDM7PSBmdW5jX2xlbnNbaV07CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaApAQCAtMTU5LDYgJiM0MzsxNTksNyBAQAogI2RlZmluZSBfX2FyY2hfcmlzY3Y2NAkJX19hcmNoKCYjMzQ7UklTQ1Y2NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfczM5MHgJCV9fYXJjaCgmIzM0O3MzOTB4JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2gJX19hcmNoKCYjMzQ7TE9PTkdBUkNIJiMzNDspCiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0CV9fYXJjaCgmIzM0O1BPV0VSUEM2NCYjMzQ7KQogI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2NhcHNfdW5wcml2PSYjMzQ7IEVYUEFORF9RVU9URShjYXBzKSkKICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKCkJX190ZXN0X3RhZygmIzM0O2xvYWRfbW9kZT1qaXRlZCYjMzQ7KQogI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKQlfX3Rlc3RfdGFnKCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKaW5kZXggNDhmYTM0ZDI5NTlmNC4uOTg4MGNlNGYxOTMxYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYwpAQCAtOTEsNiAmIzQzOzkxLDg0IEBAIF9faml0ZWQoJiMzNDsJcG9wcQklcmF4JiMzNDspCiBfX2ppdGVkKCYjMzQ7CWptcAl7ey4qfX0mIzM0OykJCS8qIGp1bXAgdG8gdGFpbCBjYWxsIHRndCAgICovCiBfX2ppdGVkKCYjMzQ7TDA6CWxlYXZlJiMzNDspCiBfX2ppdGVkKCYjMzQ7CXt7KHJldHF8am1wCTB4KX19JiMzNDspCQkvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovCiYjNDM7X19hcmNoX3Bvd2VycGM2NAomIzQzOy8qIHByb2dyYW0gZW50cnkgZm9yIG1haW4oKSwgcmVndWxhciBmdW5jdGlvbiBwcm9sb2d1ZSAqLwomIzQzO19faml0ZWQoJiMzNDsJbm9wJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwlsaSA5LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1mbHIgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc3RkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGR1IDEsIHt7Lip9fSgxKSYjMzQ7KQomIzQzOy8qCiYjNDM7ICogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogQWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gZGlmZmVycyBiZXR3ZWVuIFBDUkVMIGFuZCBub24tUENSRUwga2VybmVscy4KJiM0MzsgKiBTa2lwIHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2UgYW5kIHZlcmlmeSBvbmx5IHRoYXQgdGhlIGNhbGwKJiM0MzsgKiB0YXJnZXQgaXMgbG9hZGVkIGludG8gQ1RSIGJlZm9yZSBicmFuY2hpbmcuCiYjNDM7ICovCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliY3RybCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJOCwgMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGkgOCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxLCAxLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDAsIDE2KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGxyIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTMsIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJsciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7ZnVuYyAjMSYjMzQ7KQomIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovCiYjNDM7X19qaXRlZCgmIzM0Owlub3AmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi8KJiM0MzsvKiB0YWlsIGNhbGwgcHJvbG9ndWUgZm9yIHN1YnByb2dyYW0gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCAwKDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAtOCgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQk5LCAzMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgOSwgMTAsIC04JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgLTgoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpcyB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc2xkaSB7ey4qfX0sIHt7Lip9fSwgMzImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpIHt7Lip9fSwge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpIHt7Lip9fSwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbHd6IDksIHt7Lip9fSh7ey4qfX0pJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzbHdpIHt7Lip9fSwge3suKn19LCAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsdwl7ey4qfX0sIDkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCTAsIHt7Lip9fSYjMzQ7KQomIzQzOy8qIGJwZl90YWlsX2NhbGwgaW1wbGVtZW50YXRpb24gKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDksIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJmCXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAwKDkpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDksIDksIDEmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW11bGxpIDEwLCB7ey4qfX0sIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZCAxMCwgMTAsIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIHt7Lip9fSgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNtcGxkaQkxMCwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCB7ey4qfX0oMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDEwLCAxMCwge3suKn19JiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciAxMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgMTAsIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJMTAsIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlidAl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxMCwgMSwgLTgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZCA5LCAwKDEwKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmN0ciYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXIJMywgOCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmxyJiMzNDspCiYjNDM7CiBTRUMoJiMzNDt0YyYjMzQ7KQogX19uYWtlZCBpbnQgbWFpbih2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwppbmRleCAzY2UzMmQxMzRlMmNjLi4wMWIxNDIwMDk3ZDI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwpAQCAtMzc4LDYgJiM0MzszNzgsNyBAQCBlbnVtIGFyY2ggewogCUFSQ0hfUklTQ1Y2NAk9IDB4OCwKIAlBUkNIX1MzOTBYCT0gMHgxMCwKIAlBUkNIX0xPT05HQVJDSAk9IDB4MjAsCiYjNDM7CUFSQ0hfUE9XRVJQQzY0CT0gMHg0MCwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKQpAQCAtMzkyLDYgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKIAlyZXR1cm4gQVJDSF9TMzkwWDsKICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXykKIAlyZXR1cm4gQVJDSF9MT09OR0FSQ0g7CiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQomIzQzOwlyZXR1cm4gQVJDSF9QT1dFUlBDNjQ7CiAjZW5kaWYKIAlyZXR1cm4gQVJDSF9VTktOT1dOOwogfQpAQCAtNTg1LDYgJiM0Mzs1ODgsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlciwKIAkJCQlhcmNoID0gQVJDSF9TMzkwWDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtMT09OR0FSQ0gmIzM0OykgPT0gMCkgewogCQkJCWFyY2ggPSBBUkNIX0xPT05HQVJDSDsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7UE9XRVJQQzY0JiMzNDspID09IDApIHsKJiM0MzsJCQkJYXJjaCA9IEFSQ0hfUE9XRVJQQzY0OwogCQkJfSBlbHNlIHsKIAkJCQlQUklOVF9GQUlMKCYjMzQ7YmFkIGFyY2ggc3BlYzogJiMzOTslcyYjMzk7XG4mIzM0OywgdmFsKTsKIAkJCQllcnIgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDEKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMTI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBQb3dlclBDIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIEl0IGFwcGVhcnMgdG8gZm9jdXMgZXhjbHVzaXZlbHkgb24gaW1wcm92ZW1lbnRzIGFuZCBmaXhlcyB3aXRoaW4gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlci4gVGhlIGZpbGVzIHRvdWNoZWQgYXJlIGFsbCB3aXRoaW4gdGhlIGBhcmNoL3Bvd2VycGMvbmV0L2AgZGlyZWN0b3J5LCBkZWFsaW5nIHdpdGggQlBGIEpJVCBjb21waWxhdGlvbiwgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBzZWxmdGVzdHMuCgpNeSBpbml0aWFsIHNjYW4gcmV2ZWFscyBzZXZlcmFsIGtleSBtb2RpZmljYXRpb25zOiB0aGUgaW50cm9kdWN0aW9uIG9mIGBDT0RFR0VOX01JTl9QQVNTRVNgIGFuZCBgQ09ERUdFTl9NQVhfUEFTU0VTYCwgYWRqdXN0bWVudHMgdG8gaG93IGZlbnRyeSBzdHVicyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYWxpZ25tZW50IGlzc3VlcyByZWxhdGVkIHRvIGBkdW1teV90cmFtcF9hZGRyYCB3aXRoaW4gdGhlIGBmaW1hZ2VgLCBhbmQgZml4ZXMgdG8gdGhlIGBleGl0X2FkZHJgIGJyYW5jaCByYW5nZSBjaGVjay4gVGhlcmUmIzM5O3MgYWxzbyBhbiB1cGRhdGUgdG8gNjQtYml0IGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25zIGZvciB0YWlsIGNhbGxzLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgYnBmX2FyY2hfdGV4dF9wb2tlYCB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGBkdW1teV90cmFtcF9hZGRyYCBsb2NhdGlvbi4gUGx1cywgdGhlIHNlbGZ0ZXN0cyBoYXZlIGJlZW4gdXBkYXRlZC4KClRoaW5raW5nIGFib3V0IEtNU0FOLCBpdCYjMzk7cyB3b3J0aCBub3RpbmcgdGhhdCBLTVNBTiBpdHNlbGYgaXMgbm90IHN1cHBvcnRlZCBvbiBQb3dlclBDLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHJlZ2FyZGxlc3Mgb2YgYXJjaCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gcnVsZXMuIFRoZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGFuZCBzZWxmdGVzdHMsIGZvY3VzaW5nIG9uIGltcHJvdmluZyB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgYW5kIGVuc3VyaW5nIGNvcnJlY3Qgb3BlcmF0aW9uLiBUaGVyZSYjMzk7cyBubyBtb2RpZmljYXRpb24gb2Yga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgZnVuY3Rpb25zIG1vZGlmeWluZyB0aGUgSklUIGltYWdlIGJ1ZmZlci4gVGhlIGNvZGUgd3JpdGVzIGR1bW15X3RyYW1wIG9yIE5PUHMgdG8gdGhlIEpJVCBpbWFnZSBidWZmZXIuIEFsc28gdGhlIEpJVCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQvZnJlZWQgYnkgdGhlIGJpbmFyeSBwYWNrIGFsbG9jYXRvci4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzLCBvciBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZS4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIEtNU0FOIHJ1bGVzIHJpZ29yb3VzbHksIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gYGZhbHNlYC4KCkhlcmUmIzM5O3MgbXkgZGV0YWlsZWQgcmVhc29uaW5nOiBUaGUgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBhbmQgc2VsZnRlc3RzLiBJdCByZXNvbHZlcyBKSVQgY29kZSBnZW5lcmF0aW9uIGlzc3VlcywgYWRkcmVzc2VzIGZlbnRyeSB0cmFtcG9saW5lIGFsaWdubWVudCwgY29ycmVjdHMgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucywgYW5kIHVwZGF0ZXMgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIHJlbGF0ZWQgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbW9yZSByZWxhdGVkIHRvIGp1bXAgdGFyZ2V0IG1pc2NhbGN1bGF0aW9ucyBvciBidWZmZXIgYm91bmRzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgKGFuZCBLU0FOIGlzIG5vdCBldmVuIHN1cHBvcnRlZCBvbiBQb3dlclBDIGFueXdheSkuCgpUaW1lIHRvIHByZXBhcmUgdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciAoYXJjaC9wb3dlcnBjL25ldC9icGZfaml0KikgYW5kIGNvcnJlc3BvbmRpbmcgQlBGIHNlbGZ0ZXN0cy4gVGhlIGNoYW5nZXMgYWRkcmVzcyBtdWx0aS1wYXNzIGNvZGUgZ2VuZXJhdGlvbiBjb252ZXJnZW5jZSwgYWxpZ25tZW50IG9mIGZlbnRyeSBzdHVicy9kdW1teSB0cmFtcG9saW5lIGFkZHJlc3MsIGJyYW5jaCByYW5nZSBjaGVja3MsIGFuZCA2NC1iaXQgcmVnaXN0ZXIgY29tcGFyaXNvbnMgZm9yIHRhaWwgY2FsbHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gSklUIGNvZGUgZ2VuZXJhdGlvbiBvciBidWZmZXIgc2l6aW5nIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGNvbXBpbGVyIHZlcmlmaWNhdGlvbiwgcnVudGltZSBleGVjdXRpb24gdGVzdHMsIG9yIEtBU0FOLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciAoYXJjaC9wb3dlcnBjL25ldC9icGZfaml0KikgYW5kIGNvcnJlc3BvbmRpbmcgQlBGIHNlbGZ0ZXN0cy4gVGhlIGNoYW5nZXMgYWRkcmVzcyBtdWx0aS1wYXNzIGNvZGUgZ2VuZXJhdGlvbiBjb252ZXJnZW5jZSwgYWxpZ25tZW50IG9mIGZlbnRyeSBzdHVicy9kdW1teSB0cmFtcG9saW5lIGFkZHJlc3MsIGJyYW5jaCByYW5nZSBjaGVja3MsIGFuZCA2NC1iaXQgcmVnaXN0ZXIgY29tcGFyaXNvbnMgZm9yIHRhaWwgY2FsbHMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gSklUIGNvZGUgZ2VuZXJhdGlvbiBvciBidWZmZXIgc2l6aW5nIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGNvbXBpbGVyIHZlcmlmaWNhdGlvbiwgcnVudGltZSBleGVjdXRpb24gdGVzdHMsIG9yIEtBU0FOLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOTozNC43NDgyODY1MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYxNDI4OTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9hcmNoX3RleHRfcG9rZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciAoYXJjaC9wb3dlcnBjL25ldC9icGZfaml0KikgYW5kIGNvcnJlc3BvbmRpbmcgQlBGIHNlbGZ0ZXN0cy4gVGhlIGNoYW5nZXMgYWRkcmVzcyBtdWx0aS1wYXNzIGNvZGUgZ2VuZXJhdGlvbiBjb252ZXJnZW5jZSwgYWxpZ25tZW50IG9mIGZlbnRyeSBzdHVicy9kdW1teSB0cmFtcG9saW5lIGFkZHJlc3MsIGJyYW5jaCByYW5nZSBjaGVja3MsIGFuZCA2NC1iaXQgcmVnaXN0ZXIgY29tcGFyaXNvbnMgZm9yIHRhaWwgY2FsbHMuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8ga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBKSVQgY29kZSBnZW5lcmF0aW9uIG9yIGJ1ZmZlciBzaXppbmcgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgY29tcGlsZXIgdmVyaWZpY2F0aW9uLCBydW50aW1lIGV4ZWN1dGlvbiB0ZXN0cywgb3IgS0FTQU4sIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRyYWNraW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDk6MzQuNzQ4MjkxMDQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU0NDE3NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowOTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXFxuaW5kZXggZjMyZGU4NzA0ZDRkOS4uNGRhOGJkZTkyZTFlZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXFxuQEAgLTE0LDYgKzE0LDEzIEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHBjLW9wY29kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcXHUwMDNlXFxuIFxcbisvKlxcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcXG4rICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuXFxuKyAqL1xcbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXFxuKyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDNcXG4rXFxuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxcbiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkVcXHQyNFxcbiAjZWxzZVxcbkBAIC0xODgsNiArMTk1LDEyIEBAIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xcbiBcXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXFx0KGN0eC1cXHUwMDNlYjJwW3JdKVxcbiBcXG4rI2lmZGVmIENPTkZJR19QUEM2NFxcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgUFBDX1JBV19DTVBMTEkoYSwgaSkgICAgUFBDX1JBV19DTVBMV0koYSwgaSlcXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX1BQQzMyXFxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlxcdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cXHUwMDNlIDEyIGJ5dGVzICovXFxuICNlbHNlXFxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXFxuIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0ICAgICAgIHUzMiAqYWRkcnMsIGludCBwYXNzLCBib29sIGV4dHJhX3Bhc3MpO1xcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcXG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxvbmcgZXhpdF9hZGRyKTtcXG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcXG4gdm9pZCBzdG9yZV9mdW5jX21ldGEodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZik7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggN2IwN2I0MzU3NWYxMS4uYzI3MTdmMGQ5Y2RkNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC00OSwxMSArNDksMzUgQEAgYXNtIChcXG4gXFxcIlxcdC5wb3BzZWN0aW9uXFx0XFx0XFx0XFx0O1xcXCJcXG4gKTtcXG4gXFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIHtcXG4gXFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XFxuK1xcdGludCBzdHViX3N6O1xcbiBcXG4gXFx0LypcXG4rXFx0ICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLlxcbitcXHQgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLlxcbitcXHQgKiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsIHRvIG1ha2VcXG4rXFx0ICogb29sX3N0dWJfaWR4IFxcdTAwMjYgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWwgYWxpZ25tZW50IGRlcGVuZHNcXG4rXFx0ICogb24gc3RhcnQgb2YgZmltYWdlIGFuZCB0aGUgc3R1YidzIGluc3RydWN0aW9uIGNvdW50LiBUaGVcXG4rXFx0ICogc3R1YnMgYmxvY2sgaGFzIDExIGluc3RydWN0aW9ucyAod2l0aCBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSlcXG4rXFx0ICogb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KSBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhXFxuK1xcdCAqIE5PUCBpZiB0aGUgYWRkcmVzcyBvZiBkdW1teV90cmFtcF9hZGRyIGlzIG5vbiBhbGlnbmVkLlxcbitcXHQgKlxcbitcXHQgKiBJbiBwYXNzPTAgd2hlbiBpbWFnZT09TlVMTCwgY29uc2VydmF0aXZlbHkgYWNjb3VudCBmb3Igc3BhY2VcXG4rXFx0ICogcmVxdWlyZWQgdG8gYWNjb21tb2RhdGUgYWxpZ25tZW50IE5PUC4gSW4gY2FzZSBmaW5hbCBwYXNzIHNraXBzXFxuK1xcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxcbitcXHQgKiBqaXRlZF9sZW4gc2lnbmlmaWVzIGNvcnJlY3QgcHJvZ3JhbSBzaXplLlxcbitcXHQgKi9cXG4rXFxuK1xcdHN0dWJfc3ogPSBJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSA/IDQ0IDogNDA7XFxuK1xcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICsgY3R4LVxcdTAwM2VpZHgqNCArIHN0dWJfc3osIFNaTCkpXFxuK1xcdFxcdEVNSVQoUFBDX1JBV19OT1AoKSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKlxcdG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkclxcbiBcXHQgKiBPdXQtb2YtbGluZSBzdHViOlxcbiBcXHQgKlxcdG1mbHJcXHRyMFxcbiBcXHQgKlxcdFtifGJsXVxcdHRyYW1wXFxuQEAgLTcwLDQ0ICs5NCw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIExvbmcgYnJhbmNoIHN0dWI6XFxuLVxcdCAqXFx0LmxvbmdcXHRcXHUwMDNjZHVtbXlfdHJhbXBfYWRkclxcdTAwM2VcXG4gXFx0ICpcXHRtZmxyXFx0cjExXFxuIFxcdCAqXFx0YmNsXFx0MjAsMzEsJCs0XFxuLVxcdCAqXFx0bWZsclxcdHIxMlxcbi1cXHQgKlxcdGxkXFx0cjEyLCAtOC1TWkwocjEyKVxcbitcXHQgKlxcdG1mbHJcXHRyMTJcXHQvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC5cXG4rXFx0ICpcXHRsZFxcdHIxMiwgMjAocjEyKSAvLyBvZmZzZXQoZHVtbXlfdHJhbXBfYWRkcikgZnJvbSBwcmV2IGluc3QuIGlzIDIwXFxuIFxcdCAqXFx0bXRjdHJcXHRyMTJcXG4tXFx0ICpcXHRtdGxyXFx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxcbitcXHQgKlxcdG10bHJcXHRyMTFcXHQvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcXG4gXFx0ICpcXHRiY3RyXFxuK1xcdCAqXFx0LmxvbmdcXHRcXHUwMDNjZHVtbXlfdHJhbXBfYWRkclxcdTAwM2UgIC8vIFNaTCBieXRlcyBhbGlnbmVkXFxuIFxcdCAqL1xcbi1cXHRpZiAoaW1hZ2UpXFxuLVxcdFxcdCooKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2aW1hZ2VbY3R4LVxcdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xcbi1cXHRjdHgtXFx1MDAzZWlkeCArPSBTWkwgLyA0O1xcbiBcXHRsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC1cXHUwMDNlaWR4O1xcbiBcXHRFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19CQ0w0KCkpO1xcbiBcXHRFTUlUKFBQQ19SQVdfTUZMUihfUjEyKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTtcXG4rXFx0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19NVENUUihfUjEyKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTtcXG4gXFx0RU1JVChQUENfUkFXX0JDVFIoKSk7XFxuIFxcbitcXHRpZiAoaW1hZ2UpXFxuK1xcdFxcdCooKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2aW1hZ2VbY3R4LVxcdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VpZHggKz0gU1pMIC8gNDtcXG4rXFxuIFxcdGlmICghYnBmX2ppdF9vb2xfc3R1Yikge1xcbiBcXHRcXHRicGZfaml0X29vbF9zdHViID0gKGN0eC1cXHUwMDNlaWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7XFxuIFxcdFxcdGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtXFx1MDAzZWlkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7XFxuIFxcdH1cXG4gfVxcbiBcXG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXFxuK2ludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcXG4ge1xcbi1cXHRpZiAoIWV4aXRfYWRkciB8fCBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChjdHgtXFx1MDAzZWlkeCAqIDQpKSkge1xcbitcXHRpZiAoZXhpdF9hZGRyIFxcdTAwMjZcXHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGxvbmcpKGN0eC1cXHUwMDNlaWR4ICogNCkpKSB7XFxuIFxcdFxcdFBQQ19KTVAoZXhpdF9hZGRyKTtcXG4tXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LVxcdTAwM2VhbHRfZXhpdF9hZGRyIC0gKGN0eC1cXHUwMDNlaWR4ICogNCkpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkciBcXHUwMDI2XFx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKFxcbitcXHRcXHRcXHQobG9uZykoY3R4LVxcdTAwM2VhbHRfZXhpdF9hZGRyKSAtIChsb25nKShjdHgtXFx1MDAzZWlkeCAqIDQpKSkge1xcbiBcXHRcXHRQUENfSk1QKGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkcik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkciA9IGN0eC1cXHUwMDNlaWR4ICogNDtcXG4tXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgY3R4KTtcXG4rXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgZmltYWdlLCBjdHgpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjc0LDYgKzMwMCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdCAqL1xcbiBcXHRpZiAoY2djdHguc2VlbiBcXHUwMDI2IFNFRU5fVEFJTENBTEwgfHwgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY2djdHguaWR4ICogNCkpIHtcXG4gXFx0XFx0Y2djdHguaWR4ID0gMDtcXG4rXFx0XFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XFxuIFxcdFxcdGlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsIFxcdTAwMjZjZ2N0eCwgYWRkcnMsIDAsIGZhbHNlKSlcXG4gXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuQEAgLTI4Niw3ICszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHQgKi9cXG4gXFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCBcXHUwMDI2Y2djdHgpO1xcbiBcXHRhZGRyc1tmcC1cXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XFxuLVxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgXFx1MDAyNmNnY3R4KTtcXG4rXFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBOVUxMLCBcXHUwMDI2Y2djdHgpO1xcbiBcXG4gXFx0Zml4dXBfbGVuID0gZnAtXFx1MDAzZWF1eC1cXHUwMDNlbnVtX2V4ZW50cmllcyAqIEJQRl9GSVhVUF9MRU4gKiA0O1xcbiBcXHRleHRhYmxlX2xlbiA9IGZwLVxcdTAwM2VhdXgtXFx1MDAzZW51bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7XFxuQEAgLTMwNiwxMCArMzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdGNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcXG4gXFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XFxuIFxcbi1cXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xcbi1cXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2MgMzsgcGFzcysrKSB7XFxuK1xcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yKywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqL1xcbitcXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcysrKSB7XFxuK1xcdFxcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xcbitcXG4gXFx0XFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFxcdTAwMjYgZXBpbG9ndWUgZm9yIHJlYWwuICovXFxuIFxcdFxcdGNnY3R4LmlkeCA9IDA7XFxuK1xcdFxcdGNnY3R4LmV4ZW50cnlfaWR4ID0gMDtcXG4gXFx0XFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XFxuIFxcdFxcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoY29kZV9iYXNlLCBcXHUwMDI2Y2djdHgpO1xcbiBcXHRcXHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFxcdTAwMjZjZ2N0eCwgYWRkcnMsIHBhc3MsXFxuQEAgLTMxOCwxMSArMzQ4LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdFxcdFxcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xcbiBcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdFxcdH1cXG4tXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIFxcdTAwMjZjZ2N0eCk7XFxuK1xcdFxcdGFkZHJzW2ZwLVxcdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcXG4rXFx0XFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFxcdTAwMjZjZ2N0eCk7XFxuK1xcbitcXHRcXHRwcm9nbGVuID0gY2djdHguaWR4ICogNDtcXG4gXFxuIFxcdFxcdGlmIChicGZfaml0X2VuYWJsZSBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlBhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcXFxuXFxcIiwgcGFzcyxcXG4tXFx0XFx0XFx0XFx0cHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7XFxuK1xcdFxcdFxcdFxcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xcbitcXG4rXFx0XFx0LyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi9cXG4rXFx0XFx0aWYgKHBhc3MgXFx1MDAzZT0gQ09ERUdFTl9NSU5fUEFTU0VTIFxcdTAwMjZcXHUwMDI2IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcXHUwMDI2XFx1MDAyNiBwcm9nbGVuICE9IHByZXZfcHJvZ2xlbikge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIkJQRiBKSVQ6IFByb2dyYW0gZGlkIG5vdCBjb252ZXJnZSBhZnRlciAlZCBwYXNzZXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdENPREVHRU5fTUFYX1BBU1NFUyk7XFxuK1xcdFxcdFxcdGJwZl9hcmNoX3RleHRfY29weShcXHUwMDI2Zmhkci1cXHUwMDNlc2l6ZSwgXFx1MDAyNmhkci1cXHUwMDNlc2l6ZSwgc2l6ZW9mKGhkci1cXHUwMDNlc2l6ZSkpO1xcbitcXHRcXHRcXHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChicGZfaml0X2VuYWJsZSBcXHUwMDNlIDEpXFxuQEAgLTM1Nyw3ICs0MDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHRcXHRcXHRcXHQodm9pZCAqKWZpbWFnZSArIEZVTkNUSU9OX0RFU0NSX1NJWkUpO1xcbiBcXG4gb3V0X2FkZHJzOlxcbi1cXHRcXHRpZiAoIWltYWdlIFxcdTAwMjZcXHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XFxuK1xcdFxcdGlmICghZnAtXFx1MDAzZWppdGVkIFxcdTAwMjZcXHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XFxuIFxcdFxcdFxcdGZwLVxcdTAwM2VhdXgtXFx1MDAzZXByaXZfc3RhY2tfcHRyID0gTlVMTDtcXG4gXFx0XFx0XFx0ZnJlZV9wZXJjcHUocHJpdl9zdGFja19wdHIpO1xcbiBcXHRcXHR9XFxuQEAgLTM5OSw3ICs0NDQsNyBAQCBpbnQgYnBmX2FkZF9leHRhYmxlX2VudHJ5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBpbnQgcGFzc1xcbiBcXHR1MzIgKmZpeHVwO1xcbiBcXG4gXFx0LyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqL1xcbi1cXHRpZiAocGFzcyAhPSAyKVxcbitcXHRpZiAocGFzcyBcXHUwMDNjIENPREVHRU5fTUlOX1BBU1NFUylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoIWZwLVxcdTAwM2VhdXgtXFx1MDAzZWV4dGFibGUgfHxcXG5AQCAtNzM5LDcgKzc4NCw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRlXFxuIFxcdFxcdCAqIFNldHRpbmcgdGhlIHRhaWxfY2FsbF9pbmZvIGluIHRyYW1wb2xpbmUncyBmcmFtZVxcbiBcXHRcXHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRcXHRFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0XFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcXG4gXFx0XFx0RU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7XFxuIFxcbkBAIC0xMjY1LDYgKzEzMTAsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxcbiAgKiBicGZfZnVuYzpcXG4gICpcXHRbbm9wfGJdXFx0b29sX3N0dWJcXG4gICogMi4gT3V0LW9mLWxpbmUgc3R1YjpcXG4rICpcXHRub3BcXHQvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudFxcbiAgKiBvb2xfc3R1YjpcXG4gICpcXHRtZmxyXFx0cjBcXG4gICpcXHRbYnxibF1cXHRcXHUwMDNjYnBmX3Byb2dcXHUwMDNlL1xcdTAwM2Nsb25nX2JyYW5jaF9zdHViXFx1MDAzZVxcbkBAIC0xMjcyLDE0ICsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXFxuICAqXFx0YlxcdGJwZl9mdW5jICsgNFxcbiAgKiAzLiBMb25nIGJyYW5jaCBzdHViOlxcbiAgKiBsb25nX2JyYW5jaF9zdHViOlxcbi0gKlxcdC5sb25nXFx0XFx1MDAzY2JyYW5jaF9hZGRyXFx1MDAzZS9cXHUwMDNjZHVtbXlfdHJhbXBcXHUwMDNlXFxuICAqXFx0bWZsclxcdHIxMVxcbiAgKlxcdGJjbFxcdDIwLDMxLCQrNFxcbiAgKlxcdG1mbHJcXHRyMTJcXG4tICpcXHRsZFxcdHIxMiwgLTE2KHIxMilcXG4rICpcXHRsZFxcdHIxMiwgMjAocjEyKVxcbiAgKlxcdG10Y3RyXFx0cjEyXFxuICAqXFx0bXRsclxcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcXG4gICpcXHRiY3RyXFxuKyAqXFx0LmxvbmdcXHRcXHUwMDNjYnJhbmNoX2FkZHJcXHUwMDNlL1xcdTAwM2NkdW1teV90cmFtcFxcdTAwM2VcXG4gICpcXG4gICogZHVtbXlfdHJhbXAgaXMgdXNlZCB0byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cy5cXG4gICpcXG5AQCAtMTM4MSwxMCArMTQyNywxMiBAQCBpbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcXG4gXFx0ICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOlxcbiBcXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXFxuIFxcdCAqIGhlcmUuIE90aGVyd2lzZSwgcmV2ZXJ0IHRvIGR1bW15X3RyYW1wLCBidXQgb25seSBpZiB3ZSBoYWQgcGF0Y2hlZCBvbGRfYWRkciBoZXJlLlxcbitcXHQgKlxcbitcXHQgKiBkdW1teV90cmFtcF9hZGRyIG1vdmVkIHRvIGJvdHRvbSBvZiBsb25nIGJyYW5jaCBzdHViLlxcbiBcXHQgKi9cXG4gXFx0aWYgKChuZXdfYWRkciBcXHUwMDI2XFx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgfHxcXG4gXFx0ICAgIChvbGRfYWRkciBcXHUwMDI2XFx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShvbGRfYWRkciAtIGlwKSkpXFxuLVxcdFxcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiAtIFNaTCksXFxuK1xcdFxcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi9cXG4gXFx0XFx0XFx0XFx0ICAobmV3X2FkZHIgXFx1MDAyNlxcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpID9cXG4gXFx0XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTtcXG4gXFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXFxuaW5kZXggYmZkYzUwNzQwZGE4ZS4uZjViOTQ0MWNmNDZhYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5AQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4XFxuIFxcbiB9XFxuIFxcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRFTUlUKFBQQ19SQVdfTVIoX1IzLCBicGZfdG9fcHBjKEJQRl9SRUdfMCkpKTtcXG4gXFxuQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbiBcXG4gXFx0RU1JVChQUENfUkFXX0JMUigpKTtcXG4gXFxuLVxcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xcbitcXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xcbiB9XFxuIFxcbiAvKiBSZWxhdGl2ZSBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiBmaW5hbCBpbWFnZSBsb2NhdGlvbiAqL1xcbkBAIC0xMTQ5LDcgKzExNDksOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxcbiBcXHRcXHRcXHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoaSAhPSBmbGVuIC0gMSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgsIF9SMCwgZXhpdF9hZGRyKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBkYWIxMDZjYWUyMmI1Li5lODAzMTIxNzFhYTc0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFx0XFx0ICovXFxuIFxcdFxcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcXG4tXFx0XFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdFxcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRcXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0LShCUEZfUFBDX1RBSUxDQUxMKSkpO1xcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcXG4gXFx0fVxcbiB9XFxuIFxcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xcbiBcXG5AQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xcbiBcXG4tXFx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XFxuK1xcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTY2Miw3ICs2NjIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfR0UsIG91dCk7XFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTtcXG4gXFxuIFxcdC8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqL1xcbkBAIC02NzIsNyArNjcyLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKVxcbiBcXHQgKiAgIGdvdG8gb3V0O1xcbiBcXHQgKi9cXG4tXFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XFxuIFxcbiBcXHQvKlxcbkBAIC03MDcsNyArNzA3LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogdGFpbF9jYWxsX2luZm8uXFxuIFxcdCAqL1xcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcXG4gXFxuIFxcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXFxuQEAgLTE3MzcsNyArMTczNyw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXFxuIFxcdFxcdFxcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChpICE9IGZsZW4gLSAxKSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCAzNTU4ZmUxMGUyOGNmLi5iMjkxZDkzNGRkMWFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xcbkBAIC0xNzksOSArMTc5LDExIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXFxuIFxcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm8gPSB7fTtcXG4gXFx0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuIFxcdF9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjO1xcbitcXHRfX3UzMiB0cnVuY19sZW4gPSAwLCBkaXNhc21fbGVuO1xcbiBcXHRfX3UzMiAqZnVuY19sZW5zID0gTlVMTDtcXG4gXFx0RklMRSAqdGV4dF9vdXQgPSBOVUxMO1xcbiBcXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XFxuK1xcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XFxuIFxcdGludCBpLCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKCFsbHZtX2luaXRpYWxpemVkKSB7XFxuQEAgLTIyNSw5ICsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcXG4gXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBsYXN0IDggYnl0ZXMgY29udGFpbnMgZHVtbXlfdHJhbXBvbGluZSBhZGRyZXNzIGluIEpJVFxcbitcXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXFxuK1xcdCAqIHdoaWNoIGNhbid0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uXFxuK1xcdCAqL1xcbitcXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xcbitcXHRpZiAodHJpcGxlKSB7XFxuK1xcdFxcdGlmIChzdHJzdHIodHJpcGxlLCBcXFwicG93ZXJwYzY0XFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwYzY0XFxcIikpXFxuK1xcdFxcdFxcdHRydW5jX2xlbiA9IDg7XFxuK1xcdFxcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFxcXCJwb3dlcnBjXFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwY1xcXCIpKVxcbitcXHRcXHRcXHR0cnVuY19sZW4gPSA0O1xcbitcXHRcXHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChwYyA9IDAsIGkgPSAwOyBpIFxcdTAwM2Mgaml0ZWRfZnVuY3M7ICsraSkge1xcbiBcXHRcXHRmcHJpbnRmKHRleHRfb3V0LCBcXFwiZnVuYyAjJWQ6XFxcXG5cXFwiLCBpKTtcXG4tXFx0XFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBmdW5jX2xlbnNbaV0pO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcXHUwMDNlIHRydW5jX2xlbiA/XFxuK1xcdFxcdFxcdFxcdFxcdGZ1bmNfbGVuc1tpXSAtIHRydW5jX2xlbiA6IDA7XFxuK1xcdFxcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZGlzYXNtX2xlbik7XFxuK1xcbiBcXHRcXHRmcHJpbnRmKHRleHRfb3V0LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0cGMgKz0gZnVuY19sZW5zW2ldO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5pbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5AQCAtMTU5LDYgKzE1OSw3IEBAXFxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcXHRcXHRfX2FyY2goXFxcIlJJU0NWNjRcXFwiKVxcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFxcdFxcdF9fYXJjaChcXFwiczM5MHhcXFwiKVxcbiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2hcXHRfX2FyY2goXFxcIkxPT05HQVJDSFxcXCIpXFxuKyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFxcdF9fYXJjaChcXFwiUE9XRVJQQzY0XFxcIilcXG4gI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpXFx0X190ZXN0X3RhZyhcXFwidGVzdF9jYXBzX3VucHJpdj1cXFwiIEVYUEFORF9RVU9URShjYXBzKSlcXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVxcdF9fdGVzdF90YWcoXFxcImxvYWRfbW9kZT1qaXRlZFxcXCIpXFxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcXHRfX3Rlc3RfdGFnKFxcXCJsb2FkX21vZGU9bm9faml0ZWRcXFwiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcXG5pbmRleCA0OGZhMzRkMjk1OWY0Li45ODgwY2U0ZjE5MzFhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xcbkBAIC05MSw2ICs5MSw4NCBAQCBfX2ppdGVkKFxcXCJcXHRwb3BxXFx0JXJheFxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGptcFxcdHt7Lip9fVxcXCIpXFx0XFx0LyoganVtcCB0byB0YWlsIGNhbGwgdGd0ICAgKi9cXG4gX19qaXRlZChcXFwiTDA6XFx0bGVhdmVcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHR7eyhyZXRxfGptcFxcdDB4KX19XFxcIilcXHRcXHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXFxuK19fYXJjaF9wb3dlcnBjNjRcXG4rLyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXFxuK19faml0ZWQoXFxcIlxcdG5vcFxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cXG4rX19qaXRlZChcXFwiXFx0bGkgOSwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCA5LCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1mbHIgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCAwLCAxNigxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZHUgMSwge3suKn19KDEpXFxcIilcXG4rLypcXG4rICogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlclxcbisgKlxcbisgKiBBZGRyZXNzIG1hdGVyaWFsaXphdGlvbiBkaWZmZXJzIGJldHdlZW4gUENSRUwgYW5kIG5vbi1QQ1JFTCBrZXJuZWxzLlxcbisgKiBTa2lwIHRoZSBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2UgYW5kIHZlcmlmeSBvbmx5IHRoYXQgdGhlIGNhbGxcXG4rICogdGFyZ2V0IGlzIGxvYWRlZCBpbnRvIENUUiBiZWZvcmUgYnJhbmNoaW5nLlxcbisgKi9cXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bXRjdHIge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmN0cmxcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDgsIDNcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsaSA4LCAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkaSAxLCAxLCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAwLCAxNigxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG10bHIgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1yXFx0MywgOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJsclxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcImZ1bmMgIzFcXFwiKVxcbisvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqL1xcbitfX2ppdGVkKFxcXCJcXHRub3BcXFwiKVxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXFxuKy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwgMCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIC04KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YnRcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgOSwgMTAsIC04XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDksIC04KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGlzIHt7Lip9fSwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c2xkaSB7ey4qfX0sIHt7Lip9fSwgMzJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmkge3suKn19LCB7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxpIHt7Lip9fSwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGx3eiA5LCB7ey4qfX0oe3suKn19KVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHNsd2kge3suKn19LCB7ey4qfX0sIDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsd1xcdHt7Lip9fSwgOVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJmXFx0MCwge3suKn19XFxcIilcXG4rLyogYnBmX3RhaWxfY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCA5LCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmZcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIDAoOSlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQ5LCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDksIDksIDFcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtdWxsaSAxMCwge3suKn19LCA4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkIDEwLCAxMCwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGQgMTAsIHt7Lip9fSgxMClcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQxMCwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwge3suKn19KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgMTAsIDEwLCB7ey4qfX1cXFwiKSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xcbitfX2ppdGVkKFxcXCJcXHRtdGN0ciAxMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDEwLCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDEwLCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDEwLCAxLCAtOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCA5LCAwKDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJjdHJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDMsIDhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRibHJcXFwiKVxcbitcXG4gU0VDKFxcXCJ0Y1xcXCIpXFxuIF9fbmFrZWQgaW50IG1haW4odm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuaW5kZXggM2NlMzJkMTM0ZTJjYy4uMDFiMTQyMDA5N2QyNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuQEAgLTM3OCw2ICszNzgsNyBAQCBlbnVtIGFyY2gge1xcbiBcXHRBUkNIX1JJU0NWNjRcXHQ9IDB4OCxcXG4gXFx0QVJDSF9TMzkwWFxcdD0gMHgxMCxcXG4gXFx0QVJDSF9MT09OR0FSQ0hcXHQ9IDB4MjAsXFxuK1xcdEFSQ0hfUE9XRVJQQzY0XFx0PSAweDQwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXFxuQEAgLTM5Miw2ICszOTMsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcXG4gXFx0cmV0dXJuIEFSQ0hfUzM5MFg7XFxuICNlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXylcXG4gXFx0cmV0dXJuIEFSQ0hfTE9PTkdBUkNIO1xcbisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pXFxuK1xcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcXG4gI2VuZGlmXFxuIFxcdHJldHVybiBBUkNIX1VOS05PV047XFxuIH1cXG5AQCAtNTg1LDYgKzU4OCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9TMzkwWDtcXG4gXFx0XFx0XFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcXFwiTE9PTkdBUkNIXFxcIikgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9MT09OR0FSQ0g7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlBPV0VSUEM2NFxcXCIpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfUE9XRVJQQzY0O1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRQUklOVF9GQUlMKFxcXCJiYWQgYXJjaCBzcGVjOiAnJXMnXFxcXG5cXFwiLCB2YWwpO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOTozNi4yMDM2NjI5MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjczNzc5NTU4ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2M2NzM2ZTk3NGJmMzMyNjY0ZmQwMjhkNGMxNjk0OTIwNjJiYTQ2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjA5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuaW5kZXggZjMyZGU4NzA0ZDRkOS4uNGRhOGJkZTkyZTFlZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuQEAgLTE0LDYgKzE0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BwYy1vcGNvZGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gXG4rLypcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcbisgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy5cbisgKi9cbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXG4rI2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgM1xuK1xuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxuICNkZWZpbmUgRlVOQ1RJT05fREVTQ1JfU0laRVx0MjRcbiAjZWxzZVxuQEAgLTE4OCw2ICsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7XG4gXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXHQoY3R4LVx1MDAzZWIycFtyXSlcbiBcbisjaWZkZWYgQ09ORklHX1BQQzY0XG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKVxuKyNlbHNlXG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfUFBDMzJcbiAjZGVmaW5lIEJQRl9GSVhVUF9MRU5cdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cdTAwM2UgMTIgYnl0ZXMgKi9cbiAjZWxzZVxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXG4gaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICAgdTMyICphZGRycywgaW50IHBhc3MsIGJvb2wgZXh0cmFfcGFzcyk7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuIHZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7XG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGV4aXRfYWRkcik7XG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcbiBcdFx0XHRcdFx0XHRcdFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcbiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggN2IwN2I0MzU3NWYxMS4uYzI3MTdmMGQ5Y2RkNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC00OSwxMSArNDksMzUgQEAgYXNtIChcbiBcIlx0LnBvcHNlY3Rpb25cdFx0XHRcdDtcIlxuICk7XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4rdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGludCBvb2xfc3R1Yl9pZHgsIGxvbmdfYnJhbmNoX3N0dWJfaWR4O1xuK1x0aW50IHN0dWJfc3o7XG4gXG4gXHQvKlxuK1x0ICogVGhlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaXMgcGxhY2VkIGF0IGJvdHRvbSBvZiBMb25nIGJyYW5jaCBzdHViLlxuK1x0ICogQWxpZ24gdGhlIG1pcy1hbGlnbmVkIGR1bW15X3RyYW1wX2FkZHIgZmllbGQgaW4gdGhlIGZpbWFnZS5cbitcdCAqIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YiwgdG8gbWFrZVxuK1x0ICogb29sX3N0dWJfaWR4IFx1MDAyNiBsb25nX2JyYW5jaF9zdHViX2lkeCBjb25zdGFudCBmcm9tIGVuZC5cbitcdCAqXG4rXHQgKiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsIGFsaWdubWVudCBkZXBlbmRzXG4rXHQgKiBvbiBzdGFydCBvZiBmaW1hZ2UgYW5kIHRoZSBzdHViJ3MgaW5zdHJ1Y3Rpb24gY291bnQuIFRoZVxuK1x0ICogc3R1YnMgYmxvY2sgaGFzIDExIGluc3RydWN0aW9ucyAod2l0aCBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSlcbitcdCAqIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dCkgYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYVxuK1x0ICogTk9QIGlmIHRoZSBhZGRyZXNzIG9mIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuXG4rXHQgKlxuK1x0ICogSW4gcGFzcz0wIHdoZW4gaW1hZ2U9PU5VTEwsIGNvbnNlcnZhdGl2ZWx5IGFjY291bnQgZm9yIHNwYWNlXG4rXHQgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHNcbitcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxuK1x0ICogaml0ZWRfbGVuIHNpZ25pZmllcyBjb3JyZWN0IHByb2dyYW0gc2l6ZS5cbitcdCAqL1xuK1xuK1x0c3R1Yl9zeiA9IElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpID8gNDQgOiA0MDtcbitcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICsgY3R4LVx1MDAzZWlkeCo0ICsgc3R1Yl9zeiwgU1pMKSlcbitcdFx0RU1JVChQUENfUkFXX05PUCgpKTtcbitcbitcdC8qXG4rXHQgKlx0bm9wICAgICAvLyBvcHRpb25hbCwgZm9yIGFsaWdubWVudCBvZiBkdW1teV90cmFtcF9hZGRyXG4gXHQgKiBPdXQtb2YtbGluZSBzdHViOlxuIFx0ICpcdG1mbHJcdHIwXG4gXHQgKlx0W2J8YmxdXHR0cmFtcFxuQEAgLTcwLDQ0ICs5NCw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdC8qXG4gXHQgKiBMb25nIGJyYW5jaCBzdHViOlxuLVx0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlXG4gXHQgKlx0bWZsclx0cjExXG4gXHQgKlx0YmNsXHQyMCwzMSwkKzRcbi1cdCAqXHRtZmxyXHRyMTJcbi1cdCAqXHRsZFx0cjEyLCAtOC1TWkwocjEyKVxuK1x0ICpcdG1mbHJcdHIxMlx0Ly8gbHIvcjEyIHN0b3JlcyBwYyBvZiBjdXJyZW50KHRoaXMpIGluc3QuXG4rXHQgKlx0bGRcdHIxMiwgMjAocjEyKSAvLyBvZmZzZXQoZHVtbXlfdHJhbXBfYWRkcikgZnJvbSBwcmV2IGluc3QuIGlzIDIwXG4gXHQgKlx0bXRjdHJcdHIxMlxuLVx0ICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbitcdCAqXHRtdGxyXHRyMTFcdC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuIFx0ICpcdGJjdHJcbitcdCAqXHQubG9uZ1x0XHUwMDNjZHVtbXlfdHJhbXBfYWRkclx1MDAzZSAgLy8gU1pMIGJ5dGVzIGFsaWduZWRcbiBcdCAqL1xuLVx0aWYgKGltYWdlKVxuLVx0XHQqKCh1bnNpZ25lZCBsb25nICopXHUwMDI2aW1hZ2VbY3R4LVx1MDAzZWlkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7XG4tXHRjdHgtXHUwMDNlaWR4ICs9IFNaTCAvIDQ7XG4gXHRsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC1cdTAwM2VpZHg7XG4gXHRFTUlUKFBQQ19SQVdfTUZMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNMNCgpKTtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTIpKTtcbi1cdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAtOC1TWkwpKTtcbitcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAyMCkpO1xuIFx0RU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTtcbiBcdEVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ1RSKCkpO1xuIFxuK1x0aWYgKGltYWdlKVxuK1x0XHQqKCh1bnNpZ25lZCBsb25nICopXHUwMDI2aW1hZ2VbY3R4LVx1MDAzZWlkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7XG4rXG4rXHRjdHgtXHUwMDNlaWR4ICs9IFNaTCAvIDQ7XG4rXG4gXHRpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHtcbiBcdFx0YnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7XG4gXHRcdGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gbG9uZ19icmFuY2hfc3R1Yl9pZHgpICogNDtcbiBcdH1cbiB9XG4gXG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbitcdFx0XHRcdFx0XHRcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbiB7XG4tXHRpZiAoIWV4aXRfYWRkciB8fCBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4rXHRpZiAoZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4gXHRcdFBQQ19KTVAoZXhpdF9hZGRyKTtcbi1cdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIHtcbi1cdFx0aWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgLSAoY3R4LVx1MDAzZWlkeCAqIDQpKSkpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0fSBlbHNlIGlmIChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkciBcdTAwMjZcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShcbitcdFx0XHQobG9uZykoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIC0gKGxvbmcpKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiBcdFx0UFBDX0pNUChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcik7XG4gXHR9IGVsc2Uge1xuIFx0XHRjdHgtXHUwMDNlYWx0X2V4aXRfYWRkciA9IGN0eC1cdTAwM2VpZHggKiA0O1xuLVx0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuK1x0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNzQsNiArMzAwLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdCAqL1xuIFx0aWYgKGNnY3R4LnNlZW4gXHUwMDI2IFNFRU5fVEFJTENBTEwgfHwgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY2djdHguaWR4ICogNCkpIHtcbiBcdFx0Y2djdHguaWR4ID0gMDtcbitcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG4gXHRcdGlmIChicGZfaml0X2J1aWxkX2JvZHkoZnAsIE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4LCBhZGRycywgMCwgZmFsc2UpKVxuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbkBAIC0yODYsNyArMzEzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdCAqL1xuIFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCBcdTAwMjZjZ2N0eCk7XG4gXHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbi1cdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBOVUxMLCBcdTAwMjZjZ2N0eCk7XG4gXG4gXHRmaXh1cF9sZW4gPSBmcC1cdTAwM2VhdXgtXHUwMDNlbnVtX2V4ZW50cmllcyAqIEJQRl9GSVhVUF9MRU4gKiA0O1xuIFx0ZXh0YWJsZV9sZW4gPSBmcC1cdTAwM2VhdXgtXHUwMDNlbnVtX2V4ZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTtcbkBAIC0zMDYsMTAgKzMzMywxMyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0Y29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSArIEZVTkNUSU9OX0RFU0NSX1NJWkUpO1xuIFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4tXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xuLVx0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2MgMzsgcGFzcysrKSB7XG4rXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMissIGxvb3AgdW50aWwgcHJvZ3JhbSBzaXplIGNvbnZlcmdlcy4gKi9cbitcdGZvciAocGFzcyA9IDE7IHBhc3MgXHUwMDNjPSBDT0RFR0VOX01BWF9QQVNTRVM7IHBhc3MrKykge1xuK1x0XHR1MzIgcHJldl9wcm9nbGVuID0gcHJvZ2xlbjtcbitcbiBcdFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFx1MDAyNiBlcGlsb2d1ZSBmb3IgcmVhbC4gKi9cbiBcdFx0Y2djdHguaWR4ID0gMDtcbitcdFx0Y2djdHguZXhlbnRyeV9pZHggPSAwO1xuIFx0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCwgYWRkcnMsIHBhc3MsXG5AQCAtMzE4LDExICszNDgsMjYgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbi1cdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbitcdFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4rXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4rXG4rXHRcdHByb2dsZW4gPSBjZ2N0eC5pZHggKiA0O1xuIFxuIFx0XHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG4gXHRcdFx0cHJfaW5mbyhcIlBhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwiLCBwYXNzLFxuLVx0XHRcdFx0cHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7XG4rXHRcdFx0XHRwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTtcbitcbitcdFx0LyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi9cbitcdFx0aWYgKHBhc3MgXHUwMDNlPSBDT0RFR0VOX01JTl9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAocGFzcyA9PSBDT0RFR0VOX01BWF9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7XG4rXHRcdFx0cHJfZXJyKFwiQlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xcblwiLFxuK1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuK1x0XHRcdGJwZl9hcmNoX3RleHRfY29weShcdTAwMjZmaGRyLVx1MDAzZXNpemUsIFx1MDAyNmhkci1cdTAwM2VzaXplLCBzaXplb2YoaGRyLVx1MDAzZXNpemUpKTtcbitcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbitcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbkBAIC0zNTcsNyArNDAyLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRcdCh2b2lkICopZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuK1x0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuIFx0XHRcdGZwLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3B0ciA9IE5VTEw7XG4gXHRcdFx0ZnJlZV9wZXJjcHUocHJpdl9zdGFja19wdHIpO1xuIFx0XHR9XG5AQCAtMzk5LDcgKzQ0NCw3IEBAIGludCBicGZfYWRkX2V4dGFibGVfZW50cnkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIGludCBwYXNzXG4gXHR1MzIgKmZpeHVwO1xuIFxuIFx0LyogUG9wdWxhdGUgZXh0YWJsZSBlbnRyaWVzIG9ubHkgaW4gdGhlIGxhc3QgcGFzcyAqL1xuLVx0aWYgKHBhc3MgIT0gMilcbitcdGlmIChwYXNzIFx1MDAzYyBDT0RFR0VOX01JTl9QQVNTRVMpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKCFmcC1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSB8fFxuQEAgLTczOSw3ICs3ODQsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZVxuIFx0XHQgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJ3MgZnJhbWVcbiBcdFx0ICogZGVwZW5kaW5nIG9uIGlmIHByZXZpb3VzIGZyYW1lIGhhZCB2YWx1ZSBvciByZWZlcmVuY2UuXG4gXHRcdCAqL1xuLVx0XHRFTUlUKFBQQ19SQVdfQ01QTFdJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdFx0RU1JVChQUENfUkFXX0NNUExMSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKF9SMywgX1I0LCAtQlBGX1BQQ19UQUlMQ0FMTCkpO1xuIFxuQEAgLTEyNjUsNiArMTMxMCw3IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICogYnBmX2Z1bmM6XG4gICpcdFtub3B8Yl1cdG9vbF9zdHViXG4gICogMi4gT3V0LW9mLWxpbmUgc3R1YjpcbisgKlx0bm9wXHQvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudFxuICAqIG9vbF9zdHViOlxuICAqXHRtZmxyXHRyMFxuICAqXHRbYnxibF1cdFx1MDAzY2JwZl9wcm9nXHUwMDNlL1x1MDAzY2xvbmdfYnJhbmNoX3N0dWJcdTAwM2VcbkBAIC0xMjcyLDE0ICsxMzE4LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICpcdGJcdGJwZl9mdW5jICsgNFxuICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6XG4gICogbG9uZ19icmFuY2hfc3R1Yjpcbi0gKlx0LmxvbmdcdFx1MDAzY2JyYW5jaF9hZGRyXHUwMDNlL1x1MDAzY2R1bW15X3RyYW1wXHUwMDNlXG4gICpcdG1mbHJcdHIxMVxuICAqXHRiY2xcdDIwLDMxLCQrNFxuICAqXHRtZmxyXHRyMTJcbi0gKlx0bGRcdHIxMiwgLTE2KHIxMilcbisgKlx0bGRcdHIxMiwgMjAocjEyKVxuICAqXHRtdGN0clx0cjEyXG4gICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiAgKlx0YmN0clxuKyAqXHQubG9uZ1x0XHUwMDNjYnJhbmNoX2FkZHJcdTAwM2UvXHUwMDNjZHVtbXlfdHJhbXBcdTAwM2VcbiAgKlxuICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuXG4gICpcbkBAIC0xMzgxLDEwICsxNDI3LDEyIEBAIGludCBicGZfYXJjaF90ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LFxuIFx0ICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOlxuIFx0ICogSWYgbmV3X2FkZHIgaXMgb3V0IG9mIHJhbmdlLCB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoZSBsb25nIGJyYW5jaCBzdHViLCBzbyBwYXRjaCBuZXdfYWRkclxuIFx0ICogaGVyZS4gT3RoZXJ3aXNlLCByZXZlcnQgdG8gZHVtbXlfdHJhbXAsIGJ1dCBvbmx5IGlmIHdlIGhhZCBwYXRjaGVkIG9sZF9hZGRyIGhlcmUuXG4rXHQgKlxuK1x0ICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi5cbiBcdCAqL1xuIFx0aWYgKChuZXdfYWRkciBcdTAwMjZcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8XG4gXHQgICAgKG9sZF9hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShvbGRfYWRkciAtIGlwKSkpXG4tXHRcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiAtIFNaTCksXG4rXHRcdHJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi9cbiBcdFx0XHRcdCAgKG5ld19hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgP1xuIFx0XHRcdFx0ICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTtcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG5pbmRleCBiZmRjNTA3NDBkYThlLi5mNWI5NDQxY2Y0NmFhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRFTUlUKFBQQ19SQVdfTVIoX1IzLCBicGZfdG9fcHBjKEJQRl9SRUdfMCkpKTtcbiBcbkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdEVNSVQoUFBDX1JBV19CTFIoKSk7XG4gXG4tXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTtcbitcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gfVxuIFxuIC8qIFJlbGF0aXZlIG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGZpbmFsIGltYWdlIGxvY2F0aW9uICovXG5AQCAtMTE0OSw3ICsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgX1IwLCBleGl0X2FkZHIpO1xuK1x0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLFxuK1x0XHRcdFx0XHRcdFx0XHRjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZGFiMTA2Y2FlMjJiNS4uZTgwMzEyMTcxYWE3NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXHRcdCAqL1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIDApKTtcbiBcdFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCAtKEJQRl9QUENfVEFJTENBTEwpKSk7XG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksXG4gXHRcdFx0XHRcdFx0XHRcdC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcdH1cbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuIFxuQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLypcbkBAIC02NjIsNyArNjYyLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdFBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTtcbiBcbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpO1xuIFxuIFx0LyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovXG5AQCAtNjcyLDcgKzY3Miw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvXG4gXHQgKiBpZiAodGFpbF9jYWxsX2luZm8gPT0gTUFYX1RBSUxfQ0FMTF9DTlQpXG4gXHQgKiAgIGdvdG8gb3V0O1xuIFx0ICovXG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0VRLCBvdXQpO1xuIFxuIFx0LypcbkBAIC03MDcsNyArNzA3LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIHRhaWxfY2FsbF9pbmZvLlxuIFx0ICovXG4gXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcbiBcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXG5AQCAtMTczNyw3ICsxNzM3LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XG4rXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCxcbitcdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IDM1NThmZTEwZTI4Y2YuLmIyOTFkOTM0ZGQxYWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuQEAgLTE3OSw5ICsxNzksMTEgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm8gPSB7fTtcbiBcdF9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuIFx0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7XG4rXHRfX3UzMiB0cnVuY19sZW4gPSAwLCBkaXNhc21fbGVuO1xuIFx0X191MzIgKmZ1bmNfbGVucyA9IE5VTEw7XG4gXHRGSUxFICp0ZXh0X291dCA9IE5VTEw7XG4gXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XG4rXHRjaGFyICp0cmlwbGUgPSBOVUxMO1xuIFx0aW50IGksIGVyciA9IDA7XG4gXG4gXHRpZiAoIWxsdm1faW5pdGlhbGl6ZWQpIHtcbkBAIC0yMjUsOSArMjI3LDMwIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcIikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUXG4rXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXG4rXHQgKiB3aGljaCBjYW4ndCBkaXNhc3NlbWJsZSB0byBhIHZhbGlkIGluc3RydWN0aW9uLlxuK1x0ICovXG4rXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xuK1x0aWYgKHRyaXBsZSkge1xuK1x0XHRpZiAoc3Ryc3RyKHRyaXBsZSwgXCJwb3dlcnBjNjRcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGM2NFwiKSlcbitcdFx0XHR0cnVuY19sZW4gPSA4O1xuK1x0XHRlbHNlIGlmIChzdHJzdHIodHJpcGxlLCBcInBvd2VycGNcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGNcIikpXG4rXHRcdFx0dHJ1bmNfbGVuID0gNDtcbitcdFx0TExWTURpc3Bvc2VNZXNzYWdlKHRyaXBsZSk7XG4rXHR9XG4rXG4gXHRmb3IgKHBjID0gMCwgaSA9IDA7IGkgXHUwMDNjIGppdGVkX2Z1bmNzOyArK2kpIHtcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJmdW5jICMlZDpcXG5cIiwgaSk7XG4tXHRcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZnVuY19sZW5zW2ldKTtcbitcbitcdFx0LypcbitcdFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xuK1x0XHQgKi9cbitcdFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcdTAwM2UgdHJ1bmNfbGVuID9cbitcdFx0XHRcdFx0ZnVuY19sZW5zW2ldIC0gdHJ1bmNfbGVuIDogMDtcbitcdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBkaXNhc21fbGVuKTtcbitcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJcXG5cIik7XG4gXHRcdHBjICs9IGZ1bmNfbGVuc1tpXTtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCBiMGM0NDEzODRmMjA2Li4zNjUwMDhkMWVkNDBjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU5LDYgKzE1OSw3IEBAXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFx0XHRfX2FyY2goXCJSSVNDVjY0XCIpXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwiczM5MHhcIilcbiAjZGVmaW5lIF9fYXJjaF9sb29uZ2FyY2hcdF9fYXJjaChcIkxPT05HQVJDSFwiKVxuKyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFx0X19hcmNoKFwiUE9XRVJQQzY0XCIpXG4gI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpXHRfX3Rlc3RfdGFnKFwidGVzdF9jYXBzX3VucHJpdj1cIiBFWFBBTkRfUVVPVEUoY2FwcykpXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVx0X190ZXN0X3RhZyhcImxvYWRfbW9kZT1qaXRlZFwiKVxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcdF9fdGVzdF90YWcoXCJsb2FkX21vZGU9bm9faml0ZWRcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbmluZGV4IDQ4ZmEzNGQyOTU5ZjQuLjk4ODBjZTRmMTkzMWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuQEAgLTkxLDYgKzkxLDg0IEBAIF9faml0ZWQoXCJcdHBvcHFcdCVyYXhcIilcbiBfX2ppdGVkKFwiXHRqbXBcdHt7Lip9fVwiKVx0XHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xuIF9faml0ZWQoXCJMMDpcdGxlYXZlXCIpXG4gX19qaXRlZChcIlx0e3socmV0cXxqbXBcdDB4KX19XCIpXHRcdC8qIHJldHVybiBvciBqdW1wIHRvIHJldGh1bmsgKi9cbitfX2FyY2hfcG93ZXJwYzY0XG4rLyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXG4rX19qaXRlZChcIlx0bm9wXCIpXG4rX19qaXRlZChcIi4uLlwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4rX19qaXRlZChcIlx0bGkgOSwgMFwiKVxuK19faml0ZWQoXCJcdHN0ZCA5LCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdG1mbHIgMFwiKVxuK19faml0ZWQoXCJcdHN0ZCAwLCAxNigxKVwiKVxuK19faml0ZWQoXCJcdHN0ZHUgMSwge3suKn19KDEpXCIpXG4rLypcbisgKiBsb2FkIGFkZHJlc3MgYW5kIGNhbGwgc3ViKCkgdmlhIGNvdW50IHJlZ2lzdGVyXG4rICpcbisgKiBBZGRyZXNzIG1hdGVyaWFsaXphdGlvbiBkaWZmZXJzIGJldHdlZW4gUENSRUwgYW5kIG5vbi1QQ1JFTCBrZXJuZWxzLlxuKyAqIFNraXAgdGhlIGFkZHJlc3MgZ2VuZXJhdGlvbiBzZXF1ZW5jZSBhbmQgdmVyaWZ5IG9ubHkgdGhhdCB0aGUgY2FsbFxuKyAqIHRhcmdldCBpcyBsb2FkZWQgaW50byBDVFIgYmVmb3JlIGJyYW5jaGluZy5cbisgKi9cbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtdGN0ciB7ey4qfX1cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0YmN0cmxcIilcbitfX2ppdGVkKFwiXHRtclx0OCwgM1wiKVxuK19faml0ZWQoXCJcdGxpIDgsIDBcIilcbitfX2ppdGVkKFwiXHRhZGRpIDEsIDEsIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDAsIDE2KDEpXCIpXG4rX19qaXRlZChcIlx0bXRsciAwXCIpXG4rX19qaXRlZChcIlx0bXJcdDMsIDhcIilcbitfX2ppdGVkKFwiXHRibHJcIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcImZ1bmMgIzFcIilcbisvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqL1xuK19faml0ZWQoXCJcdG5vcFwiKVxuK19faml0ZWQoXCIuLi5cIikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxkIDIsIDE2KDEzKSBhYnNlbnQgd2l0aCBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xuKy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xuK19faml0ZWQoXCJcdGxkIDEwLCAwKDEpXCIpXG4rX19qaXRlZChcIlx0bGQgOSwgLTgoMTApXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQ5LCAzM1wiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGFkZGkgOSwgMTAsIC04XCIpXG4rX19qaXRlZChcIlx0c3RkIDksIC04KDEpXCIpXG4rX19qaXRlZChcIlx0bGlzIHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0c2xkaSB7ey4qfX0sIHt7Lip9fSwgMzJcIilcbitfX2ppdGVkKFwiXHRvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRvcmkge3suKn19LCB7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxpIHt7Lip9fSwgMFwiKVxuK19faml0ZWQoXCJcdGx3eiA5LCB7ey4qfX0oe3suKn19KVwiKVxuK19faml0ZWQoXCJcdHNsd2kge3suKn19LCB7ey4qfX0sIDBcIilcbitfX2ppdGVkKFwiXHRjbXBsd1x0e3suKn19LCA5XCIpXG4rX19qaXRlZChcIlx0YmZcdDAsIHt7Lip9fVwiKVxuKy8qIGJwZl90YWlsX2NhbGwgaW1wbGVtZW50YXRpb24gKi9cbitfX2ppdGVkKFwiXHRsZCA5LCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0OSwgMzNcIilcbitfX2ppdGVkKFwiXHRiZlx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCA5LCAwKDkpXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQ5LCAzM1wiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGFkZGkgOSwgOSwgMVwiKVxuK19faml0ZWQoXCJcdG11bGxpIDEwLCB7ey4qfX0sIDhcIilcbitfX2ppdGVkKFwiXHRhZGQgMTAsIDEwLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCAxMCwge3suKn19KDEwKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0MTAsIDBcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCAxMCwge3suKn19KDEwKVwiKVxuK19faml0ZWQoXCJcdGFkZGkgMTAsIDEwLCB7ey4qfX1cIikgICAgLyogb2Zmc2V0IGRlcGVuZHMgb24gQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cbitfX2ppdGVkKFwiXHRtdGN0ciAxMFwiKVxuK19faml0ZWQoXCJcdGxkIDEwLCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0MTAsIDMzXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkaSAxMCwgMSwgLThcIilcbitfX2ppdGVkKFwiXHRzdGQgOSwgMCgxMClcIilcbitfX2ppdGVkKFwiXHRiY3RyXCIpXG4rX19qaXRlZChcIlx0bXJcdDMsIDhcIilcbitfX2ppdGVkKFwiXHRibHJcIilcbitcbiBTRUMoXCJ0Y1wiKVxuIF9fbmFrZWQgaW50IG1haW4odm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuaW5kZXggM2NlMzJkMTM0ZTJjYy4uMDFiMTQyMDA5N2QyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3OCw2ICszNzgsNyBAQCBlbnVtIGFyY2gge1xuIFx0QVJDSF9SSVNDVjY0XHQ9IDB4OCxcbiBcdEFSQ0hfUzM5MFhcdD0gMHgxMCxcbiBcdEFSQ0hfTE9PTkdBUkNIXHQ9IDB4MjAsXG4rXHRBUkNIX1BPV0VSUEM2NFx0PSAweDQwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG5AQCAtMzkyLDYgKzM5Myw4IEBAIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKVxuIFx0cmV0dXJuIEFSQ0hfUzM5MFg7XG4gI2VsaWYgZGVmaW5lZChfX2xvb25nYXJjaF9fKVxuIFx0cmV0dXJuIEFSQ0hfTE9PTkdBUkNIO1xuKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXylcbitcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcbiAjZW5kaWZcbiBcdHJldHVybiBBUkNIX1VOS05PV047XG4gfVxuQEAgLTU4NSw2ICs1ODgsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcbiBcdFx0XHRcdGFyY2ggPSBBUkNIX1MzOTBYO1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJMT09OR0FSQ0hcIikgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfTE9PTkdBUkNIO1xuK1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJQT1dFUlBDNjRcIikgPT0gMCkge1xuK1x0XHRcdFx0YXJjaCA9IEFSQ0hfUE9XRVJQQzY0O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRQUklOVF9GQUlMKFwiYmFkIGFyY2ggc3BlYzogJyVzJ1xcblwiLCB2YWwpO1xuIFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA5OjM2LjIwMzY3MjMwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MTM0MTMzMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG93ZXJQQyBCUEYgSklUIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gYXNwZWN0cy4gSSBzZWUgaXQncyB0b3VjaGluZyBgYnBmX2ppdC5oYCwgdGhlIGNvbXBpbGF0aW9uIGNvZGUgaXRzZWxmIChgYnBmX2ppdF9jb21wLmNgLCBgYnBmX2ppdF9jb21wMzIuY2AsIGBicGZfaml0X2NvbXA2NC5jYCksIGFuZCBzb21lIHNlbGYtdGVzdHMuIFRoYXQncyBhIGdvb2Qgc2lnbjsgd2UgbmVlZCB0byB2ZXJpZnkgYWxsIG9mIHRoZXNlIHBpZWNlcyB3b3JrIGNvcnJlY3RseSB3aXRoIGVhY2ggb3RoZXIgYW5kIHRoZSBhcmNoaXRlY3R1cmUncyBleGlzdGluZyBjb2RlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJcyB0aGVyZSBhIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnRyb2R1Y2VkPyBIYXMgYW4gZXhpc3Rpbmcgb3B0aW9uIGJlZW4gY2hhbmdlZCwgb3IgaXMgYW4gZXhpc3Rpbmcgb3B0aW9uIG5vdyByZXF1aXJlZD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyBvciBzaW1wbHkgcmVhZGluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHRvIHNlZSB3aGF0IG9wdGlvbnMgdGhpcyBpbXBhY3RzLiBBZnRlciB0aGF0LCBJJ2xsIGFuYWx5emUgdGhlIGNvZGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDoyNC4zMzc4MDg3MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NDEwOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODItXFx0c2VsZWN0IEFSQ0hfVVNFX1FVRVVFRF9SV0xPQ0tTXFx0XFx0aWYgUFBDX1FVRVVFRF9TUElOTE9DS1NcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxODM6XFx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xODQtXFx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX1RPUERPV05fTU1BUF9MQVlPVVRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI0Ni1cXHRzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXHRpZiBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWSB8fCBNUFJPRklMRV9LRVJORUwgfHwgUFBDMzJcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNDc6XFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnPTQ9Q09ORklHX0hJR0hfUkVTX1RJTUVSUz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWc6NTpDT05GSUdfQlBGX0pJVD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWctNi1DT05GSUdfVklSVF9DUFVfQUNDT1VOVElOR19OQVRJVkU9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9OTQ9Q09ORklHX0ROU19SRVNPTFZFUj15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc6OTU6Q09ORklHX0JQRl9KSVQ9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTk2LSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz03PUNPTkZJR19CUEZfU1lTQ0FMTD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjg6Q09ORklHX0JQRl9KSVQ9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy05LUNPTkZJR19CUEZfTFNNPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGUtNC0jXFxuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAubyBicGZfaml0X2NvbXAkKEJJVFMpLm9cXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTYtXFxuYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZT03PWlmZGVmIENPTkZJR19QUEM2NFxcbmFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3Bvd2VycGMvbmV0L01ha2VmaWxlLTktZW5kaWZcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTctICovXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg6ODojaWZuZGVmIF9CUEZfSklUX0hcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaDo5OiNkZWZpbmUgX0JQRl9KSVRfSFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTEwLVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg9MTY3PXN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmgtMTc5LVxcdHVuc2lnbmVkIGludCBzdGFja19zaXplO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjE4MDpcXHRpbnQgYjJwW01BWF9CUEZfSklUX1JFRyArIDNdO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTE4MS1cXHR1bnNpZ25lZCBpbnQgZXhlbnRyeV9pZHg7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMtNDItLyogQlBGIHJlZ2lzdGVyIHVzYWdlICovXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jOjQzOiNkZWZpbmUgVE1QX1JFR1xcdFxcdFxcdChNQVhfQlBGX0pJVF9SRUcgKyAwKVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYy00NC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy03MC0vKiBCUEYgcmVnaXN0ZXIgdXNhZ2UgKi9cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzE6I2RlZmluZSBUTVBfUkVHXzFcXHQoTUFYX0JQRl9KSVRfUkVHICsgMClcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzI6I2RlZmluZSBUTVBfUkVHXzJcXHQoTUFYX0JQRl9KSVRfUkVHICsgMSlcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6NzM6I2RlZmluZSBBUkVOQV9WTV9TVEFSVCAgKE1BWF9CUEZfSklUX1JFRyArIDIpXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDoyNS4xNDYyMjY5MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjAyNTk2OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdXp6LXdvcnRoeT9cIiBJdCdzIHRvdWNoaW5nIHRoZSBwb3dlcnBjIEJQRiBKSVQgY29tcGlsZXIg4oCTIHRoYXQncyBhIGtleSBhcmVhLiBBbnl0aGluZyB0aGF0IGFmZmVjdHMgY29yZSBhcmNoaXRlY3R1cmUgZXhlY3V0aW9uIGxvZ2ljLCBlc3BlY2lhbGx5IHdoZW4gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBpcyBpbnZvbHZlZCB2aWEgYGJwZigpYCBzeXN0ZW0gY2FsbHMsIEJQRiBwcm9ncmFtIGxvYWRpbmcsIHZlcmlmaWNhdGlvbiwgYW5kIEpJVCBjb21waWxhdGlvbiBvbiBQb3dlclBDIChhbmQgY2FuIGJlIHJ1biBpbiBRRU1VLCBldmVuIGJldHRlciEpLCByYWlzZXMgYSBmbGFnLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGludGVybmFscyBvZiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgc2VlIGNoYW5nZXMgdG8gbXVsdGlwbGUgZmlsZXM6IGBicGZfaml0LmhgLCBgYnBmX2ppdF9jb21wLmNgLCBhbmQgYGJwZl9qaXRfY29tcDY0LmNgLiBJJ20gc2VlaW5nIHVwZGF0ZXMgdG8gaG93IHRoZSBjb21waWxlciBoYW5kbGVzIHRoaW5ncyBsaWtlIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIHRhaWwgY2FsbHMgKHVzaW5nIGRpZmZlcmVudCBjb21wYXJlIGluc3RydWN0aW9ucyksIGZlbnRyeSBzdHVicywgYnJhbmNoIHJhbmdlcyBhbmQgdGhlIGV4aXQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXNuJ3QganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGlzIGlzIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbiB0byBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgSklUIGNvbXBpbGF0aW9uLiBUaGUgYWRkaXRpb24gb2Ygc2VsZnRlc3RzIGZvciB0YWlsIGNhbGwgSklUIHZlcmlmaWNhdGlvbiBpcyBhbm90aGVyIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIGlzIGEgY29tcGxleCBhcmVhIHRvIGNvbnNpZGVyLlxuXG5JJ20gdGhpbmtpbmcsIFwiV2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyB0byBsb29rIGF0IGZ1cnRoZXI/XCIgIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgQlBGIEpJVCBvbiBQb3dlclBDLiAgYGJwZl9hcmNoX3RleHRfcG9rZWAgaXMgYWxzbyBoZXJlLiBMZXQgbWUgY29tcGlsZSBhIGxpc3Qgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgYSBxdWljayB3YXkgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnM6XG5cbiogICBgYnBmX2ludF9qaXRfY29tcGlsZWBcbiogICBgYnBmX2FyY2hfdGV4dF9wb2tlYFxuKiAgIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2BcbiogICBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWBcbiogICBgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbmBcbiogICBgYnBmX2FkZF9leHRhYmxlX2VudHJ5YFxuXG5Ob3csIHRoZSBuZXh0IHRoaW5nIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHN0YXRpYy4gR290dGEgc2VlIGlmIGl0J3MgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozMC4zNDg4MjYyMjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5ODkyNTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTcyPXN0YXRpYyB2b2lkIHByaXZfc3RhY2tfY2hlY2tfZ3VhcmQodm9pZCBfX3BlcmNwdSAqcHJpdl9zdGFja19wdHIsIGludCBhbGxvY19zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xOTAtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxOTE6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnApXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xOTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozMC42Njg3MjQ1ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAyNDE1OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipLY29uZmlnIGFuZCBCUEYgSW50ZWdyYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIHJlcXVpcmVkIGZvciB0aGlzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBuZXR3b3JraW5nIGNvZGUgYW5kIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIFRoZSBiZXN0IHdheSB0byBzdGFydCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIGFuZCBLY29uZmlnIGZpbGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCBgYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZWAuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIEknbGwgYnJvYWRlbiB0aGUgc2NvcGUgdG8gaW5jbHVkZSB0aGUgZ2VuZXJhbCBCUEYgS2NvbmZpZyBzZXR1cCwgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjMzLjA3MTE0MzkyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3MjYxNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozMy4xNzk4NzU4MTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTIzMDA5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gbG9jYXRlIHRoZSBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9ucy4gVGhlc2UgYXJlIGNydWNpYWwsIG9idmlvdXNseSwgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZsYWdzIGFyZSBzZXQsIHdoZXJlIHRoZXkncmUgdXNlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZW0gaW4gdGhlIEtjb25maWcgZmlsZXMsIGxpa2VseSB1bmRlciB0aGUgbmV0d29ya2luZyBvciBwb3NzaWJseSBzZWN1cml0eSBzdWItdHJlZXMuIEZpbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIEJQRiBmZWF0dXJlcyBpbiB0aGUgdGFyZ2V0IGtlcm5lbC4gQWZ0ZXIgbG9jYXRpbmcgdGhlbSwgSSB3aWxsIGFzc2VzcyB3aGVyZSB0aGVzZSBmbGFncyBhcmUgbG9jYXRlZCBpbiB0aGUgYnVpbGQgdHJlZS4gVGhlIG1vcmUgY29udGV4dCBJIGhhdmUsIHRoZSBiZXR0ZXIgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzE4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6MzcuMzAyODg3NDI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE4OTE4MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDozOS43MjE4MTA5MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgyNzc1ODgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEJQRiBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRocm91Z2ggdGhhdCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHNlY3Rpb24sIHJvdWdobHkgYmV0d2VlbiBsaW5lcyAyNyBhbmQgNjAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIHN1YnN5c3RlbSBsaWtlIEJQRi4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgQlBGIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGFuZCB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6NDIuNTQ5NTcyNDc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2MzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDo0Mi41NDk2OTQ3ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNjY3NjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUG93ZXJQQyBOZXR3b3JrIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgcG93ZXJwYyBuZXR3b3JrIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGNyYWNrIG9wZW4gYGFyY2gvcG93ZXJwYy9uZXQvTWFrZWZpbGVgLlwiIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgbmV0d29yay1yZWxhdGVkIGRyaXZlcnMgYW5kIG1vZHVsZXMgZm9yIHRoZSBQb3dlclBDIGFyY2hpdGVjdHVyZSB3aWxsIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBHTlUgTWFrZSBjb25zdHJ1Y3RzOiBvYmplY3QgZmlsZSBsaXN0cywgc291cmNlIGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGFuZCB0YXJnZXRzLiBHaXZlbiB0aGUgUG93ZXJQQydzIGhpc3RvcnksIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBwbGF0Zm9ybS1zcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgcG9zc2libGUgbGVnYWN5IGNvZGUgY29uc3RydWN0cyB0aGF0IEknbGwgbmVlZCB0byBzaWZ0IHRocm91Z2guIFRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgb3ZlcnZpZXcgb2YgaG93IHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIGJlaW5nIGludGVncmF0ZWQgYXQgdGhlIGJvYXJkIGxldmVsLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMDo0NC41NjYzNzUyMTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL25ldC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQXJjaC1zcGVjaWZpYyBuZXR3b3JrIG1vZHVsZXNcXG4gICA0OlxcdCNcXG4gICA1OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAubyBicGZfaml0X2NvbXAkKEJJVFMpLm9cXG4gICA2OlxcdFxcbiAgIDc6XFx0aWZkZWYgQ09ORklHX1BQQzY0XFxuICAgODpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX3RpbWVkX21heV9nb3RvLm9cXG4gICA5OlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjQ0LjU2NjQ1OTE3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjg1NzkwNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIFBvd2VyUEMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiByZXZpZXdpbmcgYSBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBhcyBmb2xsb3dzOiBmaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIEpJVCBjb21waWxhdGlvbiwgc3BlY2lmaWNhbGx5IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIHRoZSByZWxldmFudCBQb3dlclBDIGFyY2hpdGVjdHVyZSBmbGFncyBsaWtlIGBQUENgIGFuZCBgUFBDNjRgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIHRvIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBgYnBmX2FyY2hfdGV4dF9wb2tlYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWAsIGFuZCBgYnBmX2FkZF9leHRhYmxlX2VudHJ5YC4gVGhlc2UgYXJlIGFsbCBzdHJvbmcgaW5kaWNhdG9ycyBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgYWx0ZXJlZC4gSSBhbHNvIGNoZWNrZWQgd2hpY2ggb2YgdGhlc2Ugc3ltYm9scyBhcmUgZXhwb3J0ZWQsIG9yIGluIHRoZSBzeW1ib2wgdGFibGUuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLlxuXG5CYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBJJ3ZlIGlkZW50aWZpZWQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2FyY2hfdGV4dF9wb2tlYCBhcyB0aGUgbWFpbiBub24taG90LXBhdGggZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb24uIFRoZXkgYXJlIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50cywgYW5kIGxpa2VseSB0aGUgcGxhY2VzIHdoZXJlIGEgZnV6emVyIGNhbiBzdGFydCB0byBpbmZsdWVuY2UgY29kZSBleGVjdXRpb24uXG5cbkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJ4oCZbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgYW5kIHdpbGwgdGhlcmVmb3JlIG5lZWQgdG8gYmUgdGVzdGVkIGZvciBzdGFiaWxpdHksIHNlY3VyaXR5LCBhbmQgY29ycmVjdCBvcGVyYXRpb24uIEl0J3MgbW9kaWZ5aW5nIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGFkZHJlc3NpbmcgYXNwZWN0cyBsaWtlIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YnMgYWxpZ25tZW50IGFuZCBvZmZzZXRzLCB0YWlsIGNhbGwgY29tcGFyaXNvbnMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGV4dGFibGUgaGFuZGxpbmcsIGFuZCB0aGUgdGV4dCBwb2tpbmcgbWVjaGFuaXNtLiBBbGwgb2YgdGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBKSVQgY29kZSBnZW5lcmF0aW9uIGFuZCBleGVjdXRpb24gZm9yIEJQRiBwcm9ncmFtcyBvbiBQUEMvUFBDNjQgYXJjaGl0ZWN0dXJlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB2aWEgdGhlIEJQRiBzdWJzeXN0ZW0vc3lzY2FsbC5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHRzIHRvIHJlZmxlY3QgdGhpczogSSdsbCBtYXJrIGl0IGFzIHdvcnRoIGZ1enppbmcgKG9idmlvdXNseSkuIE15IHJlYXNvbmluZyB3aWxsIGhpZ2hsaWdodCB0aGF0IHRoZSBwYXRjaCBhZmZlY3RzIEpJVCBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbi4gSSdsbCBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAuIEFuZCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBuZWVkcyB0aGUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODYyLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjQ5Ljg1MjI1MzI5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk2NTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfYXJjaF90ZXh0X3Bva2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIGxvZ2ljLCBpbmNsdWRpbmcgY29kZSBnZW5lcmF0aW9uIG11bHRpLXBhc3MgY29udmVyZ2VuY2UsIGZlbnRyeSBzdHViIGFsaWdubWVudCwgdGV4dCBwb2tpbmcsIGV4aXQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIGFuZCA2NC1iaXQgdGFpbCBjYWxsIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIEJQRiBwcm9ncmFtIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBiZWhhdmlvciBvbiBQb3dlclBDIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBsb2dpYywgaW5jbHVkaW5nIGNvZGUgZ2VuZXJhdGlvbiBtdWx0aS1wYXNzIGNvbnZlcmdlbmNlLCBmZW50cnkgc3R1YiBhbGlnbm1lbnQsIHRleHQgcG9raW5nLCBleGl0IGluc3RydWN0aW9uIGVtaXNzaW9uLCBhbmQgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhbHRlciBCUEYgcHJvZ3JhbSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgYmVoYXZpb3Igb24gUG93ZXJQQyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6NDkuOTgzMjI1NjA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM3OTMzNzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEwOjQ5Ljk4MzY3NzIxOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMzc4ODgwNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQqKSBhbmQgY29ycmVzcG9uZGluZyBCUEYgc2VsZnRlc3RzLiBUaGUgY2hhbmdlcyBhZGRyZXNzIG11bHRpLXBhc3MgY29kZSBnZW5lcmF0aW9uIGNvbnZlcmdlbmNlLCBhbGlnbm1lbnQgb2YgZmVudHJ5IHN0dWJzL2R1bW15IHRyYW1wb2xpbmUgYWRkcmVzcywgYnJhbmNoIHJhbmdlIGNoZWNrcywgYW5kIDY0LWJpdCByZWdpc3RlciBjb21wYXJpc29ucyBmb3IgdGFpbCBjYWxscy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YzY3MzZlOTc0YmYzMzI2NjRmZDAyOGQ0YzE2OTQ5MjA2MmJhNDYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MDk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5pbmRleCBmMzJkZTg3MDRkNGQ5Li40ZGE4YmRlOTJlMWVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5AQCAtMTQsNiArMTQsMTMgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHBjLW9wY29kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcdTAwM2VcbiBcbisvKlxuKyAqIFdlIG5lZWQgYXQgbGVhc3QgMiBwYXNzZXMgZm9yIHByb3BlciBjb2RlIGdlbmVyYXRpb24sIGFuZCBtYXkgbmVlZFxuKyAqIGFkZGl0aW9uYWwgcGFzc2VzIGlmIGNvZGUgc2l6ZSBjaGFuZ2VzIGJldHdlZW4gcGFzc2VzLlxuKyAqL1xuKyNkZWZpbmUgQ09ERUdFTl9NSU5fUEFTU0VTICAgIDJcbisjZGVmaW5lIENPREVHRU5fTUFYX1BBU1NFUyAgICAzXG4rXG4gI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJX1YxXG4gI2RlZmluZSBGVU5DVElPTl9ERVNDUl9TSVpFXHQyNFxuICNlbHNlXG5AQCAtMTg4LDYgKzE5NSwxMiBAQCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0IHtcbiBcbiAjZGVmaW5lIGJwZl90b19wcGMocilcdChjdHgtXHUwMDNlYjJwW3JdKVxuIFxuKyNpZmRlZiBDT05GSUdfUFBDNjRcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpXG4rI2Vsc2VcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTFdJKGEsIGkpXG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19QUEMzMlxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlx0MyAvKiBUaHJlZSBpbnN0cnVjdGlvbnMgPVx1MDAzZSAxMiBieXRlcyAqL1xuICNlbHNlXG5AQCAtMjE0LDEwICsyMjcsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9mdW5jX2NhbGxfcmVsKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpcbiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4gXHRcdCAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTtcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuK3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4gdm9pZCBicGZfaml0X3JlYWxsb2NfcmVncyhzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcbitpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdGxvbmcgZXhpdF9hZGRyKTtcbiB2b2lkIHByZXBhcmVfZm9yX2ZzZXNzaW9uX2ZlbnRyeSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCBjb29raWVfY250LFxuIFx0XHRcdFx0XHRcdFx0XHRpbnQgY29va2llX29mZiwgaW50IHJldHZhbF9vZmYpO1xuIHZvaWQgc3RvcmVfZnVuY19tZXRhKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA3YjA3YjQzNTc1ZjExLi5jMjcxN2YwZDljZGQ0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTQ5LDExICs0OSwzNSBAQCBhc20gKFxuIFwiXHQucG9wc2VjdGlvblx0XHRcdFx0O1wiXG4gKTtcbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XG4rXHRpbnQgc3R1Yl9zejtcbiBcbiBcdC8qXG4rXHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXG4rXHQgKiBBbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpbiB0aGUgZmltYWdlLlxuK1x0ICogVGhlIGFsaWdubWVudCBOT1AgbXVzdCBhcHBlYXIgYmVmb3JlIE9PTCBzdHViLCB0byBtYWtlXG4rXHQgKiBvb2xfc3R1Yl9pZHggXHUwMDI2IGxvbmdfYnJhbmNoX3N0dWJfaWR4IGNvbnN0YW50IGZyb20gZW5kLlxuK1x0ICpcbitcdCAqIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWwgYWxpZ25tZW50IGRlcGVuZHNcbitcdCAqIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWIncyBpbnN0cnVjdGlvbiBjb3VudC4gVGhlXG4rXHQgKiBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKVxuK1x0ICogb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KSBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhXG4rXHQgKiBOT1AgaWYgdGhlIGFkZHJlc3Mgb2YgZHVtbXlfdHJhbXBfYWRkciBpcyBub24gYWxpZ25lZC5cbitcdCAqXG4rXHQgKiBJbiBwYXNzPTAgd2hlbiBpbWFnZT09TlVMTCwgY29uc2VydmF0aXZlbHkgYWNjb3VudCBmb3Igc3BhY2VcbitcdCAqIHJlcXVpcmVkIHRvIGFjY29tbW9kYXRlIGFsaWdubWVudCBOT1AuIEluIGNhc2UgZmluYWwgcGFzcyBza2lwc1xuK1x0ICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kXG4rXHQgKiBqaXRlZF9sZW4gc2lnbmlmaWVzIGNvcnJlY3QgcHJvZ3JhbSBzaXplLlxuK1x0ICovXG4rXG4rXHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xuK1x0aWYgKCFpbWFnZSB8fCAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmaW1hZ2UgKyBjdHgtXHUwMDNlaWR4KjQgKyBzdHViX3N6LCBTWkwpKVxuK1x0XHRFTUlUKFBQQ19SQVdfTk9QKCkpO1xuK1xuK1x0LypcbitcdCAqXHRub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHJcbiBcdCAqIE91dC1vZi1saW5lIHN0dWI6XG4gXHQgKlx0bWZsclx0cjBcbiBcdCAqXHRbYnxibF1cdHRyYW1wXG5AQCAtNzAsNDQgKzk0LDQ2IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0LypcbiBcdCAqIExvbmcgYnJhbmNoIHN0dWI6XG4tXHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2VcbiBcdCAqXHRtZmxyXHRyMTFcbiBcdCAqXHRiY2xcdDIwLDMxLCQrNFxuLVx0ICpcdG1mbHJcdHIxMlxuLVx0ICpcdGxkXHRyMTIsIC04LVNaTChyMTIpXG4rXHQgKlx0bWZsclx0cjEyXHQvLyBsci9yMTIgc3RvcmVzIHBjIG9mIGN1cnJlbnQodGhpcykgaW5zdC5cbitcdCAqXHRsZFx0cjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjBcbiBcdCAqXHRtdGN0clx0cjEyXG4tXHQgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuK1x0ICpcdG10bHJcdHIxMVx0Ly8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJXG4gXHQgKlx0YmN0clxuK1x0ICpcdC5sb25nXHRcdTAwM2NkdW1teV90cmFtcF9hZGRyXHUwMDNlICAvLyBTWkwgYnl0ZXMgYWxpZ25lZFxuIFx0ICovXG4tXHRpZiAoaW1hZ2UpXG4tXHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbi1cdGN0eC1cdTAwM2VpZHggKz0gU1pMIC8gNDtcbiBcdGxvbmdfYnJhbmNoX3N0dWJfaWR4ID0gY3R4LVx1MDAzZWlkeDtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ0w0KCkpO1xuIFx0RU1JVChQUENfUkFXX01GTFIoX1IxMikpO1xuLVx0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIC04LVNaTCkpO1xuK1x0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIDIwKSk7XG4gXHRFTUlUKFBQQ19SQVdfTVRDVFIoX1IxMikpO1xuIFx0RU1JVChQUENfUkFXX01UTFIoX1IxMSkpO1xuIFx0RU1JVChQUENfUkFXX0JDVFIoKSk7XG4gXG4rXHRpZiAoaW1hZ2UpXG4rXHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbitcbitcdGN0eC1cdTAwM2VpZHggKz0gU1pMIC8gNDtcbitcbiBcdGlmICghYnBmX2ppdF9vb2xfc3R1Yikge1xuIFx0XHRicGZfaml0X29vbF9zdHViID0gKGN0eC1cdTAwM2VpZHggLSBvb2xfc3R1Yl9pZHgpICogNDtcbiBcdFx0YnBmX2ppdF9sb25nX2JyYW5jaF9zdHViID0gKGN0eC1cdTAwM2VpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0O1xuIFx0fVxuIH1cbiBcbi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbitpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuK1x0XHRcdFx0XHRcdFx0aW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuIHtcbi1cdGlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbitcdGlmIChleGl0X2FkZHIgXHUwMDI2XHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGxvbmcpKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiBcdFx0UFBDX0pNUChleGl0X2FkZHIpO1xuLVx0fSBlbHNlIGlmIChjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcikge1xuLVx0XHRpZiAoV0FSTl9PTighaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljdHgtXHUwMDNlYWx0X2V4aXRfYWRkciAtIChjdHgtXHUwMDNlaWR4ICogNCkpKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKFxuK1x0XHRcdChsb25nKShjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyID0gY3R4LVx1MDAzZWlkeCAqIDQ7XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4rXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3NCw2ICszMDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0ICovXG4gXHRpZiAoY2djdHguc2VlbiBcdTAwMjYgU0VFTl9UQUlMQ0FMTCB8fCAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljZ2N0eC5pZHggKiA0KSkge1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuK1x0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuQEAgLTI4Niw3ICszMTMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0ICovXG4gXHRicGZfaml0X2J1aWxkX3Byb2xvZ3VlKE5VTEwsIFx1MDAyNmNnY3R4KTtcbiBcdGFkZHJzW2ZwLVx1MDAzZWxlbl0gPSBjZ2N0eC5pZHggKiA0O1xuLVx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBcdTAwMjZjZ2N0eCk7XG4rXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIE5VTEwsIFx1MDAyNmNnY3R4KTtcbiBcbiBcdGZpeHVwX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogQlBGX0ZJWFVQX0xFTiAqIDQ7XG4gXHRleHRhYmxlX2xlbiA9IGZwLVx1MDAzZWF1eC1cdTAwM2VudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpO1xuQEAgLTMwNiwxMCArMzMzLDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRjb2RlX2Jhc2UgPSAodTMyICopKGltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXHRmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcbi1cdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yICovXG4tXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFx1MDAzYyAzOyBwYXNzKyspIHtcbitcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yKywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqL1xuK1x0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcysrKSB7XG4rXHRcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xuK1xuIFx0XHQvKiBOb3cgYnVpbGQgdGhlIHByb2xvZ3VlLCBib2R5IGNvZGUgXHUwMDI2IGVwaWxvZ3VlIGZvciByZWFsLiAqL1xuIFx0XHRjZ2N0eC5pZHggPSAwO1xuK1x0XHRjZ2N0eC5leGVudHJ5X2lkeCA9IDA7XG4gXHRcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xuIFx0XHRicGZfaml0X2J1aWxkX3Byb2xvZ3VlKGNvZGVfYmFzZSwgXHUwMDI2Y2djdHgpO1xuIFx0XHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4LCBhZGRycywgcGFzcyxcbkBAIC0zMTgsMTEgKzM0OCwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuLVx0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGNvZGVfYmFzZSwgXHUwMDI2Y2djdHgpO1xuK1x0XHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbitcdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIGZjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbitcbitcdFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XG4gXG4gXHRcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiBcdFx0XHRwcl9pbmZvKFwiUGFzcyAlZDogc2hyaW5rID0gJWQsIHNlZW4gPSAweCV4XFxuXCIsIHBhc3MsXG4tXHRcdFx0XHRwcm9nbGVuIC0gKGNnY3R4LmlkeCAqIDQpLCBjZ2N0eC5zZWVuKTtcbitcdFx0XHRcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xuK1xuK1x0XHQvKiBDaGVjayBpZiBwcm9ncmFtIHNpemUgaGFzIGNvbnZlcmdlZCwgYnV0IGVuc3VyZSBtaW5pbXVtIHBhc3NlcyAqL1xuK1x0XHRpZiAocGFzcyBcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiA9PSBwcmV2X3Byb2dsZW4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcbitcdFx0XHRwcl9lcnIoXCJCUEYgSklUOiBQcm9ncmFtIGRpZCBub3QgY29udmVyZ2UgYWZ0ZXIgJWQgcGFzc2VzXFxuXCIsXG4rXHRcdFx0XHRcdFx0XHRcdENPREVHRU5fTUFYX1BBU1NFUyk7XG4rXHRcdFx0YnBmX2FyY2hfdGV4dF9jb3B5KFx1MDAyNmZoZHItXHUwMDNlc2l6ZSwgXHUwMDI2aGRyLVx1MDAzZXNpemUsIHNpemVvZihoZHItXHUwMDNlc2l6ZSkpO1xuK1x0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuK1x0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKGJwZl9qaXRfZW5hYmxlIFx1MDAzZSAxKVxuQEAgLTM1Nyw3ICs0MDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdFx0KHZvaWQgKilmaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcbiBcbiBvdXRfYWRkcnM6XG4tXHRcdGlmICghaW1hZ2UgXHUwMDI2XHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XG4rXHRcdGlmICghZnAtXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2IHByaXZfc3RhY2tfcHRyKSB7XG4gXHRcdFx0ZnAtXHUwMDNlYXV4LVx1MDAzZXByaXZfc3RhY2tfcHRyID0gTlVMTDtcbiBcdFx0XHRmcmVlX3BlcmNwdShwcml2X3N0YWNrX3B0cik7XG4gXHRcdH1cbkBAIC0zOTksNyArNDQ0LDcgQEAgaW50IGJwZl9hZGRfZXh0YWJsZV9lbnRyeShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgaW50IHBhc3NcbiBcdHUzMiAqZml4dXA7XG4gXG4gXHQvKiBQb3B1bGF0ZSBleHRhYmxlIGVudHJpZXMgb25seSBpbiB0aGUgbGFzdCBwYXNzICovXG4tXHRpZiAocGFzcyAhPSAyKVxuK1x0aWYgKHBhc3MgXHUwMDNjIENPREVHRU5fTUlOX1BBU1NFUylcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoIWZwLVx1MDAzZWF1eC1cdTAwM2VleHRhYmxlIHx8XG5AQCAtNzM5LDcgKzc4NCw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRlXG4gXHRcdCAqIFNldHRpbmcgdGhlIHRhaWxfY2FsbF9pbmZvIGluIHRyYW1wb2xpbmUncyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7XG4gXG5AQCAtMTI2NSw2ICsxMzEwLDcgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKiBicGZfZnVuYzpcbiAgKlx0W25vcHxiXVx0b29sX3N0dWJcbiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOlxuKyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNzIsMTQgKzEzMTgsMTQgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKlx0Ylx0YnBmX2Z1bmMgKyA0XG4gICogMy4gTG9uZyBicmFuY2ggc3R1YjpcbiAgKiBsb25nX2JyYW5jaF9zdHViOlxuLSAqXHQubG9uZ1x0XHUwMDNjYnJhbmNoX2FkZHJcdTAwM2UvXHUwMDNjZHVtbXlfdHJhbXBcdTAwM2VcbiAgKlx0bWZsclx0cjExXG4gICpcdGJjbFx0MjAsMzEsJCs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuKyAqXHRsZFx0cjEyLCAyMChyMTIpXG4gICpcdG10Y3RyXHRyMTJcbiAgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuICAqXHRiY3RyXG4rICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXG4gICogZHVtbXlfdHJhbXAgaXMgdXNlZCB0byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cy5cbiAgKlxuQEAgLTEzODEsMTAgKzE0MjcsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbitcdCAqXG4rXHQgKiBkdW1teV90cmFtcF9hZGRyIG1vdmVkIHRvIGJvdHRvbSBvZiBsb25nIGJyYW5jaCBzdHViLlxuIFx0ICovXG4gXHRpZiAoKG5ld19hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgfHxcbiBcdCAgICAob2xkX2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSlcbi1cdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSxcbitcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGUuLmY1Yjk0NDFjZjQ2YWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdEVNSVQoUFBDX1JBV19NUihfUjMsIGJwZl90b19wcGMoQlBGX1JFR18wKSkpO1xuIFxuQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi9cbkBAIC0xMTQ5LDcgKzExNDksOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxuIFx0XHRcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuLVx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7XG4rXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXG4rXHRcdFx0XHRcdFx0XHRcdGN0eCwgX1IwLCBleGl0X2FkZHIpO1xuIFx0XHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBkYWIxMDZjYWUyMmI1Li5lODAzMTIxNzFhYTc0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcdFx0ICovXG4gXHRcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbi1cdFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4rXHRcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0XHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xuIFx0XHRFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSxcbiBcdFx0XHRcdFx0XHRcdFx0LShCUEZfUFBDX1RBSUxDQUxMKSkpO1xuQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFx0fVxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4gXG5AQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xuIFxuLVx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XG4rXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xuIH1cbiBcbiAvKlxuQEAgLTY2Miw3ICs2NjIsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0dFLCBvdXQpO1xuIFxuIFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpO1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4rXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9MRSwgOCk7XG4gXG4gXHQvKiBkZXJlZmVyZW5jZSBUTVBfUkVHXzEgKi9cbkBAIC02NzIsNyArNjcyLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIGlmICh0YWlsX2NhbGxfaW5mbyA9PSBNQVhfVEFJTF9DQUxMX0NOVClcbiBcdCAqICAgZ290byBvdXQ7XG4gXHQgKi9cbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XG4gXG4gXHQvKlxuQEAgLTcwNyw3ICs3MDcsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xuIFx0ICogdGFpbF9jYWxsX2luZm8uXG4gXHQgKi9cbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xuIFxuIFx0LyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi9cbkBAIC0xNzM3LDcgKzE3MzcsOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZVxuIFx0XHRcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuLVx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCB0bXAxX3JlZywgZXhpdF9hZGRyKTtcbitcdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxuK1x0XHRcdFx0XHRcdFx0XHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuaW5kZXggMzU1OGZlMTBlMjhjZi4uYjI5MWQ5MzRkZDFhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc5LDkgKzE3OSwxMSBAQCBpbnQgZ2V0X2ppdGVkX3Byb2dyYW1fdGV4dChpbnQgZmQsIGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X3N6KVxuIFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9O1xuIFx0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4gXHRfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYztcbitcdF9fdTMyIHRydW5jX2xlbiA9IDAsIGRpc2FzbV9sZW47XG4gXHRfX3UzMiAqZnVuY19sZW5zID0gTlVMTDtcbiBcdEZJTEUgKnRleHRfb3V0ID0gTlVMTDtcbiBcdHVpbnQ4X3QgKmltYWdlID0gTlVMTDtcbitcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XG4gXHRpbnQgaSwgZXJyID0gMDtcbiBcbiBcdGlmICghbGx2bV9pbml0aWFsaXplZCkge1xuQEAgLTIyNSw5ICsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfcHJvZ19nZXRfaW5mb19ieV9mZCAjMlwiKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHQvKlxuK1x0ICogbGFzdCA4IGJ5dGVzIGNvbnRhaW5zIGR1bW15X3RyYW1wb2xpbmUgYWRkcmVzcyBpbiBKSVRcbitcdCAqIG91dHB1dCBvbiA2NC1iaXQgYW5kIGxhc3QgNCBieXRlcyBvbiAzMi1iaXQgcG93ZXJwYyxcbitcdCAqIHdoaWNoIGNhbid0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uXG4rXHQgKi9cbitcdHRyaXBsZSA9IExMVk1HZXREZWZhdWx0VGFyZ2V0VHJpcGxlKCk7XG4rXHRpZiAodHJpcGxlKSB7XG4rXHRcdGlmIChzdHJzdHIodHJpcGxlLCBcInBvd2VycGM2NFwiKSB8fCBzdHJzdHIodHJpcGxlLCBcInBwYzY0XCIpKVxuK1x0XHRcdHRydW5jX2xlbiA9IDg7XG4rXHRcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFwicG93ZXJwY1wiKSB8fCBzdHJzdHIodHJpcGxlLCBcInBwY1wiKSlcbitcdFx0XHR0cnVuY19sZW4gPSA0O1xuK1x0XHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcbitcdH1cbitcbiBcdGZvciAocGMgPSAwLCBpID0gMDsgaSBcdTAwM2Mgaml0ZWRfZnVuY3M7ICsraSkge1xuIFx0XHRmcHJpbnRmKHRleHRfb3V0LCBcImZ1bmMgIyVkOlxcblwiLCBpKTtcbi1cdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBmdW5jX2xlbnNbaV0pO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBEaXNhYmxlZCBKSVQgaGF2ZSB6ZXJvIGZ1bmNfbGVucywgaGVuY2UgdW5kZXJmbG93XG4rXHRcdCAqL1xuK1x0XHRkaXNhc21fbGVuID0gZnVuY19sZW5zW2ldIFx1MDAzZSB0cnVuY19sZW4gP1xuK1x0XHRcdFx0XHRmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwO1xuK1x0XHRkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICsgcGMsIGRpc2FzbV9sZW4pO1xuK1xuIFx0XHRmcHJpbnRmKHRleHRfb3V0LCBcIlxcblwiKTtcbiBcdFx0cGMgKz0gZnVuY19sZW5zW2ldO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IGIwYzQ0MTM4NGYyMDYuLjM2NTAwOGQxZWQ0MGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0xNTksNiArMTU5LDcgQEBcbiAjZGVmaW5lIF9fYXJjaF9yaXNjdjY0XHRcdF9fYXJjaChcIlJJU0NWNjRcIilcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFx0XHRfX2FyY2goXCJzMzkweFwiKVxuICNkZWZpbmUgX19hcmNoX2xvb25nYXJjaFx0X19hcmNoKFwiTE9PTkdBUkNIXCIpXG4rI2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0XHRfX2FyY2goXCJQT1dFUlBDNjRcIilcbiAjZGVmaW5lIF9fY2Fwc191bnByaXYoY2FwcylcdF9fdGVzdF90YWcoXCJ0ZXN0X2NhcHNfdW5wcml2PVwiIEVYUEFORF9RVU9URShjYXBzKSlcbiAjZGVmaW5lIF9fbG9hZF9pZl9KSVRlZCgpXHRfX3Rlc3RfdGFnKFwibG9hZF9tb2RlPWppdGVkXCIpXG4gI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKVx0X190ZXN0X3RhZyhcImxvYWRfbW9kZT1ub19qaXRlZFwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuaW5kZXggNDhmYTM0ZDI5NTlmNC4uOTg4MGNlNGYxOTMxYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG5AQCAtOTEsNiArOTEsODQgQEAgX19qaXRlZChcIlx0cG9wcVx0JXJheFwiKVxuIF9faml0ZWQoXCJcdGptcFx0e3suKn19XCIpXHRcdC8qIGp1bXAgdG8gdGFpbCBjYWxsIHRndCAgICovXG4gX19qaXRlZChcIkwwOlx0bGVhdmVcIilcbiBfX2ppdGVkKFwiXHR7eyhyZXRxfGptcFx0MHgpfX1cIilcdFx0LyogcmV0dXJuIG9yIGp1bXAgdG8gcmV0aHVuayAqL1xuK19fYXJjaF9wb3dlcnBjNjRcbisvKiBwcm9ncmFtIGVudHJ5IGZvciBtYWluKCksIHJlZ3VsYXIgZnVuY3Rpb24gcHJvbG9ndWUgKi9cbitfX2ppdGVkKFwiXHRub3BcIilcbitfX2ppdGVkKFwiLi4uXCIpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cbitfX2ppdGVkKFwiXHRsaSA5LCAwXCIpXG4rX19qaXRlZChcIlx0c3RkIDksIC04KDEpXCIpXG4rX19qaXRlZChcIlx0bWZsciAwXCIpXG4rX19qaXRlZChcIlx0c3RkIDAsIDE2KDEpXCIpXG4rX19qaXRlZChcIlx0c3RkdSAxLCB7ey4qfX0oMSlcIilcbisvKlxuKyAqIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXJcbisgKlxuKyAqIEFkZHJlc3MgbWF0ZXJpYWxpemF0aW9uIGRpZmZlcnMgYmV0d2VlbiBQQ1JFTCBhbmQgbm9uLVBDUkVMIGtlcm5lbHMuXG4rICogU2tpcCB0aGUgYWRkcmVzcyBnZW5lcmF0aW9uIHNlcXVlbmNlIGFuZCB2ZXJpZnkgb25seSB0aGF0IHRoZSBjYWxsXG4rICogdGFyZ2V0IGlzIGxvYWRlZCBpbnRvIENUUiBiZWZvcmUgYnJhbmNoaW5nLlxuKyAqL1xuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG10Y3RyIHt7Lip9fVwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRiY3RybFwiKVxuK19faml0ZWQoXCJcdG1yXHQ4LCAzXCIpXG4rX19qaXRlZChcIlx0bGkgOCwgMFwiKVxuK19faml0ZWQoXCJcdGFkZGkgMSwgMSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgMCwgMTYoMSlcIilcbitfX2ppdGVkKFwiXHRtdGxyIDBcIilcbitfX2ppdGVkKFwiXHRtclx0MywgOFwiKVxuK19faml0ZWQoXCJcdGJsclwiKVxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiZnVuYyAjMVwiKVxuKy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovXG4rX19qaXRlZChcIlx0bm9wXCIpXG4rX19qaXRlZChcIi4uLlwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4rLyogdGFpbCBjYWxsIHByb2xvZ3VlIGZvciBzdWJwcm9ncmFtICovXG4rX19qaXRlZChcIlx0bGQgMTAsIDAoMSlcIilcbitfX2ppdGVkKFwiXHRsZCA5LCAtOCgxMClcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDksIDMzXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkaSA5LCAxMCwgLThcIilcbitfX2ppdGVkKFwiXHRzdGQgOSwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRsaXMge3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRzbGRpIHt7Lip9fSwge3suKn19LCAzMlwiKVxuK19faml0ZWQoXCJcdG9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdG9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGkge3suKn19LCAwXCIpXG4rX19qaXRlZChcIlx0bHd6IDksIHt7Lip9fSh7ey4qfX0pXCIpXG4rX19qaXRlZChcIlx0c2x3aSB7ey4qfX0sIHt7Lip9fSwgMFwiKVxuK19faml0ZWQoXCJcdGNtcGx3XHR7ey4qfX0sIDlcIilcbitfX2ppdGVkKFwiXHRiZlx0MCwge3suKn19XCIpXG4rLyogYnBmX3RhaWxfY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xuK19faml0ZWQoXCJcdGxkIDksIC04KDEpXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQ5LCAzM1wiKVxuK19faml0ZWQoXCJcdGJmXHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDksIDAoOSlcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDksIDMzXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkaSA5LCA5LCAxXCIpXG4rX19qaXRlZChcIlx0bXVsbGkgMTAsIHt7Lip9fSwgOFwiKVxuK19faml0ZWQoXCJcdGFkZCAxMCwgMTAsIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDEwLCB7ey4qfX0oMTApXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQxMCwgMFwiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGxkIDEwLCB7ey4qfX0oMTApXCIpXG4rX19qaXRlZChcIlx0YWRkaSAxMCwgMTAsIHt7Lip9fVwiKSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xuK19faml0ZWQoXCJcdG10Y3RyIDEwXCIpXG4rX19qaXRlZChcIlx0bGQgMTAsIC04KDEpXCIpXG4rX19qaXRlZChcIlx0Y21wbGRpXHQxMCwgMzNcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRhZGRpIDEwLCAxLCAtOFwiKVxuK19faml0ZWQoXCJcdHN0ZCA5LCAwKDEwKVwiKVxuK19faml0ZWQoXCJcdGJjdHJcIilcbitfX2ppdGVkKFwiXHRtclx0MywgOFwiKVxuK19faml0ZWQoXCJcdGJsclwiKVxuK1xuIFNFQyhcInRjXCIpXG4gX19uYWtlZCBpbnQgbWFpbih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCAzY2UzMmQxMzRlMmNjLi4wMWIxNDIwMDk3ZDI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtMzc4LDYgKzM3OCw3IEBAIGVudW0gYXJjaCB7XG4gXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuIFx0QVJDSF9TMzkwWFx0PSAweDEwLFxuIFx0QVJDSF9MT09OR0FSQ0hcdD0gMHgyMCxcbitcdEFSQ0hfUE9XRVJQQzY0XHQ9IDB4NDAsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbkBAIC0zOTIsNiArMzkzLDggQEAgc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG4gXHRyZXR1cm4gQVJDSF9TMzkwWDtcbiAjZWxpZiBkZWZpbmVkKF9fbG9vbmdhcmNoX18pXG4gXHRyZXR1cm4gQVJDSF9MT09OR0FSQ0g7XG4rI2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKVxuK1x0cmV0dXJuIEFSQ0hfUE9XRVJQQzY0O1xuICNlbmRpZlxuIFx0cmV0dXJuIEFSQ0hfVU5LTk9XTjtcbiB9XG5AQCAtNTg1LDYgKzU4OCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfUzM5MFg7XG4gXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcIkxPT05HQVJDSFwiKSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9MT09OR0FSQ0g7XG4rXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcIlBPV0VSUEM2NFwiKSA9PSAwKSB7XG4rXHRcdFx0XHRhcmNoID0gQVJDSF9QT1dFUlBDNjQ7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFBSSU5UX0ZBSUwoXCJiYWQgYXJjaCBzcGVjOiAnJXMnXFxuXCIsIHZhbCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTA6NDkuOTgzNjc3OTk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzc4ODQyOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIEl0IGFwcGVhcnMgdG8gZm9jdXMgZXhjbHVzaXZlbHkgb24gaW1wcm92ZW1lbnRzIGFuZCBmaXhlcyB3aXRoaW4gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlci4gVGhlIGZpbGVzIHRvdWNoZWQgYXJlIGFsbCB3aXRoaW4gdGhlIGBhcmNoL3Bvd2VycGMvbmV0L2AgZGlyZWN0b3J5LCBkZWFsaW5nIHdpdGggQlBGIEpJVCBjb21waWxhdGlvbiwgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBzZWxmdGVzdHMuXG5cbk15IGluaXRpYWwgc2NhbiByZXZlYWxzIHNldmVyYWwga2V5IG1vZGlmaWNhdGlvbnM6IHRoZSBpbnRyb2R1Y3Rpb24gb2YgYENPREVHRU5fTUlOX1BBU1NFU2AgYW5kIGBDT0RFR0VOX01BWF9QQVNTRVNgLCBhZGp1c3RtZW50cyB0byBob3cgZmVudHJ5IHN0dWJzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhbGlnbm1lbnQgaXNzdWVzIHJlbGF0ZWQgdG8gYGR1bW15X3RyYW1wX2FkZHJgIHdpdGhpbiB0aGUgYGZpbWFnZWAsIGFuZCBmaXhlcyB0byB0aGUgYGV4aXRfYWRkcmAgYnJhbmNoIHJhbmdlIGNoZWNrLiBUaGVyZSdzIGFsc28gYW4gdXBkYXRlIHRvIDY0LWJpdCBjb21wYXJpc29uIGluc3RydWN0aW9ucyBmb3IgdGFpbCBjYWxscywgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9hcmNoX3RleHRfcG9rZWAgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBgZHVtbXlfdHJhbXBfYWRkcmAgbG9jYXRpb24uIFBsdXMsIHRoZSBzZWxmdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQuXG5cblRoaW5raW5nIGFib3V0IEtNU0FOLCBpdCdzIHdvcnRoIG5vdGluZyB0aGF0IEtNU0FOIGl0c2VsZiBpcyBub3Qgc3VwcG9ydGVkIG9uIFBvd2VyUEMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBtYWtlIHN1cmUgdGhhdCByZWdhcmRsZXNzIG9mIGFyY2gsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBLTVNBTiBydWxlcy4gVGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBQb3dlclBDIEJQRiBKSVQgY29tcGlsZXIgYW5kIHNlbGZ0ZXN0cywgZm9jdXNpbmcgb24gaW1wcm92aW5nIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2VzcyBhbmQgZW5zdXJpbmcgY29ycmVjdCBvcGVyYXRpb24uIFRoZXJlJ3Mgbm8gbW9kaWZpY2F0aW9uIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJJ3ZlIGxvb2tlZCBhdCB0aGUgZnVuY3Rpb25zIG1vZGlmeWluZyB0aGUgSklUIGltYWdlIGJ1ZmZlci4gVGhlIGNvZGUgd3JpdGVzIGR1bW15X3RyYW1wIG9yIE5PUHMgdG8gdGhlIEpJVCBpbWFnZSBidWZmZXIuIEFsc28gdGhlIEpJVCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQvZnJlZWQgYnkgdGhlIGJpbmFyeSBwYWNrIGFsbG9jYXRvci4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCB1bmluaXRpYWxpemVkIHN0YWNrIHJlYWRzLCBvciBpbmZvIGxlYWtzIHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgS01TQU4gcnVsZXMgcmlnb3JvdXNseSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIHNldCB0byBgZmFsc2VgLlxuXG5IZXJlJ3MgbXkgZGV0YWlsZWQgcmVhc29uaW5nOiBUaGUgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gdGhlIFBvd2VyUEMgQlBGIEpJVCBjb21waWxlciBhbmQgc2VsZnRlc3RzLiBJdCByZXNvbHZlcyBKSVQgY29kZSBnZW5lcmF0aW9uIGlzc3VlcywgYWRkcmVzc2VzIGZlbnRyeSB0cmFtcG9saW5lIGFsaWdubWVudCwgY29ycmVjdHMgNjQtYml0IHRhaWwgY2FsbCBjb21wYXJpc29ucywgYW5kIHVwZGF0ZXMgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIHJlbGF0ZWQgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbW9yZSByZWxhdGVkIHRvIGp1bXAgdGFyZ2V0IG1pc2NhbGN1bGF0aW9ucyBvciBidWZmZXIgYm91bmRzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgKGFuZCBLU0FOIGlzIG5vdCBldmVuIHN1cHBvcnRlZCBvbiBQb3dlclBDIGFueXdheSkuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwMSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTE6MDEuMzYyNTI1MjkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQqKSBhbmQgY29ycmVzcG9uZGluZyBCUEYgc2VsZnRlc3RzLiBUaGUgY2hhbmdlcyBhZGRyZXNzIG11bHRpLXBhc3MgY29kZSBnZW5lcmF0aW9uIGNvbnZlcmdlbmNlLCBhbGlnbm1lbnQgb2YgZmVudHJ5IHN0dWJzL2R1bW15IHRyYW1wb2xpbmUgYWRkcmVzcywgYnJhbmNoIHJhbmdlIGNoZWNrcywgYW5kIDY0LWJpdCByZWdpc3RlciBjb21wYXJpc29ucyBmb3IgdGFpbCBjYWxscy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUG93ZXJQQyBCUEYgSklUIGNvbXBpbGVyIChhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQqKSBhbmQgY29ycmVzcG9uZGluZyBCUEYgc2VsZnRlc3RzLiBUaGUgY2hhbmdlcyBhZGRyZXNzIG11bHRpLXBhc3MgY29kZSBnZW5lcmF0aW9uIGNvbnZlcmdlbmNlLCBhbGlnbm1lbnQgb2YgZmVudHJ5IHN0dWJzL2R1bW15IHRyYW1wb2xpbmUgYWRkcmVzcywgYnJhbmNoIHJhbmdlIGNoZWNrcywgYW5kIDY0LWJpdCByZWdpc3RlciBjb21wYXJpc29ucyBmb3IgdGFpbCBjYWxscy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIEpJVCBjb2RlIGdlbmVyYXRpb24gb3IgYnVmZmVyIHNpemluZyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBjb21waWxlciB2ZXJpZmljYXRpb24sIHJ1bnRpbWUgZXhlY3V0aW9uIHRlc3RzLCBvciBLQVNBTiwgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowm4l8c[1] Phase: Succeeded StartedAt: 2026-08-31 08:11:12 +0000 UTC FinishedAt: 2026-08-31 08:11:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 08:11:12 +0000 UTC FinishedAt: 2026-08-31 08:11:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2] Phase: Succeeded StartedAt: 2026-08-31 08:11:12 +0000 UTC FinishedAt: 2026-08-31 08:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 08:11:12 +0000 UTC FinishedAt: 2026-08-31 08:56:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 08:11:12 +0000 UTC FinishedAt: 2026-08-31 08:11:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 08:11:12 +0000 UTC FinishedAt: 2026-08-31 08:11:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2172062564/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 08:11:22 +0000 UTC FinishedAt: 2026-08-31 08:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 08:11:22 +0000 UTC FinishedAt: 2026-08-31 08:27:11 +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:*e1069573-1bf5-4914-b9a9-46142e467123,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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2172062564/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": "d113052b-2cf8-4e08-a71f-7eb0baf85c55", "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-workflowm4l8c/series-workflowm4l8c-build-action-2896341922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:11:22 +0000 UTC FinishedAt: 2026-08-31 08:27:01 +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:*e1069573-1bf5-4914-b9a9-46142e467123,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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2172062564/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": "d113052b-2cf8-4e08-a71f-7eb0baf85c55", "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-workflowm4l8c/series-workflowm4l8c-build-action-2896341922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 08:27:11 +0000 UTC FinishedAt: 2026-08-31 08:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 08:27:11 +0000 UTC FinishedAt: 2026-08-31 08:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 08:27:11 +0000 UTC FinishedAt: 2026-08-31 08:27:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 08:27:11 +0000 UTC FinishedAt: 2026-08-31 08:27:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2605507171/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 08:27:22 +0000 UTC FinishedAt: 2026-08-31 08:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 08:27:22 +0000 UTC FinishedAt: 2026-08-31 08:29:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d113052b-2cf8-4e08-a71f-7eb0baf85c55,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-workflowm4l8c/series-workflowm4l8c-build-action-2896341922/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-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 08:29:12 +0000 UTC FinishedAt: 2026-08-31 08:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:29:12 +0000 UTC FinishedAt: 2026-08-31 08:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 08:29:12 +0000 UTC FinishedAt: 2026-08-31 08:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 08:29:12 +0000 UTC FinishedAt: 2026-08-31 08:51:52 +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:*e1069573-1bf5-4914-b9a9-46142e467123,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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2605507171/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": "e6608409-e790-46fb-89e8-282c97edd977", "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-workflowm4l8c/series-workflowm4l8c-build-action-694300439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:29:12 +0000 UTC FinishedAt: 2026-08-31 08:51:41 +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:*e1069573-1bf5-4914-b9a9-46142e467123,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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2605507171/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": "e6608409-e790-46fb-89e8-282c97edd977", "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-workflowm4l8c/series-workflowm4l8c-build-action-694300439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 08:51:52 +0000 UTC FinishedAt: 2026-08-31 08:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 08:51:52 +0000 UTC FinishedAt: 2026-08-31 08:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 08:51:52 +0000 UTC FinishedAt: 2026-08-31 08:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 08:51:52 +0000 UTC FinishedAt: 2026-08-31 08:53:47 +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:*e6608409-e790-46fb-89e8-282c97edd977,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-workflowm4l8c/series-workflowm4l8c-build-action-694300439/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-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:56:34 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"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:*d113052b-2cf8-4e08-a71f-7eb0baf85c55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6608409-e790-46fb-89e8-282c97edd977,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-workflowm4l8c/series-workflowm4l8c-build-action-2896341922/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-workflowm4l8c/series-workflowm4l8c-build-action-694300439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:54:03 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2803840892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:53:57 +0000 UTC FinishedAt: 2026-08-31 08:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 08:54:07 +0000 UTC FinishedAt: 2026-08-31 08:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4l8c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0f5932b0-ef1d-4c25-8c7d-62832d2d43d1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 08:54:07 +0000 UTC FinishedAt: 2026-08-31 08:56:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d113052b-2cf8-4e08-a71f-7eb0baf85c55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6608409-e790-46fb-89e8-282c97edd977,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-workflowm4l8c/series-workflowm4l8c-build-action-2896341922/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-workflowm4l8c/series-workflowm4l8c-build-action-694300439/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-workflowm4l8c/series-workflowm4l8c-convert-artifact-2803840892/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,}