Name: series-workflowz6zqv Phase: Succeeded StartedAt: 2026-09-06 11:53:31 +0000 UTC FinishedAt: 2026-09-06 15:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[0] Phase: Succeeded StartedAt: 2026-09-06 11:53:31 +0000 UTC FinishedAt: 2026-09-06 11:56:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 11:53:31 +0000 UTC FinishedAt: 2026-09-06 11:56:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "54033bdc-d4fd-4997-a132-ece393b35a2c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "regsafe", "check_pkt_ptr_ids", "bpf_patch_insn_data", "verifier_remove_insns", "refine_map_lookup_value", "map_set_for_each_callback_args", "set_timer_callback_state", "set_task_work_schedule_callback_state", "push_insn" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7Y2hlY2tfcGt0X3B0cl9pZHMmIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXJpZmllcl9yZW1vdmVfaW5zbnMmIzM0OywKICAgICYjMzQ7cmVmaW5lX21hcF9sb29rdXBfdmFsdWUmIzM0OywKICAgICYjMzQ7bWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzJiMzNDssCiAgICAmIzM0O3NldF90aW1lcl9jYWxsYmFja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3B1c2hfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGludGVybmFsIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW1wcm92ZW1lbnRzIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXM6XG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXG4zLiBFbmhhbmNlcyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nIGluIHN0YXRlcy5jIGZvciBwYWNrZXQgcG9pbnRlcnMgYnkgdHJhY2tpbmcgaW50cmEtY2xhc3MgcG9pbnRlciBkaXNwbGFjZW1lbnQgKHBrdF9wdHJfZGVsdGEgLyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpLlxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1vZGlmeSBrZXJuZWwgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuIEFsbCBuZXdseSBhZGRlZCBzdHJ1Y3QgZmllbGRzIChzdWNoIGFzIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvZ2ljIHJlZ3Jlc3Npb25zIChlLmcuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHZlcmlmaWVyIHN0YXRlIGJ1Z3MpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTi92ZXJpZmllciB0ZXN0IHN1aXRlcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFjcm9zcyBzZXZlcmFsIGZpbGVzOlxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cbjMuIGtlcm5lbC9icGYvY2ZnLmM6IEFkZHMgZmFsbHRocm91Z2ggdmFsaWRhdGlvbiBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyaWVzIGluIHB1c2hfaW5zbigpLlxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgcmVhY2hhYmxlIHZpYSBzeXNfYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIHN0YXRlIHBydW5pbmcgY29ycmVjdG5lc3MsIHZlcmlmaWVyIGVkZ2UgY2FzZXMsIGFuZCBsb2NrIHNhZmV0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0ZDI2NjdhYjVkODgwOTE3OWQyOGQ5MzUxMDU0ODM0YWQxZWI5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuJiM0MztcdHMzMiBwa3RfcHRyX2RlbHRhO1xuJiM0MztcdGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2lkbWFwIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggODQyYzdkMWVhYmNjYy4uZTNjOTA0MzI4ZWRlMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC0xMDIsNiAmIzQzOzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICYjNDM7MTIyLDI2IEBAIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuJiM0MztcdCAqIHN1YnByb2dyYW0gYm91bmRhcnksIGJ1dCBydW5zIGJlZm9yZSBDTy1SRSByZWxvY2F0aW9ucyBjYW4gcmV3cml0ZSBhblxuJiM0MztcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbiYjNDM7XHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbiYjNDM7XHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbiYjNDM7XHRcdGlmICh3IFx1MDAzYyBzdWJwcm9nLVx1MDAzZXN0YXJ0IHx8IHcgXHUwMDNlPSAoc3VicHJvZyAmIzQzOyAxKS1cdTAwM2VzdGFydCkge1xuJiM0MztcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCYjMzQ7JWQ6IFwmIzM0OywgdCk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuICVkIHRvICVkXFxuXCYjMzQ7LCB0LCB3KTtcbiYjNDM7XHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4mIzQzO1x0XHRcdFx0ZW52LCB0LCBcJiMzNDtmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDtJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHQsIHcpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZGlzYXNtLmhcJiMzNDtcbiBcbkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbiYjNDM7ICogTyhwcm9nLVx1MDAzZWxlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlc1xuJiM0MzsgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuJiM0MztcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gJiM0MzsgbGVuIC0gMSxcbkBAIC01MjMsNiAmIzQzOzU0MCw5IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuIFx0aWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgpKVxuIFx0XHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcbiBcbkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgJiM0MzszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4mIzQzO1x0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO1xuIFx0XHRpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuJiM0MztcdHM2NCBkZWx0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19pZHMob2xkLVx1MDAzZWlkLCBjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIW9sZC1cdTAwM2VpZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXG4mIzQzO1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbiYjNDM7XHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4mIzQzO1x0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4mIzQzO1x0aWYgKGRlbHRhIFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFx1MDAzZSBTMzJfTUFYKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZG1hcC1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobWFwW2ldLm9sZCAhPSBvbGQtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDb21wYXJlIHNjYWxhciByZWdpc3RlciBJRHMgZm9yIHN0YXRlIGVxdWl2YWxlbmNlLlxuICAqXG5AQCAtNjMyLDggJiM0Mzs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4mIzQzO1x0XHRpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdC8qIG5ldyB2YWwgbXVzdCBzYXRpc2Z5IG9sZCB2YWwga25vd2xlZGdlICovXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAxYzMwMzlmM2ZjMzIzLi5hZDE0YTdmYmVkNzJmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JzZWFyY2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuQEAgLTQ0Nyw2ICYjNDM7NDQ4LDEzIEBAIHN0YXRpYyBib29sIHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gXHRyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQocmVnX2J0Zl9yZWNvcmQocmVnKSwgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhcmVnLVx1MDAzZW1hcF91aWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHR5cGVfaXNfcmRvbmx5X21lbSh1MzIgdHlwZSlcbiB7XG4gXHRyZXR1cm4gdHlwZSBcdTAwMjYgTUVNX1JET05MWTtcbkBAIC0xOTI1LDExICYjNDM7MTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0aWYgKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsO1xuIFx0XHRyZWctXHUwMDNlbWFwX3B0ciA9IG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YTtcbi1cdFx0LyogdHJhbnNmZXIgcmVnJiMzOTtzIGlkIHdoaWNoIGlzIHVuaXF1ZSBmb3IgZXZlcnkgbWFwX2xvb2t1cF9lbGVtXG4tXHRcdCAqIGFzIFVJRCBvZiB0aGUgaW5uZXIgbWFwLlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXG4mIzQzO1x0XHQgKiBQcmVzZXJ2ZSB0aGUgbG9va3VwIGlkZW50aXR5IG9ubHkgZm9yIGVtYmVkZGVkIG9iamVjdHMgd2hvc2VcbiYjNDM7XHRcdCAqIHZlcmlmaWNhdGlvbiBuZWVkcyB0byBkaXN0aW5ndWlzaCBjb25jcmV0ZSBtYXAgaW5zdGFuY2VzLiBEb2luZ1xuJiM0MztcdFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBFYWNoIG1hcCBsb29rdXAgaGFzIGEgdW5pcXVlIHJlZ2lzdGVyIElELCBzbyB1c2UgaXQgYXMgdGhlIFVJRCBvZlxuJiM0MztcdFx0ICogdGhlIGlubmVyIG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlaW5uZXJfbWFwX21ldGEtXHUwMDNlcmVjb3JkLFxuLVx0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspKVxuJiM0MztcdFx0XHRcdFx0IEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLIHxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spKVxuIFx0XHRcdHJlZy1cdTAwM2VtYXBfdWlkID0gcmVnLVx1MDAzZWlkO1xuIFx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUCkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IFBUUl9UT19YRFBfU09DSyB8IG1heWJlX251bGw7XG5AQCAtMTAwMzUsNiAmIzQzOzEwMDUwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xuJiM0MztcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuJiM0MztcdFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogcG9pbnRlciB0byBzdGFjayBvciBudWxsICovXG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18zXTtcbkBAIC0xMDEzMSw2ICYjNDM7MTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXG4mIzQzO1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuQEAgLTEwMjQ5LDYgJiM0MzsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXG4mIzQzO1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuQEAgLTIxMzY3LDYgJiM0MzsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSklUIGNvbnN0YW50IGJsaW5kaW5nIHRyZWF0cyBpbnN0cnVjdGlvbiBwYXRjaGluZyBmYWlsdXJlcyBhcyBhXG4mIzQzO1x0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcbiYjNDM7XHQgKiBjb25zdW1lIGEgZmF0YWwtc2lnbmFsIGNhbmNlbGxhdGlvbiBmcm9tIGJwZl9wYXRjaF9pbnNuX2RhdGEoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0cmV0ID0gLUVJTlRSO1xuIFxuIFx0ZW52LVx1MDAzZXZlcmlmaWNhdGlvbl90aW1lID0ga3RpbWVfZ2V0X25zKCkgLSBzdGFydF90aW1lO1xuIFx0cHJpbnRfdmVyaWZpY2F0aW9uX3N0YXRzKGVudik7XG5AQCAtMjE0MjUsNiAmIzQzOzIxNDU2LDggQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gMDtcbiBcbiBcdGVudi1cdTAwM2Vwcm9nID0gX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShlbnYsIGVudi1cdTAwM2Vwcm9nLCBcdTAwMjZyZXQpO1xuJiM0MztcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRyZXQgPSAtRUlOVFI7XG4gXG4gZXJyX3JlbGVhc2VfbWFwczpcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5AQCAtMTQsNiAmIzQzOzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuJiM0MztzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4mIzQzO1x0XHRcdFx0ICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4mIzQzO1x0XHRCUEZfQ0FMTF9SRUwoMiksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xuJiM0MztcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbiYjNDM7XHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4mIzQzO1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4mIzQzO1x0XHQudHlwZV9pZCA9IGVudW1faWQsXG4mIzQzO1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbiYjNDM7XHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuJiM0MztcdFx0Lmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksXG4mIzQzO1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4mIzQzO1x0XHQubGljZW5zZSA9IChfX3U2NClcJiMzNDtHUExcJiMzNDssXG4mIzQzO1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4mIzQzO1x0XHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcbiYjNDM7XHRcdC5sb2dfbGV2ZWwgPSAxLFxuJiM0MztcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXG4mIzQzO1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAocmVsb2NhdGUpIHtcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX2NudCA9IDE7XG4mIzQzO1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuJiM0MztcdH1cbiYjNDM7XHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4mIzQzO1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB2b2lkICpyYXdfYnRmO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4mIzQzO1x0X191MzIgcmF3X2J0Zl9zaXplO1xuJiM0MztcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4mIzQzO1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuJiM0MztcbiYjNDM7XHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9uZXdfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGludF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwmIzM0O2ludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgXCYjMzQ7YWRkX2ludFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCYjMzQ7YWRkX2Z1bmNfcHJvdG9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdG1haW5faWQgPSBidGZfX2FkZF9mdW5jKGJ0ZiwgXCYjMzQ7bWFpbl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QobWFpbl9pZCwgMCwgXCYjMzQ7YWRkX21haW5fZnVuY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwmIzM0O3N1Yl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcJiMzNDthZGRfc3ViX2Z1bmNcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcJiMzNDssIDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwmIzM0O2FkZF9lbnVtXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcJiMzNDt2YWx1ZVwmIzM0OywgMCksIFwmIzM0O2FkZF9lbnVtX3ZhbHVlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwmIzM0OzBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcJiMzNDthZGRfYWNjZXNzX3N0clwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCYjMzQ7cmF3X2J0ZlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcJiMzNDtidGZfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocHJvZ19mZCwgMCwgXCYjMzQ7Y29udHJvbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRwcm9nX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdFxuJiM0MztcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuJiM0MztcdCAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcJiMzNDtwb2lzb25lZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihsb2csIFwmIzM0O2ZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O3BvaXNvbmVkX2xvYWRfbG9nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslc1wmIzM0OywgbG9nKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UocHJvZ19mZCk7XG4mIzQzO1x0Y2xvc2UoYnRmX2ZkKTtcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICYjNDM7MjMxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9iYWRfbG9jYWxfaWQodm9pZClcbiBcbiB2b2lkIHRlc3RfY29yZV9yZWxvY19yYXcodm9pZClcbiB7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtiYWRfbG9jYWxfaWRcJiMzNDspKVxuIFx0XHR0ZXN0X2JhZF9sb2NhbF9pZCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggNjRhYzQ5YWQ2N2U2My4uNWM1NzJkZDcyNWU3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaFwmIzM0O1xuQEAgLTE4OCw2ICYjNDM7MTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4mIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZmcodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZmcpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZSh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmNcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX21hcDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBsb2NrX3ZhbHVlIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlubmVyX2xvY2tfbWFwIHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XG4mIzQzO30gaW5uZXJfbG9ja19tYXBfYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspLCBpbm5lcl9sb2NrX21hcF9iIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbG9ja19tYXApO1xuJiM0Mzt9IGxvY2tfbWFwX29mX21hcHMgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KSA9IHtcbiYjNDM7XHQudmFsdWVzID0ge1xuJiM0MztcdFx0WzBdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcbiYjNDM7XHRcdFsxXSA9IFx1MDAyNmlubmVyX2xvY2tfbWFwX2IsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuJiM0Mzt9IGxvY2tfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNldmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4mIzQzO1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsIFx1MDAyNmN0eCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Y2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDticGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcJiMzNDspXG4mIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfaW5uZXJfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4mIzQzO1x0aW50IGlubmVyX2tleSA9IDE7XG4mIzQzO1x0dm9pZCAqaW5uZXJfbWFwO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4mIzQzO1x0aWYgKCFpbm5lcl9tYXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtkaXN0aW5jdCBvbmUtZWxlbWVudCBpbm5lciBtYXBzIGhhdmUgZGlzdGluY3QgbG9jayBpZGVudGl0aWVzXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YnBmX3NwaW5fdW5sb2NrIG9mIGRpZmZlcmVudCBsb2NrXCYjMzQ7KVxuJiM0MztpbnQgY2FsbGJhY2tfaW5uZXJfbWFwX3ZhbHVlX2xvY2tfaWRlbnRpdHkodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlubmVyX2tleSA9IDA7XG4mIzQzO1x0dm9pZCAqaW5uZXJfbWFwO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4mIzQzO1x0aWYgKCFpbm5lcl9tYXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZ2YWx1ZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7bmVzdGVkIGNhbGxiYWNrIGNhbiBsb2NrIGl0cyBvd24gbWFwIHZhbHVlXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHlfc2FtZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbmluZGV4IDBiODZkOTVhNDEzMzUuLjY5MmE4NDY4ZjNkNzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuQEAgLTUsNiAmIzQzOzUsNTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiBcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZVwmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX0FOWV9BTElHTk1FTlQpXG4mIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XFxcbiYjNDM7XHRyOCA9ICoodTMyICopKHIxICYjNDM7ICVbeGRwX21kX2RhdGFfZW5kXSk7XFxcbiYjNDM7XHRyOSA9ICoodTMyICopKHIxICYjNDM7ICVbeGRwX21kX2RhdGFdKTtcXFxuJiM0MztcdHI2ID0gcjk7XFxcbiYjNDM7XHRyNiAmIzQzOz0gODtcXFxuJiM0MztcdGlmIHI2IFx1MDAzZSByOCBnb3RvIGxfZXhpdF8lPTtcXFxuJiM0MztcdHIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XFxcbiYjNDM7XHRyNCA9IHIwO1xcXG4mIzQzO1x0cjQgXHUwMDI2PSAxNTtcXFxuJiM0MztcdHI3ID0gcjA7XFxcbiYjNDM7XHRyNyBcdTAwM2VcdTAwM2U9IDYzO1xcXG4mIzQzO1x0aWYgcjcgIT0gMCBnb3RvIGxfcGF0aF9iXyU9O1xcXG4mIzQzO1x0cjIgPSByOTtcXFxuJiM0MztcdHIyICYjNDM7PSByNDtcXFxuJiM0MztcdHIzID0gcjI7XFxcbiYjNDM7XHRyMyAmIzQzOz0gNDtcXFxuJiM0MztcdGdvdG8gbF9qb2luXyU9O1xcXG4mIzQzO2xfcGF0aF9iXyU9OiBcXFxuJiM0MztcdHI0IFx1MDAyNj0gMztcXFxuJiM0MztcdHI0ICYjNDM7PSA4O1xcXG4mIzQzO1x0cjIgPSByOTtcXFxuJiM0MztcdHIyICYjNDM7PSByNDtcXFxuJiM0MztcdHIzID0gcjI7XFxcbiYjNDM7XHRyMyAtPSA0O1xcXG4mIzQzO2xfam9pbl8lPTogXFxcbiYjNDM7XHRyNSA9IHIzO1xcXG4mIzQzO1x0cjUgJiM0Mzs9IDQ7XFxcbiYjNDM7XHRpZiByNSBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbiYjNDM7XHRyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1xcXG4mIzQzO2xfZXhpdF8lPTogXFxcbiYjNDM7XHRyMCA9IDA7XFxcbiYjNDM7XHRleGl0O1xcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1fY29uc3QoeGRwX21kX2RhdGEsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGEpKSxcbiYjNDM7XHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3hkcFwmIzM0OylcbiBfX2Rlc2NyaXB0aW9uKFwmIzM0O1hEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMyBwb2ludGVyIGFyaXRobWV0aWMgb24gcGt0X2VuZFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O2NoZWNrX3BrdF9wdHJfaWRzJiMzNDssCiAgICAmIzM0O2JwZl9wYXRjaF9pbnNuX2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O3JlZmluZV9tYXBfbG9va3VwX3ZhbHVlJiMzNDssCiAgICAmIzM0O21hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyYjMzQ7LAogICAgJiMzNDtzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7c2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtwdXNoX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiB2ZXJpZmllciBzdWJzeXN0ZW0gYWNyb3NzIHNldmVyYWwgZmlsZXM6XG4xLiBrZXJuZWwvYnBmL3N0YXRlcy5jOiBBZGRzIGNoZWNrX3BrdF9wdHJfaWRzKCkgYW5kIG1vZGlmaWVzIHJlZ3NhZmUoKSB0byBwcmVzZXJ2ZSBkaXNwbGFjZW1lbnQgd2l0aGluIHBhY2tldCBwb2ludGVyIElEIGNsYXNzZXMgZHVyaW5nIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcuXG4yLiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmM6IEFkZHMgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoKSwgcmVmaW5lcyBzcGlubG9jayBtYXAgVUlEIHRyYWNraW5nIGluIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKCksIGdlbmVyYXRlcyB1bmlxdWUgcmVnaXN0ZXIgSURzIGZvciBzcGlubG9jay1jb250YWluaW5nIG1hcCB2YWx1ZXMgaW4gY2FsbGJhY2sgaGVscGVycyAobWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUsIHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUpLCBhbmQgYWRkcyBmYXRhbCBzaWduYWwgYWJvcnQgY2hlY2tzIGluIGJwZl9jaGVjaygpLlxuMy4ga2VybmVsL2JwZi9jZmcuYzogQWRkcyBmYWxsdGhyb3VnaCB2YWxpZGF0aW9uIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgaW4gcHVzaF9pbnNuKCkuXG40LiBrZXJuZWwvYnBmL2ZpeHVwcy5jOiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQpIHRvIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBhbmQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKCkuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciByZWFjaGFibGUgdmlhIHN5c19icGYoQlBGX1BST0dfTE9BRCkgYW5kIHdhcnJhbnQgZnV6emluZyBmb3Igc3RhdGUgcHJ1bmluZyBjb3JyZWN0bmVzcywgdmVyaWZpZXIgZWRnZSBjYXNlcywgYW5kIGxvY2sgc2FmZXR5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRkMjY2N2FiNWQ4ODA5MTc5ZDI4ZDkzNTEwNTQ4MzRhZDFlYjljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYWQxNGE3ZmJlZDcyZiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ic2VhcmNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3R5cGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJvci1pbmplY3Rpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfbHNtLmgmZ3Q7CkBAIC00NDcsNiAmIzQzOzQ0OCwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCXJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctJmd0O21hcF9wdHI7CiYjNDM7CiYjNDM7CXJldHVybiAhcmVnLSZndDttYXBfdWlkICZhbXA7JmFtcDsgbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xOTI1LDExICYjNDM7MTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCWlmIChtYXAtJmd0O2lubmVyX21hcF9tZXRhKSB7CiAJCXJlZy0mZ3Q7dHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsOwogCQlyZWctJmd0O21hcF9wdHIgPSBtYXAtJmd0O2lubmVyX21hcF9tZXRhOwotCQkvKiB0cmFuc2ZlciByZWcmIzM5O3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW0KLQkJICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuCiYjNDM7CQkvKgomIzQzOwkJICogQ29uY3JldGUgaW5uZXIgbWFwcyBzaGFyZSB0aGUgdmVyaWZpZXItdmlzaWJsZSBpbm5lcl9tYXBfbWV0YS4KJiM0MzsJCSAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZQomIzQzOwkJICogdmVyaWZpY2F0aW9uIG5lZWRzIHRvIGRpc3Rpbmd1aXNoIGNvbmNyZXRlIG1hcCBpbnN0YW5jZXMuIERvaW5nCiYjNDM7CQkgKiB0aGlzIGZvciBldmVyeSBpbm5lciBtYXAgbWFrZXMgc3RhdGUgcHJ1bmluZyB0b28gY29uc2VydmF0aXZlLgomIzQzOwkJICoKJiM0MzsJCSAqIEVhY2ggbWFwIGxvb2t1cCBoYXMgYSB1bmlxdWUgcmVnaXN0ZXIgSUQsIHNvIHVzZSBpdCBhcyB0aGUgVUlEIG9mCiYjNDM7CQkgKiB0aGUgaW5uZXIgbWFwLgogCQkgKi8KIAkJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC0mZ3Q7aW5uZXJfbWFwX21ldGEtJmd0O3JlY29yZCwKLQkJCQkJIEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLKSkKJiM0MzsJCQkJCSBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSyB8CiYjNDM7CQkJCQkgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSkKIAkJCXJlZy0mZ3Q7bWFwX3VpZCA9IHJlZy0mZ3Q7aWQ7CiAJfSBlbHNlIGlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHsKIAkJcmVnLSZndDt0eXBlID0gUFRSX1RPX1hEUF9TT0NLIHwgbWF5YmVfbnVsbDsKQEAgLTEwMDM1LDYgJiM0MzsxMDA1MCw5IEBAIGludCBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqLwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdID0gY2FsbGVyLSZndDtyZWdzW0JQRl9SRUdfM107CkBAIC0xMDEzMSw2ICYjNDM7MTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCV9fbWFya19yZWdfa25vd25femVybygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKTsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gbWFwX3VpZDsKJiM0MzsJaWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSkKJiM0MzsJCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuOwogCiAJLyogdW51c2VkICovCiAJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSk7CkBAIC0xMDI0OSw2ICYjNDM7MTAyNzAsOSBAQCBzdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMjEzNjcsNiAmIzQzOzIxMzkxLDEzIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBicGZfZml4dXBfY2FsbF9hcmdzKGVudik7CiYjNDM7CS8qCiYjNDM7CSAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYQomIzQzOwkgKiByZXF1ZXN0IHRvIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuIERvIG5vdCBsZXQgc3VjaCBmYWxsYmFjawomIzQzOwkgKiBjb25zdW1lIGEgZmF0YWwtc2lnbmFsIGNhbmNlbGxhdGlvbiBmcm9tIGJwZl9wYXRjaF9pbnNuX2RhdGEoKS4KJiM0MzsJICovCiYjNDM7CWlmIChyZXQgPT0gMCAmYW1wOyZhbXA7IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJcmV0ID0gLUVJTlRSOwogCiAJZW52LSZndDt2ZXJpZmljYXRpb25fdGltZSA9IGt0aW1lX2dldF9ucygpIC0gc3RhcnRfdGltZTsKIAlwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTsKQEAgLTIxNDI1LDYgJiM0MzsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCQllbnYtJmd0O3Byb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID0gMDsKIAogCWVudi0mZ3Q7cHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtJmd0O3Byb2csICZhbXA7cmV0KTsKJiM0MzsJaWYgKHJldCA9PSAwICZhbXA7JmFtcDsgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXQgPSAtRUlOVFI7CiAKIGVycl9yZWxlYXNlX21hcHM6CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDEyMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBicGZfbWFwOwomIzQzOwomIzQzO3N0cnVjdCBsb2NrX3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpbm5lcl9sb2NrX21hcCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBsb2NrX3ZhbHVlKTsKJiM0Mzt9IGlubmVyX2xvY2tfbWFwX2EgU0VDKCYjMzQ7Lm1hcHMmIzM0OyksIGlubmVyX2xvY2tfbWFwX2IgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7CiYjNDM7fSBsb2NrX21hcF9vZl9tYXBzIFNFQygmIzM0Oy5tYXBzJiMzNDspID0gewomIzQzOwkudmFsdWVzID0gewomIzQzOwkJWzBdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9hLAomIzQzOwkJWzFdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9iLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfaW5uZXJfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07CiYjNDM7CWludCBpbm5lcl9rZXkgPSAxOwomIzQzOwl2b2lkICppbm5lcl9tYXA7CiYjNDM7CiYjNDM7CWlubmVyX21hcCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtsb2NrX21hcF9vZl9tYXBzLCAmYW1wO2lubmVyX2tleSk7CiYjNDM7CWlmICghaW5uZXJfbWFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbShpbm5lcl9tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCAmYW1wO2N0eCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7ZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllcyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgaW5uZXJfa2V5ID0gMDsKJiM0MzsJdm9pZCAqaW5uZXJfbWFwOwomIzQzOwomIzQzOwlpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7bG9ja19tYXBfb2ZfbWFwcywgJmFtcDtpbm5lcl9rZXkpOwomIzQzOwlpZiAoIWlubmVyX21hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjEzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFJlY29tbWVuZGF0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgU3l6a2FsbGVyIGZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGRpZmYsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZzoKCkZpcnN0LCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGRlZXBlciBkaXZlLiBUaGUgY2hhbmdlcyB0b3VjaCB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllci4gSXQmIzM5O3Mgbm90IGp1c3QgYSBtaW5vciB0d2VhazsgdGhpcyBoaXRzIGNvcmUgbG9naWMgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBga2VybmVsL2JwZi9jZmcuY2AsIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgYGtlcm5lbC9icGYvc3RhdGVzLmNgKS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcuLi4gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5ISBUaGUgQlBGIHZlcmlmaWVyIGlzIGEgbWFzc2l2ZSBhdHRhY2sgc3VyZmFjZSBiZWNhdXNlIGl0JiMzOTtzIHRoZSBzZWN1cml0eSBib3VuZGFyeSBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgdGhlIGBCUEZfUFJPR19MT0FEYCBjb21tYW5kLiBBbnkgd2Vha25lc3MgaGVyZSBjb3VsZCBsZWFkIHRvIGRldmFzdGF0aW5nIGNvbnNlcXVlbmNlcy4KClNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0byBzdGF0ZSBwcnVuaW5nIChgcmVnc2FmZWAsIGBjaGVja19wa3RfcHRyX2lkc2ApLCB3aGljaCBoYW5kbGVzIHRyYWNraW5nIHJlZ2lzdGVyIHN0YXRlczsgdGhpcyBpcyBzdXBlciBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBhIGNvcmUgY29tcG9uZW50IG9mIHRoZSB2ZXJpZmllcuKAmXMgYWJpbGl0eSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIG90aGVyIG1lbW9yeSBlcnJvcnMuIFRoZW4gdGhlcmUmIzM5O3MgbG9jayB0cmFja2luZyBhY3Jvc3MgY2FsbGJhY2tzIChgcmVnX21heV9wb2ludF90b19zcGluX2xvY2tgKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBwcm90ZWN0aW5nIGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBUaGVyZSBhcmUgYWxzbyBuZXcgY2hlY2tzIGZvciBDRkcgc3VicHJvZ3JhbSBib3VuZGFyaWVzLCB3aGljaCBoZWxwcyBwcmV2ZW50IGNvbnRyb2wtZmxvdyBlcnJvcnMgYW5kIHBvdGVudGlhbCBieXBhc3NlcyBvZiB0aGUgdmVyaWZpZXIsIGFuZCBjaGVja3MgZm9yIGZhdGFsIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuIEFsbCBvZiB0aGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBjaGFuZ2VzIHRoYXQgZnJlcXVlbnRseSB1bmNvdmVyIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcy4KCkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXRzIGF0dGFjayBzdXJmYWNlLCB0aGlzIHBhdGNoIHNlcmllcyBkaXJlY3RseSBpbXBhY3RzIFNlY3Rpb24gMzogQ29yZSBTdWJzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgQlBGLCBpdHMgdmVyaWZpZXIsIHN0YXRlIHBydW5pbmcsIENGRyBjaGVja3MsIGxvY2sgdHJhY2tpbmcsIGFuZCBzaWduYWwgYWJvcnQgaGFuZGxpbmcuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgZnV6emluZyB3aXRoIGEgdG9vbCBsaWtlIFN5emthbGxlciBpcyBtb3N0IGVmZmVjdGl2ZS4KCk15IHJlY29tbWVuZGF0aW9uIGlzIGFuIHVuZXF1aXZvY2FsIFlFUyEgV2UgbmVlZCB0byBnZXQgU3l6a2FsbGVyIHBvaW50ZWQgYXQgdGhpcyAqaW1tZWRpYXRlbHkqLiBCZWZvcmUgd2UgZG8gdGhhdCB0aG91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgdGhlIEJQRiBzdWJzeXN0ZW0gb3Igc3BlY2lmaWMgQlBGIGZlYXR1cmVzLiBXZSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSBjeWNsZXMgYnkgZnV6emluZyBjb2RlIHRoYXQgaXNuJiMzOTt0IGJ1aWx0IG9yIGVuYWJsZWQuIEkmIzM5O2xsIHVzZSBjb2Rlc2VhcmNoL2dyZXAgb3IgcmVhZC1maWxlIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgYGtlcm5lbC9icGYvYCBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBUaGVuLCB3aXRoIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBjbGVhciwgbGV0JiMzOTtzIHN0YXJ0IGZ1enppbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTU4PWNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03NS1cdGRlZmF1bHQgeVxua2VybmVsL2JwZi9LY29uZmlnOjc2Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTc3LVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05Mj1jb25maWcgQlBGX0xTTVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy05NC1cdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xua2VybmVsL2JwZi9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN0YWNrbWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzItZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJldXNlcG9ydF9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc3RydWN0X29wcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjItXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJlbG9fY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX3JlbG9jYXRlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0ga21lbV9jYWNoZV9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRtYWJ1Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMDA9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE0My1cbmtlcm5lbC9icGYvY29yZS5jOjE0NDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQ2OD1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0NzEtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDcyOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTI0NzMtaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzAzNj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcbmtlcm5lbC9icGYvY29yZS5jLTMwMzcte1xua2VybmVsL2JwZi9jb3JlLmM6MzAzODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM5LVx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwNjItXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XG5rZXJuZWwvYnBmL2NvcmUuYzozMDYzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwNjQtXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cdTAwM2VrZnVuY19idGZfdGFiKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzODUte1xua2VybmVsL2JwZi9jb3JlLmM6MzM4NjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg3LVx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQyND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDI4LVxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDMwLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ1NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcbmtlcm5lbC9icGYvY29yZS5jLTM0NTYtXG5rZXJuZWwvYnBmL2NvcmUuYzozNDU3OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0NTgtXG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc9Mj1tZW51Y29uZmlnIEJQRl9QUkVMT0FEXG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNC1cdGRlcGVuZHMgb24gQlBGXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzo1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNi1cdCMgVGhlIGRlcGVuZGVuY3kgb24gIUNPTVBJTEVfVEVTVCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIGVuYWJsZWRcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjEtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MjI6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMy1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzY5PXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODA3Olx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDQKCQkJCQkJCW91dHB1dDogNDA5CgkJCQkJCQl0aG91Z2h0czogMTAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGNoYW5nZXMgYW5kIHRoZWlyIGNhbGxlcnMuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYWNyb3NzIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeTogYGJwZl9jaGVja2AsIGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgLCBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHlgIChpbiB2ZXJpZmllci5jKSwgYGNoZWNrX3BrdF9wdHJfaWRzYCwgYGNoZWNrX2lkc2AsIGByZWdzYWZlYCAoaW4gc3RhdGVzLmMpLCBgcHVzaF9pbnNuYCAoaW4gY2ZnLmMpLCBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgLCBhbmQgYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgIChpbiBmaXh1cHMuYykuCgpNeSBtYWluIGVudHJ5IHBvaW50IG9mIGNvbmNlcm4gaXMgYGJwZl9jaGVja2AsIGFzIHRoYXQmIzM5O3MgdGhlIGNvcmUgdmVyaWZpZXIsIGFuZCB0aGUgZmFjdCB0aGF0IGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYW5kIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlYCBhcmUgYWRkZWQgaW4gcmVsYXRpb24gdG8gdGhlIG5ldyBsb2dpYywgc2VlbXMgdGhhdCB0aGUgbWFqb3IgY2hhbmdlIGlzIHRoZSB0cmFja2luZyBvZiBzcGlubG9ja3MgZm9yIGlubmVyIG1hcHMgYW5kIGNhbGxiYWNrcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdGF0ZSB0cmFja2luZyBjaGFuZ2VzIChgY2hlY2tfcGt0X3B0cl9pZHNgLCBgcmVnc2FmZWApLiBUaGUgQ29udHJvbCBGbG93IEdyYXBoIChDRkcpIGNoYW5nZXMgd2l0aCBgcHVzaF9pbnNuYCBhcmUgaW1wb3J0YW50IHRvby4gQW5kIHRoZW4sIHRoZSBpbnN0cnVjdGlvbiBwYXRjaGluZyBhbmQgcmVtb3ZhbCByb3V0aW5lcyAoYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCkgYW5kIHNpZ25hbCBjaGVja3MgYXJlIGNyaXRpY2FsIGZvciBzYWZldHksIG9mIGNvdXJzZS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBub24tc3RhdGljIHN5bWJvbHMgZm9yIGEgcG90ZW50aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gU28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50czogYGJwZl9jaGVja2AsIGByZWdzYWZlYCwgYGNoZWNrX3BrdF9wdHJfaWRzYCwgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGBwdXNoX2luc25gLiBUaGVzZSBzZWVtIHNwZWNpZmljIHRvIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LgoKVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIHNvdXJjZSBmaWxlcyBhcmUgb25seSBidWlsdCB3aGVuIHRoYXQgaXMgZW5hYmxlZC4gVGhlIGJ1aWxkIHJ1bGVzIGNvbmZpcm0gaXQuCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBzcGVjaWZpYyBhbmQgbm90IHViaXF1aXRvdXMuIEkgaGF2ZSBhIGNsZWFuIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcywgc28gbm93IGxldCYjMzk7cyB2ZXJpZnkgbXkgZmluZGluZ3MuIFRoZXNlIHBhdGNoZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgdmVyaWZpZXIgY29tcG9uZW50cywgcHJpbWFyaWx5IGltcGFjdGluZyB0aGUgZm9sbG93aW5nOgotIFN0YXRlIHBydW5pbmcgaW4gYHN0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGByZWdzYWZlYCBhbmQgYGNoZWNrX3BrdF9wdHJfaWRzYCBmb3IgaW1wcm92ZWQgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nLgotIGB2ZXJpZmllci5jYCB1cGRhdGVzIGFkZHJlc3MgaW5uZXIgbWFwIGxvb2t1cCBhbmQgc3BpbmxvY2sgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBzdGF0ZS4gQW5kIGl0IGFsc28gaW5jbHVkZXMgYWRkaXRpb25hbCBmYXRhbCBzaWduYWwgY2hlY2tpbmcgaW4gYGJwZl9jaGVja2AuCi0gYGNmZy5jYCBhZGRzIENGRyB2YWxpZGF0aW9uIHdpdGggYHB1c2hfaW5zbmAuCi0gYGZpeHVwcy5jYCBhZGRzIHByZWVtcHRpb24gYW5kIGZhdGFsIHNpZ25hbCBjaGVja3MgaW4gcGF0Y2hpbmcgYW5kIHJlbW92YWwgcm91dGluZXMuCgpBbGwgb2YgdGhlc2UgZGlyZWN0bHkgaW1wYWN0IEJQRiBwcm9ncmFtIGxvYWRpbmcgY29ycmVjdG5lc3MsIHZlcmlmaWNhdGlvbiwgYW5kIG92ZXJhbGwgc2FmZXR5IGFuZCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGggb2YgQlBGIHByb2dyYW0gbG9hZGluZy4gU28sIG5vdyBpdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGlmIEkgY2FuIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIGJlZm9yZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuIEV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBhbGlnbmVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDtjaGVja19wa3RfcHRyX2lkcyYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDtyZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7cHVzaF9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFjcm9zcyBzZXZlcmFsIGZpbGVzOlxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cbjMuIGtlcm5lbC9icGYvY2ZnLmM6IEFkZHMgZmFsbHRocm91Z2ggdmFsaWRhdGlvbiBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyaWVzIGluIHB1c2hfaW5zbigpLlxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgcmVhY2hhYmxlIHZpYSBzeXNfYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIHN0YXRlIHBydW5pbmcgY29ycmVjdG5lc3MsIHZlcmlmaWVyIGVkZ2UgY2FzZXMsIGFuZCBsb2NrIHNhZmV0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDtjaGVja19wa3RfcHRyX2lkcyYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDtyZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7cHVzaF9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFjcm9zcyBzZXZlcmFsIGZpbGVzOlxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cbjMuIGtlcm5lbC9icGYvY2ZnLmM6IEFkZHMgZmFsbHRocm91Z2ggdmFsaWRhdGlvbiBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyaWVzIGluIHB1c2hfaW5zbigpLlxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgcmVhY2hhYmxlIHZpYSBzeXNfYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIHN0YXRlIHBydW5pbmcgY29ycmVjdG5lc3MsIHZlcmlmaWVyIGVkZ2UgY2FzZXMsIGFuZCBsb2NrIHNhZmV0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxuMS4gQWRkcyBhIHN1YnByb2dyYW0gYm91bmRhcnkgZmFsbHRocm91Z2ggY2hlY2sgaW4gY2ZnLmMgdG8gZW5zdXJlIENPLVJFIHJlbG9jYXRpb25zIGNhbm5vdCB2aW9sYXRlIHN1YnByb2dyYW0gYm91bmRhcmllcy5cbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cbjQuIENvcnJlY3RzIHNwaW5sb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBpbm5lciBtYXAgbG9va3VwcyBhbmQgY2FsbGJhY2sgYXJndW1lbnQgc3RhdGVzIGluIHZlcmlmaWVyLmMuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRkMjY2N2FiNWQ4ODA5MTc5ZDI4ZDkzNTEwNTQ4MzRhZDFlYjljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYWQxNGE3ZmJlZDcyZiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ic2VhcmNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3R5cGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJvci1pbmplY3Rpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfbHNtLmgmZ3Q7CkBAIC00NDcsNiAmIzQzOzQ0OCwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCXJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctJmd0O21hcF9wdHI7CiYjNDM7CiYjNDM7CXJldHVybiAhcmVnLSZndDttYXBfdWlkICZhbXA7JmFtcDsgbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xOTI1LDExICYjNDM7MTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCWlmIChtYXAtJmd0O2lubmVyX21hcF9tZXRhKSB7CiAJCXJlZy0mZ3Q7dHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsOwogCQlyZWctJmd0O21hcF9wdHIgPSBtYXAtJmd0O2lubmVyX21hcF9tZXRhOwotCQkvKiB0cmFuc2ZlciByZWcmIzM5O3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW0KLQkJICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuCiYjNDM7CQkvKgomIzQzOwkJICogQ29uY3JldGUgaW5uZXIgbWFwcyBzaGFyZSB0aGUgdmVyaWZpZXItdmlzaWJsZSBpbm5lcl9tYXBfbWV0YS4KJiM0MzsJCSAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZQomIzQzOwkJICogdmVyaWZpY2F0aW9uIG5lZWRzIHRvIGRpc3Rpbmd1aXNoIGNvbmNyZXRlIG1hcCBpbnN0YW5jZXMuIERvaW5nCiYjNDM7CQkgKiB0aGlzIGZvciBldmVyeSBpbm5lciBtYXAgbWFrZXMgc3RhdGUgcHJ1bmluZyB0b28gY29uc2VydmF0aXZlLgomIzQzOwkJICoKJiM0MzsJCSAqIEVhY2ggbWFwIGxvb2t1cCBoYXMgYSB1bmlxdWUgcmVnaXN0ZXIgSUQsIHNvIHVzZSBpdCBhcyB0aGUgVUlEIG9mCiYjNDM7CQkgKiB0aGUgaW5uZXIgbWFwLgogCQkgKi8KIAkJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC0mZ3Q7aW5uZXJfbWFwX21ldGEtJmd0O3JlY29yZCwKLQkJCQkJIEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLKSkKJiM0MzsJCQkJCSBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSyB8CiYjNDM7CQkJCQkgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSkKIAkJCXJlZy0mZ3Q7bWFwX3VpZCA9IHJlZy0mZ3Q7aWQ7CiAJfSBlbHNlIGlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHsKIAkJcmVnLSZndDt0eXBlID0gUFRSX1RPX1hEUF9TT0NLIHwgbWF5YmVfbnVsbDsKQEAgLTEwMDM1LDYgJiM0MzsxMDA1MCw5IEBAIGludCBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqLwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdID0gY2FsbGVyLSZndDtyZWdzW0JQRl9SRUdfM107CkBAIC0xMDEzMSw2ICYjNDM7MTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCV9fbWFya19yZWdfa25vd25femVybygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKTsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gbWFwX3VpZDsKJiM0MzsJaWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSkKJiM0MzsJCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuOwogCiAJLyogdW51c2VkICovCiAJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSk7CkBAIC0xMDI0OSw2ICYjNDM7MTAyNzAsOSBAQCBzdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMjEzNjcsNiAmIzQzOzIxMzkxLDEzIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBicGZfZml4dXBfY2FsbF9hcmdzKGVudik7CiYjNDM7CS8qCiYjNDM7CSAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYQomIzQzOwkgKiByZXF1ZXN0IHRvIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuIERvIG5vdCBsZXQgc3VjaCBmYWxsYmFjawomIzQzOwkgKiBjb25zdW1lIGEgZmF0YWwtc2lnbmFsIGNhbmNlbGxhdGlvbiBmcm9tIGJwZl9wYXRjaF9pbnNuX2RhdGEoKS4KJiM0MzsJICovCiYjNDM7CWlmIChyZXQgPT0gMCAmYW1wOyZhbXA7IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJcmV0ID0gLUVJTlRSOwogCiAJZW52LSZndDt2ZXJpZmljYXRpb25fdGltZSA9IGt0aW1lX2dldF9ucygpIC0gc3RhcnRfdGltZTsKIAlwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTsKQEAgLTIxNDI1LDYgJiM0MzsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCQllbnYtJmd0O3Byb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID0gMDsKIAogCWVudi0mZ3Q7cHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtJmd0O3Byb2csICZhbXA7cmV0KTsKJiM0MzsJaWYgKHJldCA9PSAwICZhbXA7JmFtcDsgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXQgPSAtRUlOVFI7CiAKIGVycl9yZWxlYXNlX21hcHM6CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDEyMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBicGZfbWFwOwomIzQzOwomIzQzO3N0cnVjdCBsb2NrX3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpbm5lcl9sb2NrX21hcCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBsb2NrX3ZhbHVlKTsKJiM0Mzt9IGlubmVyX2xvY2tfbWFwX2EgU0VDKCYjMzQ7Lm1hcHMmIzM0OyksIGlubmVyX2xvY2tfbWFwX2IgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7CiYjNDM7fSBsb2NrX21hcF9vZl9tYXBzIFNFQygmIzM0Oy5tYXBzJiMzNDspID0gewomIzQzOwkudmFsdWVzID0gewomIzQzOwkJWzBdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9hLAomIzQzOwkJWzFdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9iLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfaW5uZXJfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07CiYjNDM7CWludCBpbm5lcl9rZXkgPSAxOwomIzQzOwl2b2lkICppbm5lcl9tYXA7CiYjNDM7CiYjNDM7CWlubmVyX21hcCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtsb2NrX21hcF9vZl9tYXBzLCAmYW1wO2lubmVyX2tleSk7CiYjNDM7CWlmICghaW5uZXJfbWFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbShpbm5lcl9tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCAmYW1wO2N0eCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7ZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllcyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgaW5uZXJfa2V5ID0gMDsKJiM0MzsJdm9pZCAqaW5uZXJfbWFwOwomIzQzOwomIzQzOwlpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7bG9ja19tYXBfb2ZfbWFwcywgJmFtcDtpbm5lcl9rZXkpOwomIzQzOwlpZiAoIWlubmVyX21hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDI1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIEJQRiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgdG8gY3JhbmsgdXAgdGhlIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBhbmQgcmVsYXRlZCBzdWJzeXN0ZW1zLCB3aGljaCBpcyBnb29kLiBCdXQsIHdlIGhhdmUgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNldmVyYWwgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgdmFyaW91cyBCUEYgY29tcG9uZW50czogY2hhbmdlcyB0byBgYnBmX2lkX3BhaXJgLCBjb250cm9sIGZsb3cgYW5kIGZhbGwtdGhyb3VnaCBjaGVja3MsIHByZWVtcHRpb24gY2hlY2tzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiBJRCBjbGFzc2VzLCBhbmQgc3BpbmxvY2sgdHJhY2tpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZm9jdXMgaXMgb24gZW5oYW5jaW5nIHRoZSB2ZXJpZmllciYjMzk7cyBjb3JyZWN0bmVzcywgY29uY3VycmVuY3ksIGFuZCByb2J1c3RuZXNzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBDTy1SRSByZWxvY2F0aW9ucywgcHJlZW1wdGlvbiwgYW5kIHN0YXRlIHBydW5pbmcuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyBhbnkgb2YgdGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gS01TQU4gaXMgb3VyIGJlc3QgZnJpZW5kIGZvciBjYXRjaGluZyB0aGF0LiBMZXQmIzM5O3MgYW5hbHl6ZSB0aGUgYXJlYXMgb2YgbW9kaWZpY2F0aW9uIG9uZSBieSBvbmUuCgpUaGUgYWRkaXRpb24gb2YgYHBrdF9wdHJfZGVsdGFgIGFuZCBgcGt0X3B0cl9kZWx0YV9zZXRgIHRvIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGhhcyBteSBpbW1lZGlhdGUgYXR0ZW50aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBpbml0aWFsaXplcyBgcGt0X3B0cl9kZWx0YV9zZXRgIHRvIGBmYWxzZWAgaW4gYGNoZWNrX2lkcygpYCBpcyBhIGdvb2Qgc2lnbi4gQnV0LCBJIG11c3QgdmVyaWZ5IHdoZXJlIGBzdHJ1Y3QgYnBmX2lkbWFwYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgZWxzZXdoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0IGlzIGtleSB0byBkZXRlcm1pbmluZyBhbnkgS01TQU4gcmlzay4gSXQgY291bGQgYmUgcG9zc2libGUgdGhlcmUgaXMgYSBjYXNlIGZvciBhIG1vcmUgaW4tZGVwdGggbG9vayB1c2luZyBLTVNBTi4KClRoZSBvdGhlciBjaGFuZ2VzIGxvb2sgbGlrZSB2ZXJpZmllciBpbXByb3ZlbWVudHMgYW5kIGNvcnJlY3RuZXNzIGZpeGVzLiBXaGlsZSB2YWx1YWJsZSwgdGhleSBzZWVtIGxlc3MgbGlrZWx5IHRvIGRpcmVjdGx5IHRyaWdnZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBidXQgbXVzdCBiZSBhc3Nlc3NlZCB0byBjb25maXJtLiBUaGUgY2hlY2tzIGZvciBgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIGFuZCBgY29uZF9yZXNjaGVkKClgIGFyZSBtb3JlIGxpa2VseSB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgYnVncywgb3IgZW5zdXJlIHByb3BlciBiZWhhdmlvciBkdXJpbmcgYXN5bmNocm9ub3VzIGV2ZW50cy4KCkkgdGhpbmsgSSYjMzk7bGwgbGVhbiB0b3dhcmRzIHRoZSBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIG5vdywgYnV0IHdpbGwgbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBgYnBmX2lkbWFwYCBhbmQgYGJwZl9pZF9wYWlyYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaWRtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MzAyPXN0YXRpYyBib29sIHJhbmdlX3dpdGhpbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMzE4LSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzozMTk6c3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMjAte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzU2PXN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzozNTg6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1OS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTctICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQxODpzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTkte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NTI2PXN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUyNy1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1Mjg6XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI5LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTU0Mj1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDM6XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0NC1cdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03Mzc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3Mzg6XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzM5LVx0XHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9ODgyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4ODM6XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxua2VybmVsL2JwZi9zdGF0ZXMuYy04ODQtXHRcdFx0ICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MDU6XHRcdCAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTA2LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LXtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcdHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTAtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0Mzc9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQ2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0NDc6c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQ4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDY1OnN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0NzQ9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NzctXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Nzg6XHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ3OS1cdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBCUEYgZGV2ZWxvcG1lbnQ6CgoqKkV4YW1pbmluZyBgY2hlY2tfaWRzYCBhbmQgYGNoZWNrX3BrdF9wdHJfaWRzYCoqCgpSaWdodCwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgdGFzayBhdCBoYW5kIGlzIGNsZWFybHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyBJRCBjaGVja3MsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgYGNoZWNrX2lkc2AgYW5kIGBjaGVja19wa3RfcHRyX2lkc2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yaywgdGhlaXIgcHVycG9zZSwgYW5kIHdoYXQgZGF0YSB0aGV5JiMzOTtyZSBtYW5pcHVsYXRpbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgY29kZSB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBhbmQgdGhlIGxvZ2ljIGludm9sdmVkIGluIHZhbGlkYXRpbmcgdGhlc2UgSURzIGFuZCBwYWNrZXQgcG9pbnRlciBJRHMuIFRoaXMgbWlnaHQgaW52b2x2ZSBsb29raW5nIGF0IHRoZWlyIGNhbGwgc2l0ZXMgYW5kIGRlcGVuZGVuY2llcyBhcyB3ZWxsLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbnkgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbiBlZmZvcnRzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0IG9mIHRoZSBCUEYgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0ICogdGhhdC5cbiAzMTY6XHQgKiBTbyB3ZSBsb29rIHRocm91Z2ggb3VyIGlkbWFwIHRvIHNlZSBpZiB0aGlzIG9sZCBpZCBoYXMgYmVlbiBzZWVuIGJlZm9yZS4gIElmXG4gMzE3Olx0ICogc28sIHdlIHJlcXVpcmUgdGhlIG5ldyBpZCB0byBtYXRjaDsgb3RoZXJ3aXNlLCB3ZSBhZGQgdGhlIGlkIHBhaXIgdG8gdGhlIG1hcC5cbiAzMTg6XHQgKi9cbiAzMTk6XHRzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gMzIwOlx0e1xuIDMyMTpcdFx0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cdTAwM2VtYXA7XG4gMzIyOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiAzMjM6XHRcbiAzMjQ6XHRcdC8qIGVpdGhlciBib3RoIElEcyBzaG91bGQgYmUgc2V0IG9yIGJvdGggc2hvdWxkIGJlIHplcm8gKi9cbiAzMjU6XHRcdGlmICghIW9sZF9pZCAhPSAhIWN1cl9pZClcbiAzMjY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKG9sZF9pZCA9PSAwKSAvKiBjdXJfaWQgPT0gMCBhcyB3ZWxsICovXG4gMzI5Olx0XHRcdHJldHVybiB0cnVlO1xuIDMzMDpcdFxuIDMzMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuIDMzMjpcdFx0XHRpZiAobWFwW2ldLm9sZCA9PSBvbGRfaWQpXG4gMzMzOlx0XHRcdFx0cmV0dXJuIG1hcFtpXS5jdXIgPT0gY3VyX2lkO1xuIDMzNDpcdFx0XHRpZiAobWFwW2ldLmN1ciA9PSBjdXJfaWQpXG4gMzM1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFxuIDMzODpcdFx0LyogUmVhY2hlZCB0aGUgZW5kIG9mIGtub3duIG1hcHBpbmdzOyBoYXZlbiYjMzk7dCBzZWVuIHRoaXMgaWQgYmVmb3JlICovXG4gMzM5Olx0XHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiAzNDA6XHRcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIDM0MTpcdFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4gMzQyOlx0XHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XG4gMzQzOlx0XHRcdGlkbWFwLVx1MDAzZWNudCYjNDM7JiM0Mzs7XG4gMzQ0Olx0XHRcdHJldHVybiB0cnVlO1xuIDM0NTpcdFx0fVxuIDM0NjpcdFxuIDM0NzpcdFx0LypcbiAzNDg6XHRcdCAqIGlkbWFwIHNsb3RzIGFyZSBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGFuZCBzdGFjayBzbG90cy5cbiAzNDk6XHRcdCAqIFNpbmNlIHJlZmVyZW5jZWQgZHlucHRycyBhY3F1aXJlIGludGVybWVkaWF0ZSByZWZlcmVuY2VzIHRoYXQgZG9cbiAzNTA6XHRcdCAqIG5vdCBsaXZlIGluIGVpdGhlciwgc28gdGhlIG1hcCBjYW4gYmUgZXhoYXVzdGVkLiBTaW5jZSBpdCBpcyB1bmxpa2VseSxcbiAzNTE6XHRcdCAqIGZhaWwgdGhlIHZlcmlmaWNhdGlvbiBieSB0cmVhdGluZyB0aGUgc3RhdGVzIGFzIG5vdCBlcXVpdmFsZW50LlxuIDM1MjpcdFx0ICovXG4gMzUzOlx0XHRyZXR1cm4gZmFsc2U7XG4gMzU0Olx0fVxuIDM1NTpcdFxuIDM1NjpcdHN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXG4gMzU3Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmN1cixcbiAzNTg6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiAzNTk6XHR7XG4gMzYwOlx0XHRzdHJ1Y3QgYnBmX2lkX3BhaXIgKm1hcCA9IGlkbWFwLVx1MDAzZW1hcDtcbiAzNjE6XHRcdHM2NCBkZWx0YTtcbiAzNjI6XHRcdHVuc2lnbmVkIGludCBpO1xuIDM2MzpcdFxuIDM2NDpcdFx0aWYgKCFjaGVja19pZHMob2xkLVx1MDAzZWlkLCBjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiAzNjU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDM2NjpcdFx0aWYgKCFvbGQtXHUwMDNlaWQpXG4gMzY3Olx0XHRcdHJldHVybiB0cnVlO1xuIDM2ODpcdFxuIDM2OTpcdFx0LypcbiAzNzA6XHRcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXG4gMzcxOlx0XHQgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLlxuIDM3MjpcdFx0ICogUGFja2V0IHBvaW50ZXIgb2Zmc2V0cyBhcmUgYm91bmRlZCBieSBCUEZfTUFYX1ZBUl9PRkYsIHNvIHRoZSBkZWx0YVxuIDM3MzpcdFx0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cbiAzNzQ6XHRcdCAqL1xuIDM3NTpcdFx0ZGVsdGEgPSAoczY0KShjdXItXHUwMDNlcjY0LmJhc2UgLSBvbGQtXHUwMDNlcjY0LmJhc2UpO1xuIDM3NjpcdFx0aWYgKGRlbHRhIFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFx1MDAzZSBTMzJfTUFYKVxuIDM3NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzc4Olx0XG4gMzc5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZG1hcC1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4gMzgwOlx0XHRcdGlmIChtYXBbaV0ub2xkICE9IG9sZC1cdTAwM2VpZClcbiAzODE6XHRcdFx0XHRjb250aW51ZTtcbiAzODI6XHRcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbiAzODM6XHRcdFx0XHRtYXBbaV0ucGt0X3B0cl9kZWx0YSA9IGRlbHRhO1xuIDM4NDpcdFx0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XG4gMzg1Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMzg2Olx0XHRcdH1cbiAzODc6XHRcdFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xuIDM4ODpcdFx0fVxuIDM4OTpcdFxuIDM5MDpcdFx0cmV0dXJuIGZhbHNlO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHQvKlxuIDM5NDpcdCAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXG4gMzk1Olx0ICpcbiAzOTY6XHQgKiBXaGVuIG9sZF9pZCA9PSAwLCB0aGUgb2xkIHJlZ2lzdGVyIGlzIGluZGVwZW5kZW50IC0gbm90IGxpbmtlZCB0byBhbnlcbiAzOTc6XHQgKiBvdGhlciByZWdpc3Rlci4gQW55IGxpbmtpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgb25seSBhZGRzIGNvbnN0cmFpbnRzLFxuIDM5ODpcdCAqIG1ha2luZyBpdCBtb3JlIHJlc3RyaWN0aXZlLiBTaW5jZSB0aGUgb2xkIHN0YXRlIGRpZG4mIzM5O3QgcmVseSBvbiBhbnkgSURcbiAzOTk6XHQgKiByZWxhdGlvbnNoaXBzIGZvciB0aGlzIHJlZ2lzdGVyLCBpdCYjMzk7cyBhbHdheXMgc2FmZSB0byBhY2NlcHQgY3VyIHJlZ2FyZGxlc3NcbiA0MDA6XHQgKiBvZiBpdHMgSUQuIEhlbmNlLCByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseS5cbiA0MDE6XHQgKlxuIDQwMjpcdCAqIFdoZW4gb2xkX2lkICE9IDAgYnV0IGN1cl9pZCA9PSAwLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGRpZmZlcmVudFxuIDQwMzpcdCAqIGluZGVwZW5kZW50IHJlZ2lzdGVycyBpbiBjdXIgZG9uJiMzOTt0IGluY29ycmVjdGx5IHNhdGlzZnkgdGhlIElEIG1hdGNoaW5nXG4gNDA0Olx0ICogcmVxdWlyZW1lbnRzIG9mIGxpbmtlZCByZWdpc3RlcnMgaW4gb2xkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqRGlnZ2luZyBpbnRvIElEIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgbWFuYWdpbmcgcGFja2V0IElEcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGNoZWNrX2lkc2AgZnVuY3Rpb24gYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgaWRtYXBgIHN0cnVjdHVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgYG1hcFtpZG1hcC0mZ3Q7Y250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO2Agd2hlbiBhZGRpbmcgYSBuZXcgSUQgcGFpciBhdCBgaWRtYXAtJmd0O2NudGAgaXMgdGhlIGtleSB0aGluZyB0byBmb2N1cyBvbiBoZXJlLiBJdOKAmXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgYnVnIHBvdGVudGlhbC4KCk5vdywgSSBhbHNvIG5lZWQgdG8gdHJhY2sgdGhlIGBpZHN0YWNrYCBvcGVyYXRpb25zIHdpdGhpbiBgdmVyaWZpZXIuY2AuIFB1c2hpbmcgYW5kIHBvcHBpbmcgZnJvbSB0aGUgYGlkc3RhY2tgIGlzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseSwgc28gSSBuZWVkIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUgbG9naWMuIExldCYjMzk7cyBzdGFydCBieSBjbG9zZWx5IGV4YW1pbmluZyB0aGUgYGlkc3RhY2tfcHVzaGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGxpZSB3aXRoIElEIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk0NDA6XHRcbjk0NDE6XHRcdGVyciA9IF9fcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudi1cdTAwM2VjdXJfc3RhdGUsIGlkKTtcbjk0NDI6XHRcdGlmICghZXJyKVxuOTQ0MzpcdFx0XHRicGZfZGlhZ19yZWNvcmRfcmVmX3JlbGVhc2UoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGlkKTtcbjk0NDQ6XHRcdHJldHVybiBlcnI7XG45NDQ1Olx0fVxuOTQ0NjpcdFxuOTQ0NzpcdHN0YXRpYyBpbnQgaWRzdGFja19wdXNoKHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLCB1MzIgaWQpXG45NDQ4Olx0e1xuOTQ0OTpcdFx0aW50IGk7XG45NDUwOlx0XG45NDUxOlx0XHRpZiAoIWlkKVxuOTQ1MjpcdFx0XHRyZXR1cm4gMDtcbjk0NTM6XHRcbjk0NTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspXG45NDU1Olx0XHRcdGlmIChpZG1hcC1cdTAwM2VtYXBbaV0ub2xkID09IGlkKVxuOTQ1NjpcdFx0XHRcdHJldHVybiAwO1xuOTQ1NzpcdFxuOTQ1ODpcdFx0aWYgKFdBUk5fT05fT05DRShpZG1hcC1cdTAwM2VjbnQgXHUwMDNlPSBCUEZfSURfTUFQX1NJWkUpKVxuOTQ1OTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjk0NjA6XHRcbjk0NjE6XHRcdGlkbWFwLVx1MDAzZW1hcFtpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7XS5vbGQgPSBpZDtcbjk0NjI6XHRcdHJldHVybiAwO1xuOTQ2MzpcdH1cbjk0NjQ6XHRcbjk0NjU6XHRzdGF0aWMgaW50IGlkc3RhY2tfcG9wKHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuOTQ2NjpcdHtcbjk0Njc6XHRcdGlmICghaWRtYXAtXHUwMDNlY250KVxuOTQ2ODpcdFx0XHRyZXR1cm4gMDtcbjk0Njk6XHRcbjk0NzA6XHRcdHJldHVybiBpZG1hcC1cdTAwM2VtYXBbLS1pZG1hcC1cdTAwM2VjbnRdLm9sZDtcbjk0NzE6XHR9XG45NDcyOlx0XG45NDczOlx0LyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXG45NDc0Olx0c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG45NDc1Olx0e1xuOTQ3NjpcdFx0dTMyIG1hc2sgPSAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXHUwMDNjXHUwMDNjIFNUQUNLX0RZTlBUUik7XG45NDc3Olx0XHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuOTQ3ODpcdFx0c3RydWN0IGJwZl9pZG1hcCAqaWRzdGFjayA9IFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoO1xuOTQ3OTpcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY3CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBJbXBhY3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgZm9jdXNlZCBvbiBgaWRzdGFja19wdXNoYCBhbmQgYGlkc3RhY2tfcG9wYCwgdmVyaWZ5aW5nIHRoZXkgb25seSB0b3VjaCBgaWRtYXAtJmd0O2NudGAgYW5kIGBvbGRgLiBUaGF04oCZcyBhIGNsZWFuIHN0YXJ0LgoKVGhlbiwgSSBtZXRpY3Vsb3VzbHkgZXhhbWluZWQgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBwYXRjaDogYGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKWAsIGBwdXNoX2luc24oKWAsIGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncygpYCwgYHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSgpYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoKWAsIGFuZCBgYnBmX2NoZWNrKClgLiBFYWNoIGNoYW5nZSB3YXMgY2FyZWZ1bGx5IHNjcnV0aW5pemVkLgoKVGhlIGtleSB3YXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBJIHdlbnQgdGhyb3VnaCBhIHJpZ29yb3VzIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogRG9lcyB0aGUgcGF0Y2ggdG91Y2ggYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLCBubyBzdWNoIGNoYW5nZXMgaGVyZS4gTm8gYGNvcHlfdG9fdXNlcmAsIG5vIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RscyBhcmUgYWZmZWN0ZWQuIFdlJiMzOTtyZSBpbiB0aGUgY2xlYXIuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uIEkgY2hlY2tlZCBhbGwgdGhlIHZhcmlhYmxlcyB1c2VkIChsaWtlIGBzdWJwcm9nYCwgYGRlbHRhYCwgYW5kIGBpYCkgYW5kIHZlcmlmaWVkIHRoZXkmIzM5O3JlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCB0aGUgZGVsdGEgY2FsY3VsYXRpb24gYW5kIHRoZSB1c2Ugb2YgYHBrdF9wdHJfZGVsdGFgIHdpdGhpbiBgY2hlY2tfcGt0X3B0cl9pZHNgIGFyZSBzb3VuZC4gVGhlIGBwa3RfcHRyX2RlbHRhX3NldGAgYm9vbGVhbiBwcmV2ZW50cyBhIHJlYWQgb2YgdGhlIGRlbHRhIHByaW9yIHRvIGl0IGJlaW5nIHNldC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBBcmUgdGhlcmUgYW55IG5ldyBhbGxvY2F0aW9ucyB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBhbmQgcmVhZCBsYXRlcj8gTm8gbmV3IGFsbG9jYXRpb25zLiBUaGUgZmllbGRzIGFkZGVkIHRvIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGFyZSBwcm9wZXJseSBzZXQuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBhY2Nlc3NlczoqKiBDb3VsZCB0aGUgY2hhbmdlcyBhZmZlY3QgYm91bmRzIGNoZWNrcyBhbmQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSByZWFkcz8gTm90IGluIHRoaXMgY2FzZS4gVGhlIGNoYW5nZXMgKnRpZ2h0ZW4qIEJQRiB2ZXJpZmllciBjaGVja3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyDigJMgcHJldmVudGluZyBmYWxsdGhyb3VnaCwgaW5jb3JyZWN0IHBhY2tldCBwb2ludGVyIHN0YXRlLCBwcmVzZXJ2aW5nIHNwaW5sb2NrIGlkZW50aXRpZXMsIGFuZCBncmFjZWZ1bCBjYW5jZWxsYXRpb24uIFRoaXMgbGVhZHMgdG8gKmZld2VyKiBidWdzLCBub3QgbW9yZS4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgdmVyaWZpZXIgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWxseSBhYm91dCBsb2dpYyBhbmQgYnl0ZWNvZGUgdmVyaWZpY2F0aW9uLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgbGlrZWx5IGxvZ2ljYWwgdmVyaWZpY2F0aW9uIGVycm9ycywgb3IgbWVtb3J5IHNhZmV0eSBidWdzICh3aGljaCBLQVNBTiB3b3VsZCBjYXRjaCkuIFNvLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpOb3cgSSBuZWVkIHRvIHdyaXRlIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgcmF0aW9uYWxlIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGludGVybmFsIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW1wcm92ZW1lbnRzIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXM6XG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXG4zLiBFbmhhbmNlcyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nIGluIHN0YXRlcy5jIGZvciBwYWNrZXQgcG9pbnRlcnMgYnkgdHJhY2tpbmcgaW50cmEtY2xhc3MgcG9pbnRlciBkaXNwbGFjZW1lbnQgKHBrdF9wdHJfZGVsdGEgLyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpLlxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1vZGlmeSBrZXJuZWwgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuIEFsbCBuZXdseSBhZGRlZCBzdHJ1Y3QgZmllbGRzIChzdWNoIGFzIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvZ2ljIHJlZ3Jlc3Npb25zIChlLmcuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHZlcmlmaWVyIHN0YXRlIGJ1Z3MpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTi92ZXJpZmllciB0ZXN0IHN1aXRlcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxuMS4gQWRkcyBhIHN1YnByb2dyYW0gYm91bmRhcnkgZmFsbHRocm91Z2ggY2hlY2sgaW4gY2ZnLmMgdG8gZW5zdXJlIENPLVJFIHJlbG9jYXRpb25zIGNhbm5vdCB2aW9sYXRlIHN1YnByb2dyYW0gYm91bmRhcmllcy5cbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cbjQuIENvcnJlY3RzIHNwaW5sb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBpbm5lciBtYXAgbG9va3VwcyBhbmQgY2FsbGJhY2sgYXJndW1lbnQgc3RhdGVzIGluIHZlcmlmaWVyLmMuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo0OS44MjgxODYzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDE1NTYwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJjaGVja19wa3RfcHRyX2lkc1wiLFxuICAgIFwiYnBmX3BhdGNoX2luc25fZGF0YVwiLFxuICAgIFwidmVyaWZpZXJfcmVtb3ZlX2luc25zXCIsXG4gICAgXCJyZWZpbmVfbWFwX2xvb2t1cF92YWx1ZVwiLFxuICAgIFwibWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzXCIsXG4gICAgXCJzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVcIixcbiAgICBcInNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVcIixcbiAgICBcInB1c2hfaW5zblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgaW50ZXJuYWwgY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbXByb3ZlbWVudHMgdG8gdGhlIEJQRiB2ZXJpZmllciBhbmQgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIHBhc3NlczpcXG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxcbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxcbjMuIEVuaGFuY2VzIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcgaW4gc3RhdGVzLmMgZm9yIHBhY2tldCBwb2ludGVycyBieSB0cmFja2luZyBpbnRyYS1jbGFzcyBwb2ludGVyIGRpc3BsYWNlbWVudCAocGt0X3B0cl9kZWx0YSAvIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikuXFxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbW9kaWZ5IGtlcm5lbCBkYXRhIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeS4gQWxsIG5ld2x5IGFkZGVkIHN0cnVjdCBmaWVsZHMgKHN1Y2ggYXMgcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9naWMgcmVncmVzc2lvbnMgKGUuZy4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdmVyaWZpZXIgc3RhdGUgYnVncykgZmFsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOL3ZlcmlmaWVyIHRlc3Qgc3VpdGVzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIHZlcmlmaWVyIHN1YnN5c3RlbSBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczpcXG4xLiBrZXJuZWwvYnBmL3N0YXRlcy5jOiBBZGRzIGNoZWNrX3BrdF9wdHJfaWRzKCkgYW5kIG1vZGlmaWVzIHJlZ3NhZmUoKSB0byBwcmVzZXJ2ZSBkaXNwbGFjZW1lbnQgd2l0aGluIHBhY2tldCBwb2ludGVyIElEIGNsYXNzZXMgZHVyaW5nIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcuXFxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cXG4zLiBrZXJuZWwvYnBmL2NmZy5jOiBBZGRzIGZhbGx0aHJvdWdoIHZhbGlkYXRpb24gYWNyb3NzIHN1YnByb2dyYW0gYm91bmRhcmllcyBpbiBwdXNoX2luc24oKS5cXG40LiBrZXJuZWwvYnBmL2ZpeHVwcy5jOiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQpIHRvIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBhbmQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKCkuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHJlYWNoYWJsZSB2aWEgc3lzX2JwZihCUEZfUFJPR19MT0FEKSBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBzdGF0ZSBwcnVuaW5nIGNvcnJlY3RuZXNzLCB2ZXJpZmllciBlZGdlIGNhc2VzLCBhbmQgbG9jayBzYWZldHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjQ5LjgyODE5NTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTg1NTA0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNGQyNjY3YWI1ZDg4MDkxNzlkMjhkOTM1MTA1NDgzNGFkMWViOWNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlIHtcXG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcXG4gXFx0dTMyIG9sZDtcXG4gXFx0dTMyIGN1cjtcXG4rXFx0czMyIHBrdF9wdHJfZGVsdGE7XFxuK1xcdGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2lkbWFwIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcXG5pbmRleCA4NDJjN2QxZWFiY2NjLi5lM2M5MDQzMjhlZGUwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXFxuQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtIHtcXG4gICovXFxuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7XFxuIFxcdGludCAqaW5zbl9zdGFjayA9IGVudi1cXHUwMDNlY2ZnLmluc25fc3RhY2s7XFxuIFxcdGludCAqaW5zbl9zdGF0ZSA9IGVudi1cXHUwMDNlY2ZnLmluc25fc3RhdGU7XFxuIFxcbkBAIC0xMjEsNiArMTIyLDI2IEBAIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBjaGVja19zdWJwcm9ncygpIHByZXZlbnRzIGNvbnRyb2wgZmxvdyBmcm9tIGZhbGxpbmcgdGhyb3VnaCBhXFxuK1xcdCAqIHN1YnByb2dyYW0gYm91bmRhcnksIGJ1dCBydW5zIGJlZm9yZSBDTy1SRSByZWxvY2F0aW9ucyBjYW4gcmV3cml0ZSBhblxcbitcXHQgKiBpbnN0cnVjdGlvbi4gUmVlc3RhYmxpc2ggdGhlIGludmFyaWFudCBvbiB0aGUgZmluYWwgaW5zdHJ1Y3Rpb24gc3RyZWFtXFxuK1xcdCAqIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIENGRyB1c2VkIGJ5IGxhdGVyIHBlci1zdWJwcm9ncmFtIHBhc3Nlcy5cXG4rXFx0ICovXFxuK1xcdGlmIChlID09IEZBTExUSFJPVUdIKSB7XFxuK1xcdFxcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcXG4rXFx0XFx0aWYgKHcgXFx1MDAzYyBzdWJwcm9nLVxcdTAwM2VzdGFydCB8fCB3IFxcdTAwM2U9IChzdWJwcm9nICsgMSktXFx1MDAzZXN0YXJ0KSB7XFxuK1xcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCB0LCBcXFwiJWQ6IFxcXCIsIHQpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gJWQgdG8gJWRcXFxcblxcXCIsIHQsIHcpO1xcbitcXHRcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4rXFx0XFx0XFx0XFx0ZW52LCB0LCBcXFwiZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIktlZXAgZmFsbC10aHJvdWdoIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIGN1cnJlbnQgc3VicHJvZ3JhbS5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiSW5zdHJ1Y3Rpb24gJWQgZmFsbHMgdGhyb3VnaCB0byBpbnN0cnVjdGlvbiAlZCBvdXRzaWRlIGl0cyBzdWJwcm9ncmFtLlxcXCIsXFxuK1xcdFxcdFxcdFxcdHQsIHcpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAoZSA9PSBCUkFOQ0gpIHtcXG4gXFx0XFx0LyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovXFxuIFxcdFxcdG1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5pbmRleCA1MmQzY2VjMzM2NzI3Li45NDAxZmZmY2VkZmQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ic2VhcmNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImRpc2FzbS5oXFxcIlxcbiBcXG5AQCAtMzA2LDEyICszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFNvbWUgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIHBhc3NlcyByZXF1aXJlIGFuXFxuKyAqIE8ocHJvZy1cXHUwMDNlbGVuKSBvcGVyYXRpb24gcGVyIGluc3RydWN0aW9uLiBLZWVwIHRoZWlyIHNoYXJlZCBwcmltaXRpdmVzXFxuKyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS5cXG4rICovXFxuK3N0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcXG4re1xcbitcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbiBcXHRpZiAobGVuIFxcdTAwM2UgMSkge1xcbiBcXHRcXHRuZXdfZGF0YSA9IHZyZWFsbG9jKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgIGFycmF5X3NpemUoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gKyBsZW4gLSAxLFxcbkBAIC01MjMsNiArNTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcXG4gXFx0dW5zaWduZWQgaW50IG9yaWdfcHJvZ19sZW4gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbiBcXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSlcXG4gXFx0XFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XFxuIFxcbkBAIC0yNjY2LDQgKzI2ODYsMyBAQCBpbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5AQCAtMzM5LDYgKzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFx0aWYgKGlkbWFwLVxcdTAwM2VjbnQgXFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcXG4gXFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLm9sZCA9IG9sZF9pZDtcXG4gXFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLmN1ciA9IGN1cl9pZDtcXG4rXFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XFxuIFxcdFxcdGlkbWFwLVxcdTAwM2VjbnQrKztcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG5AQCAtMzUyLDYgKzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmN1cixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cXHUwMDNlbWFwO1xcbitcXHRzNjQgZGVsdGE7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0aWYgKCFjaGVja19pZHMob2xkLVxcdTAwM2VpZCwgY3VyLVxcdTAwM2VpZCwgaWRtYXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghb2xkLVxcdTAwM2VpZClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZVxcbitcXHQgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLlxcbitcXHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXFxuK1xcdCAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuXFxuK1xcdCAqL1xcbitcXHRkZWx0YSA9IChzNjQpKGN1ci1cXHUwMDNlcjY0LmJhc2UgLSBvbGQtXFx1MDAzZXI2NC5iYXNlKTtcXG4rXFx0aWYgKGRlbHRhIFxcdTAwM2MgUzMyX01JTiB8fCBkZWx0YSBcXHUwMDNlIFMzMl9NQVgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpZG1hcC1cXHUwMDNlY250OyBpKyspIHtcXG4rXFx0XFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7XFxuK1xcdFxcdFxcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XFxuK1xcdFxcdFxcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiBtYXBbaV0ucGt0X3B0cl9kZWx0YSA9PSBkZWx0YTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDb21wYXJlIHNjYWxhciByZWdpc3RlciBJRHMgZm9yIHN0YXRlIGVxdWl2YWxlbmNlLlxcbiAgKlxcbkBAIC02MzIsOCArNjcwLDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4gXFx0XFx0fSBlbHNlIGlmIChyb2xkLVxcdTAwM2VyYW5nZSBcXHUwMDNlIHJjdXItXFx1MDAzZXJhbmdlKSB7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHQvKiBpZCByZWxhdGlvbnMgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cXG4tXFx0XFx0aWYgKCFjaGVja19pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCkpXFxuK1xcdFxcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXFxuK1xcdFxcdGlmICghY2hlY2tfcGt0X3B0cl9pZHMocm9sZCwgcmN1ciwgaWRtYXApKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdC8qIG5ldyB2YWwgbXVzdCBzYXRpc2Z5IG9sZCB2YWwga25vd2xlZGdlICovXFxuIFxcdFxcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMWMzMDM5ZjNmYzMyMy4uYWQxNGE3ZmJlZDcyZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnNlYXJjaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jdHlwZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyb3ItaW5qZWN0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbHNtLmhcXHUwMDNlXFxuQEAgLTQ0Nyw2ICs0NDgsMTMgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gXFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4rXFxuK1xcdHJldHVybiAhcmVnLVxcdTAwM2VtYXBfdWlkIFxcdTAwMjZcXHUwMDI2IG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKVxcbiB7XFxuIFxcdHJldHVybiB0eXBlIFxcdTAwMjYgTUVNX1JET05MWTtcXG5AQCAtMTkyNSwxMSArMTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiBcXHRpZiAobWFwLVxcdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xcbiBcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBDT05TVF9QVFJfVE9fTUFQIHwgbWF5YmVfbnVsbDtcXG4gXFx0XFx0cmVnLVxcdTAwM2VtYXBfcHRyID0gbWFwLVxcdTAwM2Vpbm5lcl9tYXBfbWV0YTtcXG4tXFx0XFx0LyogdHJhbnNmZXIgcmVnJ3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW1cXG4tXFx0XFx0ICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXFxuK1xcdFxcdCAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZVxcbitcXHRcXHQgKiB2ZXJpZmljYXRpb24gbmVlZHMgdG8gZGlzdGluZ3Vpc2ggY29uY3JldGUgbWFwIGluc3RhbmNlcy4gRG9pbmdcXG4rXFx0XFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogRWFjaCBtYXAgbG9va3VwIGhhcyBhIHVuaXF1ZSByZWdpc3RlciBJRCwgc28gdXNlIGl0IGFzIHRoZSBVSUQgb2ZcXG4rXFx0XFx0ICogdGhlIGlubmVyIG1hcC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXFx1MDAzZWlubmVyX21hcF9tZXRhLVxcdTAwM2VyZWNvcmQsXFxuLVxcdFxcdFxcdFxcdFxcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSykpXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spKVxcbiBcXHRcXHRcXHRyZWctXFx1MDAzZW1hcF91aWQgPSByZWctXFx1MDAzZWlkO1xcbiBcXHR9IGVsc2UgaWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUCkge1xcbiBcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xcbkBAIC0xMDAzNSw2ICsxMDA1MCw5IEBAIGludCBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xcbiBcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVxcdTAwM2VyZWdzW0JQRl9SRUdfMV0ubWFwX3VpZDtcXG4rXFx0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxcbitcXHRcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIFxcbiBcXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18zXTtcXG5AQCAtMTAxMzEsNiArMTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXFxuK1xcdFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXFx1MDAzZWlkX2dlbjtcXG4gXFxuIFxcdC8qIHVudXNlZCAqL1xcbiBcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xcbkBAIC0xMDI0OSw2ICsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXFxuK1xcdFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXFx1MDAzZWlkX2dlbjtcXG4gXFxuIFxcdC8qIHVudXNlZCAqL1xcbiBcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xcbkBAIC0yMTM2Nyw2ICsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4gXFxuIFxcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xcbitcXHQvKlxcbitcXHQgKiBKSVQgY29uc3RhbnQgYmxpbmRpbmcgdHJlYXRzIGluc3RydWN0aW9uIHBhdGNoaW5nIGZhaWx1cmVzIGFzIGFcXG4rXFx0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcXG4rXFx0ICogY29uc3VtZSBhIGZhdGFsLXNpZ25hbCBjYW5jZWxsYXRpb24gZnJvbSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldCA9IC1FSU5UUjtcXG4gXFxuIFxcdGVudi1cXHUwMDNldmVyaWZpY2F0aW9uX3RpbWUgPSBrdGltZV9nZXRfbnMoKSAtIHN0YXJ0X3RpbWU7XFxuIFxcdHByaW50X3ZlcmlmaWNhdGlvbl9zdGF0cyhlbnYpO1xcbkBAIC0yMTQyNSw2ICsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gMDtcXG4gXFxuIFxcdGVudi1cXHUwMDNlcHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtXFx1MDAzZXByb2csIFxcdTAwMjZyZXQpO1xcbitcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldCA9IC1FSU5UUjtcXG4gXFxuIGVycl9yZWxlYXNlX21hcHM6XFxuIFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xcbkBAIC0xNCw2ICsxNCwxMTcgQEBcXG4gXFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xcbiBcXG4rc3RhdGljIGludCBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGludCBidGZfZmQsIGludCBtYWluX2lkLCBpbnQgc3ViX2lkLFxcbitcXHRcXHRcXHRcXHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuK1xcdFxcdEJQRl9DQUxMX1JFTCgyKSxcXG4rXFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxcbitcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xcbitcXHRcXHR7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LFxcbitcXHRcXHR7IC5pbnNuX29mZiA9IDMsIC50eXBlX2lkID0gc3ViX2lkIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XFxuK1xcdFxcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcXG4rXFx0XFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxcbitcXHRcXHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcXG4rXFx0XFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxcbitcXHR9O1xcbitcXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xcbitcXHRcXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxcbitcXHRcXHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcXG4rXFx0XFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxcbitcXHRcXHQubGljZW5zZSA9IChfX3U2NClcXFwiR1BMXFxcIixcXG4rXFx0XFx0LmxvZ19idWYgPSAoX191NjQpbG9nLFxcbitcXHRcXHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcXG4rXFx0XFx0LmxvZ19sZXZlbCA9IDEsXFxuK1xcdFxcdC5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCxcXG4rXFx0XFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXFxuK1xcdFxcdC5mdW5jX2luZm8gPSAoX191NjQpZnVuY3MsXFxuK1xcdFxcdC5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksXFxuK1xcdH07XFxuK1xcbitcXHRpZiAocmVsb2NhdGUpIHtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVxcdTAwMjZyZWxvO1xcbitcXHRcXHRhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTtcXG4rXFx0fVxcbitcXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XFxuK1xcdHJldHVybiBzeXNfYnBmX3Byb2dfbG9hZChcXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcXG4re1xcbitcXHRjb25zdCB2b2lkICpyYXdfYnRmO1xcbitcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbitcXHRfX3UzMiByYXdfYnRmX3NpemU7XFxuK1xcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XFxuK1xcdGludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJidGZfbmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXFxcImludFxcXCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcXFwiYWRkX2ludFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcXFwiYWRkX2Z1bmNfcHJvdG9cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJtYWluX2ZuXFxcIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFxcXCJhZGRfbWFpbl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJzdWJfZm5cXFwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcXFwiYWRkX3N1Yl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcXFwiY29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcXFwiLCA0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXFxcImFkZF9lbnVtXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFxcXCJ2YWx1ZVxcXCIsIDApLCBcXFwiYWRkX2VudW1fdmFsdWVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFxcXCIwXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcXFwiYWRkX2FjY2Vzc19zdHJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0cmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcXHUwMDI2cmF3X2J0Zl9zaXplKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHJhd19idGYsIFxcXCJyYXdfYnRmXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXFxcImJ0Zl9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xcbitcXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFxcXCJjb250cm9sX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRjbG9zZShwcm9nX2ZkKTtcXG4rXFx0cHJvZ19mZCA9IC0xO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XFxuK1xcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxcbitcXHQgKi9cXG4rXFx0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFxcXCJwb2lzb25lZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcXFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDNcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJwb2lzb25lZF9sb2FkX2xvZ1xcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKGVudi52ZXJib3NpdHkgXFx1MDAzZSBWRVJCT1NFX05PUk1BTCBcXHUwMDI2XFx1MDAyNiBsb2dbMF0pIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlc1xcXCIsIGxvZyk7XFxuK1xcdFxcdHByaW50ZihcXFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGNsb3NlKGJ0Zl9mZCk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbit9XFxuK1xcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXFxuICAqIHBvaW50aW5nIHRvIG5vbi1leGlzdGVudCBCVEYgdHlwZS5cXG4gICovXFxuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxcbiBcXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXFxuIHtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInBvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvclxcXCIpKVxcbitcXHRcXHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYmFkX2xvY2FsX2lkXFxcIikpXFxuIFxcdFxcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jZmcuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXFxcIlxcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3Modm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3MpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XFxuK3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2ZnKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2ZnKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xcbkBAIC0wLDAgKzEsMTIxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK3N0cnVjdCBicGZfbWFwO1xcbitcXG4rc3RydWN0IGxvY2tfdmFsdWUge1xcbitcXHRzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xcbit9O1xcbitcXG4rc3RydWN0IGlubmVyX2xvY2tfbWFwIHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xcbit9IGlubmVyX2xvY2tfbWFwX2EgU0VDKFxcXCIubWFwc1xcXCIpLCBpbm5lcl9sb2NrX21hcF9iIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbG9ja19tYXApO1xcbit9IGxvY2tfbWFwX29mX21hcHMgU0VDKFxcXCIubWFwc1xcXCIpID0ge1xcbitcXHQudmFsdWVzID0ge1xcbitcXHRcXHRbMF0gPSBcXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcXG4rXFx0XFx0WzFdID0gXFx1MDAyNmlubmVyX2xvY2tfbWFwX2IsXFxuK1xcdH0sXFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XFxuK30gbG9ja19tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RydWN0IGNhbGxiYWNrX2N0eCB7XFxuK1xcdHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpXFxuK3tcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2dmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNldmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xcbitcXG4rXFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsIFxcdTAwMjZjdHgsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCI/dGNcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiYnBmX3NwaW5fdW5sb2NrIG9mIGRpZmZlcmVudCBsb2NrXFxcIilcXG4raW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHkodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUsIE5VTEwsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX2RpZmZlcmVudF9pbm5lcl92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgY2FsbGJhY2tfY3R4IGN0eCA9IHsgLnZhbHVlID0gdmFsdWUgfTtcXG4rXFx0aW50IGlubmVyX2tleSA9IDE7XFxuK1xcdHZvaWQgKmlubmVyX21hcDtcXG4rXFxuK1xcdGlubmVyX21hcCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFxcdTAwMjZpbm5lcl9rZXkpO1xcbitcXHRpZiAoIWlubmVyX21hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShpbm5lcl9tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCBcXHUwMDI2Y3R4LCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllc1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiYnBmX3NwaW5fdW5sb2NrIG9mIGRpZmZlcmVudCBsb2NrXFxcIilcXG4raW50IGNhbGxiYWNrX2lubmVyX21hcF92YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcXG4re1xcbitcXHRpbnQgaW5uZXJfa2V5ID0gMDtcXG4rXFx0dm9pZCAqaW5uZXJfbWFwO1xcbitcXG4rXFx0aW5uZXJfbWFwID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2bG9ja19tYXBfb2ZfbWFwcywgXFx1MDAyNmlubmVyX2tleSk7XFxuK1xcdGlmICghaW5uZXJfbWFwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKGlubmVyX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF9pbm5lcl92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2dmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNnZhbHVlLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXFxuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG5AQCAtNSw2ICs1LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuIFxcbitTRUMoXFxcInhkcFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVnc2FmZSBwcmVzZXJ2ZXMgcGFja2V0IHBvaW50ZXIgY2xhc3MgZGlzcGxhY2VtZW50XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcXG4rX19uYWtlZCB2b2lkIHBrdF9yZWdzYWZlX2NsYXNzX2Rpc3BsYWNlbWVudCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcXFxcXG4rXFx0cjggPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFfZW5kXSk7XFxcXFxcbitcXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXFxcXG4rXFx0cjYgPSByOTtcXFxcXFxuK1xcdHI2ICs9IDg7XFxcXFxcbitcXHRpZiByNiBcXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXFxcXG4rXFx0cjAgPSAqKHU2NCAqKShyOSArIDApO1xcXFxcXG4rXFx0cjQgPSByMDtcXFxcXFxuK1xcdHI0IFxcdTAwMjY9IDE1O1xcXFxcXG4rXFx0cjcgPSByMDtcXFxcXFxuK1xcdHI3IFxcdTAwM2VcXHUwMDNlPSA2MztcXFxcXFxuK1xcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyArPSA0O1xcXFxcXG4rXFx0Z290byBsX2pvaW5fJT07XFxcXFxcbitsX3BhdGhfYl8lPTogXFxcXFxcbitcXHRyNCBcXHUwMDI2PSAzO1xcXFxcXG4rXFx0cjQgKz0gODtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyAtPSA0O1xcXFxcXG4rbF9qb2luXyU9OiBcXFxcXFxuK1xcdHI1ID0gcjM7XFxcXFxcbitcXHRyNSArPSA0O1xcXFxcXG4rXFx0aWYgcjUgXFx1MDAzZSByOCBnb3RvIGxfZXhpdF8lPTtcXFxcXFxuK1xcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxcXFxuK2xfZXhpdF8lPTogXFxcXFxcbitcXHRyMCA9IDA7XFxcXFxcbitcXHRleGl0O1xcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxcbitcXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMyBwb2ludGVyIGFyaXRobWV0aWMgb24gcGt0X2VuZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjUwLjY4NzcxMTI5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0NTI1OTA4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImNoZWNrX3BrdF9wdHJfaWRzXCIsXG4gICAgXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcInJlZmluZV9tYXBfbG9va3VwX3ZhbHVlXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwicHVzaF9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiB2ZXJpZmllciBzdWJzeXN0ZW0gYWNyb3NzIHNldmVyYWwgZmlsZXM6XFxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxcbjIuIGtlcm5lbC9icGYvdmVyaWZpZXIuYzogQWRkcyBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpLCByZWZpbmVzIHNwaW5sb2NrIG1hcCBVSUQgdHJhY2tpbmcgaW4gcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoKSwgZ2VuZXJhdGVzIHVuaXF1ZSByZWdpc3RlciBJRHMgZm9yIHNwaW5sb2NrLWNvbnRhaW5pbmcgbWFwIHZhbHVlcyBpbiBjYWxsYmFjayBoZWxwZXJzIChtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsIHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSwgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSksIGFuZCBhZGRzIGZhdGFsIHNpZ25hbCBhYm9ydCBjaGVja3MgaW4gYnBmX2NoZWNrKCkuXFxuMy4ga2VybmVsL2JwZi9jZmcuYzogQWRkcyBmYWxsdGhyb3VnaCB2YWxpZGF0aW9uIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgaW4gcHVzaF9pbnNuKCkuXFxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciByZWFjaGFibGUgdmlhIHN5c19icGYoQlBGX1BST0dfTE9BRCkgYW5kIHdhcnJhbnQgZnV6emluZyBmb3Igc3RhdGUgcHJ1bmluZyBjb3JyZWN0bmVzcywgdmVyaWZpZXIgZWRnZSBjYXNlcywgYW5kIGxvY2sgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0ZDI2NjdhYjVkODgwOTE3OWQyOGQ5MzUxMDU0ODM0YWQxZWI5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDM2YjY1Nzk3ODc3ZDAuLjVjZjkyY2UxODUyMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtODU0LDYgKzg1NCw4IEBAIHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUge1xuIHN0cnVjdCBicGZfaWRfcGFpciB7XG4gXHR1MzIgb2xkO1xuIFx0dTMyIGN1cjtcbitcdHMzMiBwa3RfcHRyX2RlbHRhO1xuK1x0Ym9vbCBwa3RfcHRyX2RlbHRhX3NldDtcbiB9O1xuIFxuIHN0cnVjdCBicGZfaWRtYXAge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCA4NDJjN2QxZWFiY2NjLi5lM2M5MDQzMjhlZGUwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuKysrIGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtIHtcbiAgKi9cbiBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbitcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICsxMjIsMjYgQEAgc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuK1x0ICogc3VicHJvZ3JhbSBib3VuZGFyeSwgYnV0IHJ1bnMgYmVmb3JlIENPLVJFIHJlbG9jYXRpb25zIGNhbiByZXdyaXRlIGFuXG4rXHQgKiBpbnN0cnVjdGlvbi4gUmVlc3RhYmxpc2ggdGhlIGludmFyaWFudCBvbiB0aGUgZmluYWwgaW5zdHJ1Y3Rpb24gc3RyZWFtXG4rXHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4rXHQgKi9cbitcdGlmIChlID09IEZBTExUSFJPVUdIKSB7XG4rXHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbitcdFx0aWYgKHcgXHUwMDNjIHN1YnByb2ctXHUwMDNlc3RhcnQgfHwgdyBcdTAwM2U9IChzdWJwcm9nICsgMSktXHUwMDNlc3RhcnQpIHtcbitcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCIlZDogXCIsIHQpO1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gJWQgdG8gJWRcXG5cIiwgdCwgdyk7XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIHQsIFwiZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtXCIsXG4rXHRcdFx0XHRcIktlZXAgZmFsbC10aHJvdWdoIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIGN1cnJlbnQgc3VicHJvZ3JhbS5cIixcbitcdFx0XHRcdFwiSW5zdHJ1Y3Rpb24gJWQgZmFsbHMgdGhyb3VnaCB0byBpbnN0cnVjdGlvbiAlZCBvdXRzaWRlIGl0cyBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0dCwgdyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChlID09IEJSQU5DSCkge1xuIFx0XHQvKiBtYXJrIGJyYW5jaCB0YXJnZXQgZm9yIHN0YXRlIHBydW5pbmcgKi9cbiBcdFx0bWFya19wcnVuZV9wb2ludChlbnYsIHcpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCA1MmQzY2VjMzM2NzI3Li45NDAxZmZmY2VkZmQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcImRpc2FzbS5oXCJcbiBcbkBAIC0zMDYsMTIgKzMwNywyOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4gXHR9XG4gfVxuIFxuKy8qXG4rICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbisgKiBPKHByb2ctXHUwMDNlbGVuKSBvcGVyYXRpb24gcGVyIGluc3RydWN0aW9uLiBLZWVwIHRoZWlyIHNoYXJlZCBwcmltaXRpdmVzXG4rICoga2lsbGFibGUgYW5kIHByZWVtcHRpYmxlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcbit7XG4rXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y29uZF9yZXNjaGVkKCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aWYgKGxlbiBcdTAwM2UgMSkge1xuIFx0XHRuZXdfZGF0YSA9IHZyZWFsbG9jKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhLFxuIFx0XHRcdFx0ICAgIGFycmF5X3NpemUoZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuICsgbGVuIC0gMSxcbkBAIC01MjMsNiArNTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdHVuc2lnbmVkIGludCBvcmlnX3Byb2dfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiAtRUlOVFI7XG4rXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4gXHRcdGJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpO1xuIFxuQEAgLTI2NjYsNCArMjY4NiwzIEBAIGludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCA2NmZiMTFiNmM2YTc2Li4yZjhmM2ZlMTY0YjAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTMzOSw2ICszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4rXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XG4gXHRcdGlkbWFwLVx1MDAzZWNudCsrO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiArMzUzLDQzIEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuK1x0czY0IGRlbHRhO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAoIWNoZWNrX2lkcyhvbGQtXHUwMDNlaWQsIGN1ci1cdTAwM2VpZCwgaWRtYXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIW9sZC1cdTAwM2VpZClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFja2V0IHJhbmdlIGlzIHNoYXJlZCBieSBhbGwgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSBJRC4gUHJlc2VydmVcbitcdCAqIHRoZWlyIHJlbGF0aXZlIGRpc3BsYWNlbWVudCwgd2hpbGUgYWxsb3dpbmcgdGhlIHdob2xlIGNsYXNzIHRvIG1vdmUuXG4rXHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4rXHQgKiBiZXR3ZWVuIHR3byB2YWxpZCBvZmZzZXRzIGZpdHMgaW4gczMyLlxuK1x0ICovXG4rXHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4rXHRpZiAoZGVsdGEgXHUwMDNjIFMzMl9NSU4gfHwgZGVsdGEgXHUwMDNlIFMzMl9NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSsrKSB7XG4rXHRcdGlmIChtYXBbaV0ub2xkICE9IG9sZC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbitcdFx0XHRtYXBbaV0ucGt0X3B0cl9kZWx0YSA9IGRlbHRhO1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKlxuICAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXG4gICpcbkBAIC02MzIsOCArNjcwLDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0fSBlbHNlIGlmIChyb2xkLVx1MDAzZXJhbmdlIFx1MDAzZSByY3VyLVx1MDAzZXJhbmdlKSB7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tXHRcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xuLVx0XHRpZiAoIWNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4rXHRcdGlmICghY2hlY2tfcGt0X3B0cl9pZHMocm9sZCwgcmN1ciwgaWRtYXApKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cbiBcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFjMzAzOWYzZmMzMjMuLmFkMTRhN2ZiZWQ3MmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuQEAgLTQ0Nyw2ICs0NDgsMTMgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiBcdHJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctXHUwMDNlbWFwX3B0cjtcbitcbitcdHJldHVybiAhcmVnLVx1MDAzZW1hcF91aWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTkyNSwxMSArMTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0aWYgKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsO1xuIFx0XHRyZWctXHUwMDNlbWFwX3B0ciA9IG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YTtcbi1cdFx0LyogdHJhbnNmZXIgcmVnJ3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW1cbi1cdFx0ICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuXG4rXHRcdC8qXG4rXHRcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXG4rXHRcdCAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZVxuK1x0XHQgKiB2ZXJpZmljYXRpb24gbmVlZHMgdG8gZGlzdGluZ3Vpc2ggY29uY3JldGUgbWFwIGluc3RhbmNlcy4gRG9pbmdcbitcdFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cbitcdFx0ICpcbitcdFx0ICogRWFjaCBtYXAgbG9va3VwIGhhcyBhIHVuaXF1ZSByZWdpc3RlciBJRCwgc28gdXNlIGl0IGFzIHRoZSBVSUQgb2ZcbitcdFx0ICogdGhlIGlubmVyIG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlaW5uZXJfbWFwX21ldGEtXHUwMDNlcmVjb3JkLFxuLVx0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspKVxuK1x0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUksgfFxuK1x0XHRcdFx0XHQgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSlcbiBcdFx0XHRyZWctXHUwMDNlbWFwX3VpZCA9IHJlZy1cdTAwM2VpZDtcbiBcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcbiBcdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xuQEAgLTEwMDM1LDYgKzEwMDUwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSlcbitcdFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqL1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSA9IGNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfM107XG5AQCAtMTAxMzEsNiArMTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0yMTM2Nyw2ICsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xuK1x0LypcbitcdCAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYVxuK1x0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcbitcdCAqIGNvbnN1bWUgYSBmYXRhbC1zaWduYWwgY2FuY2VsbGF0aW9uIGZyb20gYnBmX3BhdGNoX2luc25fZGF0YSgpLlxuK1x0ICovXG4rXHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRyZXQgPSAtRUlOVFI7XG4gXG4gXHRlbnYtXHUwMDNldmVyaWZpY2F0aW9uX3RpbWUgPSBrdGltZV9nZXRfbnMoKSAtIHN0YXJ0X3RpbWU7XG4gXHRwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTtcbkBAIC0yMTQyNSw2ICsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9IDA7XG4gXG4gXHRlbnYtXHUwMDNlcHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtXHUwMDNlcHJvZywgXHUwMDI2cmV0KTtcbitcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldCA9IC1FSU5UUjtcbiBcbiBlcnJfcmVsZWFzZV9tYXBzOlxuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbkBAIC0xNCw2ICsxNCwxMTcgQEBcbiBcbiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTtcbiBcbitzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4rXHRcdFx0XHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXG4re1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9DQUxMX1JFTCgyKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0fTtcbitcdHN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7XG4rXHRcdHsgLmluc25fb2ZmID0gMCwgLnR5cGVfaWQgPSBtYWluX2lkIH0sXG4rXHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0ge1xuK1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4rXHRcdC50eXBlX2lkID0gZW51bV9pZCxcbitcdFx0LmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsXG4rXHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbitcdH07XG4rXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xuK1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuK1x0XHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcbitcdFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxuK1x0XHQubGljZW5zZSA9IChfX3U2NClcIkdQTFwiLFxuK1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4rXHRcdC5sb2dfc2l6ZSA9IHNpemVvZihsb2cpLFxuK1x0XHQubG9nX2xldmVsID0gMSxcbitcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuK1x0XHQuZnVuY19pbmZvX3JlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKSxcbitcdFx0LmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcyxcbitcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbitcdH07XG4rXG4rXHRpZiAocmVsb2NhdGUpIHtcbitcdFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcbitcdFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVx1MDAyNnJlbG87XG4rXHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuK1x0fVxuK1x0bWVtc2V0KGxvZywgMCwgc2l6ZW9mKGxvZykpO1xuK1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm9pZCAqcmF3X2J0ZjtcbitcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4rXHRfX3UzMiByYXdfYnRmX3NpemU7XG4rXHRpbnQgYWNjZXNzX3N0cl9vZmYsIGJ0Zl9mZCA9IC0xLCBlbnVtX2lkO1xuK1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuK1xuK1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwiYnRmX25ld19lbXB0eVwiKSlcbitcdFx0cmV0dXJuO1xuK1x0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCJpbnRcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcImFkZF9pbnRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCJhZGRfZnVuY19wcm90b1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0bWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcIm1haW5fZm5cIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChtYWluX2lkLCAwLCBcImFkZF9tYWluX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHN1Yl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcInN1Yl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHN1Yl9pZCwgMCwgXCJhZGRfc3ViX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCJjb3JlX3JlbG9fc3VicHJvZ19wb2lzb25fbWlzc2luZ1wiLCA0KTtcbitcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwiYWRkX2VudW1cIikgfHxcbitcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcInZhbHVlXCIsIDApLCBcImFkZF9lbnVtX3ZhbHVlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwiMFwiKTtcbitcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcImFkZF9hY2Nlc3Nfc3RyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRyYXdfYnRmID0gYnRmX19yYXdfZGF0YShidGYsIFx1MDAyNnJhd19idGZfc2l6ZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCJyYXdfYnRmXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRidGZfZmQgPSBicGZfYnRmX2xvYWQocmF3X2J0ZiwgcmF3X2J0Zl9zaXplLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXCJidGZfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogVGhlIHNhbWUgdHdvLXN1YnByb2dyYW0gcHJvZ3JhbSBpcyB2YWxpZCBiZWZvcmUgdGhlIHJlbG9jYXRpb24uICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRwcm9nX2ZkID0gLTE7XG4rXG4rXHQvKlxuK1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XG4rXHQgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy5cbitcdCAqL1xuK1x0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXG4rXHRcdFx0XHRcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XG4rXHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcInBvaXNvbmVkX2xvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCJmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuIDIgdG8gM1wiLFxuK1x0XHRcdCAgXCJwb2lzb25lZF9sb2FkX2xvZ1wiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxcblwiKTtcbitcdFx0cHJpbnRmKFwiJXNcIiwgbG9nKTtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcblwiKTtcbitcdH1cbitcdGNsb3NlKHByb2dfZmQpO1xuK1x0Y2xvc2UoYnRmX2ZkKTtcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbitcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxuIFxuIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKVxuIHtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCIpKVxuK1x0XHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJiYWRfbG9jYWxfaWRcIikpXG4gXHRcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDIzZTEzOTA4Y2ViZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSwxMjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK3N0cnVjdCBicGZfbWFwO1xuK1xuK3N0cnVjdCBsb2NrX3ZhbHVlIHtcbitcdHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4rfTtcbitcbitzdHJ1Y3QgaW5uZXJfbG9ja19tYXAge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gaW5uZXJfbG9ja19tYXBfYSBTRUMoXCIubWFwc1wiKSwgaW5uZXJfbG9ja19tYXBfYiBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7XG4rfSBsb2NrX21hcF9vZl9tYXBzIFNFQyhcIi5tYXBzXCIpID0ge1xuK1x0LnZhbHVlcyA9IHtcbitcdFx0WzBdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcbitcdFx0WzFdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYixcbitcdH0sXG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gbG9ja19tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IGNhbGxiYWNrX2N0eCB7XG4rXHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHRcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHN0cnVjdCBjYWxsYmFja19jdHggKmN0eClcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V2YWx1ZS1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiY2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcIilcbitfX2ZhaWx1cmUgX19tc2coXCJicGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcIilcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1x0aW50IGlubmVyX2tleSA9IDE7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0aW50IGlubmVyX2tleSA9IDA7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19kZXNjcmlwdGlvbihcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5X3NhbWUodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX3NhbWVfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbmluZGV4IDBiODZkOTVhNDEzMzUuLjY5MmE4NDY4ZjNkNzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuQEAgLTUsNiArNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiWERQIHBrdCByZWdzYWZlIHByZXNlcnZlcyBwYWNrZXQgcG9pbnRlciBjbGFzcyBkaXNwbGFjZW1lbnRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcIilcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcbitfX25ha2VkIHZvaWQgcGt0X3JlZ3NhZmVfY2xhc3NfZGlzcGxhY2VtZW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlxcXG4rXHRyOCA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcXFxuK1x0cjkgPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFdKTtcXFxuK1x0cjYgPSByOTtcXFxuK1x0cjYgKz0gODtcXFxuK1x0aWYgcjYgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHI5ICsgMCk7XFxcbitcdHI0ID0gcjA7XFxcbitcdHI0IFx1MDAyNj0gMTU7XFxcbitcdHI3ID0gcjA7XFxcbitcdHI3IFx1MDAzZVx1MDAzZT0gNjM7XFxcbitcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzICs9IDQ7XFxcbitcdGdvdG8gbF9qb2luXyU9O1xcXG4rbF9wYXRoX2JfJT06IFxcXG4rXHRyNCBcdTAwMjY9IDM7XFxcbitcdHI0ICs9IDg7XFxcbitcdHIyID0gcjk7XFxcbitcdHIyICs9IHI0O1xcXG4rXHRyMyA9IHIyO1xcXG4rXHRyMyAtPSA0O1xcXG4rbF9qb2luXyU9OiBcXFxuK1x0cjUgPSByMztcXFxuK1x0cjUgKz0gNDtcXFxuK1x0aWYgcjUgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHIyICsgMCk7XFxcbitsX2V4aXRfJT06IFxcXG4rXHRyMCA9IDA7XFxcbitcdGV4aXQ7XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxuK1x0ICBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YV9lbmQsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGFfZW5kKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIFNFQyhcInhkcFwiKVxuIF9fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlYWQsIHBrdF9lbmQgbWFuZ2xpbmcsIGJhZCBhY2Nlc3MgMVwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlIzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kXCIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1MC42ODc3MTMxNjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDc2ODgzODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBSZWNvbW1lbmRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTGV0J3Mgc2VlLi4uIEkndmUgcmV2aWV3ZWQgdGhlIGRpZmYsIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmc6XG5cbkZpcnN0LCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGRlZXBlciBkaXZlLiBUaGUgY2hhbmdlcyB0b3VjaCB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllci4gSXQncyBub3QganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGlzIGhpdHMgY29yZSBsb2dpYyAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGBrZXJuZWwvYnBmL2NmZy5jYCwgYGtlcm5lbC9icGYvZml4dXBzLmNgLCBga2VybmVsL2JwZi9zdGF0ZXMuY2ApLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnLi4uIGluIHRoZSBiZXN0IHBvc3NpYmxlIHdheSEgVGhlIEJQRiB2ZXJpZmllciBpcyBhIG1hc3NpdmUgYXR0YWNrIHN1cmZhY2UgYmVjYXVzZSBpdCdzIHRoZSBzZWN1cml0eSBib3VuZGFyeSBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgdGhlIGBCUEZfUFJPR19MT0FEYCBjb21tYW5kLiBBbnkgd2Vha25lc3MgaGVyZSBjb3VsZCBsZWFkIHRvIGRldmFzdGF0aW5nIGNvbnNlcXVlbmNlcy5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIHN0YXRlIHBydW5pbmcgKGByZWdzYWZlYCwgYGNoZWNrX3BrdF9wdHJfaWRzYCksIHdoaWNoIGhhbmRsZXMgdHJhY2tpbmcgcmVnaXN0ZXIgc3RhdGVzOyB0aGlzIGlzIHN1cGVyIGltcG9ydGFudCBiZWNhdXNlIGl0J3MgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgdmVyaWZpZXLigJlzIGFiaWxpdHkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBvdGhlciBtZW1vcnkgZXJyb3JzLiBUaGVuIHRoZXJlJ3MgbG9jayB0cmFja2luZyBhY3Jvc3MgY2FsbGJhY2tzIChgcmVnX21heV9wb2ludF90b19zcGluX2xvY2tgKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBwcm90ZWN0aW5nIGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBUaGVyZSBhcmUgYWxzbyBuZXcgY2hlY2tzIGZvciBDRkcgc3VicHJvZ3JhbSBib3VuZGFyaWVzLCB3aGljaCBoZWxwcyBwcmV2ZW50IGNvbnRyb2wtZmxvdyBlcnJvcnMgYW5kIHBvdGVudGlhbCBieXBhc3NlcyBvZiB0aGUgdmVyaWZpZXIsIGFuZCBjaGVja3MgZm9yIGZhdGFsIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuIEFsbCBvZiB0aGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBjaGFuZ2VzIHRoYXQgZnJlcXVlbnRseSB1bmNvdmVyIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcy5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpdHMgYXR0YWNrIHN1cmZhY2UsIHRoaXMgcGF0Y2ggc2VyaWVzIGRpcmVjdGx5IGltcGFjdHMgU2VjdGlvbiAzOiBDb3JlIFN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBCUEYsIGl0cyB2ZXJpZmllciwgc3RhdGUgcHJ1bmluZywgQ0ZHIGNoZWNrcywgbG9jayB0cmFja2luZywgYW5kIHNpZ25hbCBhYm9ydCBoYW5kbGluZy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBmdXp6aW5nIHdpdGggYSB0b29sIGxpa2UgU3l6a2FsbGVyIGlzIG1vc3QgZWZmZWN0aXZlLlxuXG5NeSByZWNvbW1lbmRhdGlvbiBpcyBhbiB1bmVxdWl2b2NhbCBZRVMhIFdlIG5lZWQgdG8gZ2V0IFN5emthbGxlciBwb2ludGVkIGF0IHRoaXMgKmltbWVkaWF0ZWx5Ki4gQmVmb3JlIHdlIGRvIHRoYXQgdGhvdWdoLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgdGhlIEJQRiBzdWJzeXN0ZW0gb3Igc3BlY2lmaWMgQlBGIGZlYXR1cmVzLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBieSBmdXp6aW5nIGNvZGUgdGhhdCBpc24ndCBidWlsdCBvciBlbmFibGVkLiBJJ2xsIHVzZSBjb2Rlc2VhcmNoL2dyZXAgb3IgcmVhZC1maWxlIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgYGtlcm5lbC9icGYvYCBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBUaGVuLCB3aXRoIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBjbGVhciwgbGV0J3Mgc3RhcnQgZnV6emluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1Ni4xNjQ2MDAxNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4Njg3NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTU4PWNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWc6NjA6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNjEtXFx0aGVscFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTczPWNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNzUtXFx0ZGVmYXVsdCB5XFxua2VybmVsL2JwZi9LY29uZmlnOjc2OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctNzctXFx0aGVscFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkyPWNvbmZpZyBCUEZfTFNNXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctOTQtXFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxua2VybmVsL2JwZi9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctOTYtXFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXFxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXFx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjQ2OD1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3MS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDcyOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzAzNj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDM4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM5LVxcdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2Mi1cXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XFxua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2NC1cXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cXHUwMDNla2Z1bmNfYnRmX3RhYik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg1LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMzg2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg3LVxcdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQyND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MjgtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQ1NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU2LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0NTc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0NTgtXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0yPW1lbnVjb25maWcgQlBGX1BSRUxPQURcXG4tLVxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCUEZcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy02LVxcdCMgVGhlIGRlcGVuZGVuY3kgb24gIUNPTVBJTEVfVEVTVCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIGVuYWJsZWRcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MTQ9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIxLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MjI6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjMtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzY5PXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDYtXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODA3OlxcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NTYuMzUzMjk1NjkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU5ODM0NDU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcyB0byB0aGUgQlBGIHZlcmlmaWVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBjaGFuZ2VzIGFuZCB0aGVpciBjYWxsZXJzLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhY3Jvc3MgdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5OiBgYnBmX2NoZWNrYCwgYHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eWAgKGluIHZlcmlmaWVyLmMpLCBgY2hlY2tfcGt0X3B0cl9pZHNgLCBgY2hlY2tfaWRzYCwgYHJlZ3NhZmVgIChpbiBzdGF0ZXMuYyksIGBwdXNoX2luc25gIChpbiBjZmcuYyksIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AsIGFuZCBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGAgKGluIGZpeHVwcy5jKS5cblxuTXkgbWFpbiBlbnRyeSBwb2ludCBvZiBjb25jZXJuIGlzIGBicGZfY2hlY2tgLCBhcyB0aGF0J3MgdGhlIGNvcmUgdmVyaWZpZXIsIGFuZCB0aGUgZmFjdCB0aGF0IGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYW5kIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlYCBhcmUgYWRkZWQgaW4gcmVsYXRpb24gdG8gdGhlIG5ldyBsb2dpYywgc2VlbXMgdGhhdCB0aGUgbWFqb3IgY2hhbmdlIGlzIHRoZSB0cmFja2luZyBvZiBzcGlubG9ja3MgZm9yIGlubmVyIG1hcHMgYW5kIGNhbGxiYWNrcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN0YXRlIHRyYWNraW5nIGNoYW5nZXMgKGBjaGVja19wa3RfcHRyX2lkc2AsIGByZWdzYWZlYCkuIFRoZSBDb250cm9sIEZsb3cgR3JhcGggKENGRykgY2hhbmdlcyB3aXRoIGBwdXNoX2luc25gIGFyZSBpbXBvcnRhbnQgdG9vLiBBbmQgdGhlbiwgdGhlIGluc3RydWN0aW9uIHBhdGNoaW5nIGFuZCByZW1vdmFsIHJvdXRpbmVzIChgYnBmX3BhdGNoX2luc25fZGF0YWAsIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgKSBhbmQgc2lnbmFsIGNoZWNrcyBhcmUgY3JpdGljYWwgZm9yIHNhZmV0eSwgb2YgY291cnNlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgbm9uLXN0YXRpYyBzeW1ib2xzIGZvciBhIHBvdGVudGlhbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIFNvIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50czogYGJwZl9jaGVja2AsIGByZWdzYWZlYCwgYGNoZWNrX3BrdF9wdHJfaWRzYCwgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGBwdXNoX2luc25gLiBUaGVzZSBzZWVtIHNwZWNpZmljIHRvIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LlxuXG5UaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgYEJQRl9TWVNDQUxMYCwgYW5kIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2Ugc291cmNlIGZpbGVzIGFyZSBvbmx5IGJ1aWx0IHdoZW4gdGhhdCBpcyBlbmFibGVkLiBUaGUgYnVpbGQgcnVsZXMgY29uZmlybSBpdC5cblxuTXkgZm9jdXMgc3ltYm9scyBhcmUgc3BlY2lmaWMgYW5kIG5vdCB1YmlxdWl0b3VzLiBJIGhhdmUgYSBjbGVhbiBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIHNvIG5vdyBsZXQncyB2ZXJpZnkgbXkgZmluZGluZ3MuIFRoZXNlIHBhdGNoZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgdmVyaWZpZXIgY29tcG9uZW50cywgcHJpbWFyaWx5IGltcGFjdGluZyB0aGUgZm9sbG93aW5nOlxuLSBTdGF0ZSBwcnVuaW5nIGluIGBzdGF0ZXMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcmVnc2FmZWAgYW5kIGBjaGVja19wa3RfcHRyX2lkc2AgZm9yIGltcHJvdmVkIHBhY2tldCBwb2ludGVyIGRpc3BsYWNlbWVudCB0cmFja2luZy5cbi0gYHZlcmlmaWVyLmNgIHVwZGF0ZXMgYWRkcmVzcyBpbm5lciBtYXAgbG9va3VwIGFuZCBzcGlubG9jayBoYW5kbGluZyBhbmQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIHN0YXRlLiBBbmQgaXQgYWxzbyBpbmNsdWRlcyBhZGRpdGlvbmFsIGZhdGFsIHNpZ25hbCBjaGVja2luZyBpbiBgYnBmX2NoZWNrYC5cbi0gYGNmZy5jYCBhZGRzIENGRyB2YWxpZGF0aW9uIHdpdGggYHB1c2hfaW5zbmAuXG4tIGBmaXh1cHMuY2AgYWRkcyBwcmVlbXB0aW9uIGFuZCBmYXRhbCBzaWduYWwgY2hlY2tzIGluIHBhdGNoaW5nIGFuZCByZW1vdmFsIHJvdXRpbmVzLlxuXG5BbGwgb2YgdGhlc2UgZGlyZWN0bHkgaW1wYWN0IEJQRiBwcm9ncmFtIGxvYWRpbmcgY29ycmVjdG5lc3MsIHZlcmlmaWNhdGlvbiwgYW5kIG92ZXJhbGwgc2FmZXR5IGFuZCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGggb2YgQlBGIHByb2dyYW0gbG9hZGluZy4gU28sIG5vdyBpdCdzIHRpbWUgdG8gY2hlY2sgaWYgSSBjYW4gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcgYmVmb3JlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gRXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGFsaWduZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0NCwiT3V0cHV0VG9rZW5zIjo0MDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjAzLjk1MTY1MjE3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjQxMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwicmVmaW5lX21hcF9sb29rdXBfdmFsdWVcIixcbiAgICBcIm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc1wiLFxuICAgIFwic2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlXCIsXG4gICAgXCJzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlXCIsXG4gICAgXCJwdXNoX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIHZlcmlmaWVyIHN1YnN5c3RlbSBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczpcXG4xLiBrZXJuZWwvYnBmL3N0YXRlcy5jOiBBZGRzIGNoZWNrX3BrdF9wdHJfaWRzKCkgYW5kIG1vZGlmaWVzIHJlZ3NhZmUoKSB0byBwcmVzZXJ2ZSBkaXNwbGFjZW1lbnQgd2l0aGluIHBhY2tldCBwb2ludGVyIElEIGNsYXNzZXMgZHVyaW5nIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcuXFxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cXG4zLiBrZXJuZWwvYnBmL2NmZy5jOiBBZGRzIGZhbGx0aHJvdWdoIHZhbGlkYXRpb24gYWNyb3NzIHN1YnByb2dyYW0gYm91bmRhcmllcyBpbiBwdXNoX2luc24oKS5cXG40LiBrZXJuZWwvYnBmL2ZpeHVwcy5jOiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQpIHRvIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBhbmQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKCkuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHJlYWNoYWJsZSB2aWEgc3lzX2JwZihCUEZfUFJPR19MT0FEKSBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBzdGF0ZSBwcnVuaW5nIGNvcnJlY3RuZXNzLCB2ZXJpZmllciBlZGdlIGNhc2VzLCBhbmQgbG9jayBzYWZldHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImNoZWNrX3BrdF9wdHJfaWRzXCIsXG4gICAgXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcInJlZmluZV9tYXBfbG9va3VwX3ZhbHVlXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwicHVzaF9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiB2ZXJpZmllciBzdWJzeXN0ZW0gYWNyb3NzIHNldmVyYWwgZmlsZXM6XFxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxcbjIuIGtlcm5lbC9icGYvdmVyaWZpZXIuYzogQWRkcyBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpLCByZWZpbmVzIHNwaW5sb2NrIG1hcCBVSUQgdHJhY2tpbmcgaW4gcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoKSwgZ2VuZXJhdGVzIHVuaXF1ZSByZWdpc3RlciBJRHMgZm9yIHNwaW5sb2NrLWNvbnRhaW5pbmcgbWFwIHZhbHVlcyBpbiBjYWxsYmFjayBoZWxwZXJzIChtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsIHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSwgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSksIGFuZCBhZGRzIGZhdGFsIHNpZ25hbCBhYm9ydCBjaGVja3MgaW4gYnBmX2NoZWNrKCkuXFxuMy4ga2VybmVsL2JwZi9jZmcuYzogQWRkcyBmYWxsdGhyb3VnaCB2YWxpZGF0aW9uIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgaW4gcHVzaF9pbnNuKCkuXFxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciByZWFjaGFibGUgdmlhIHN5c19icGYoQlBGX1BST0dfTE9BRCkgYW5kIHdhcnJhbnQgZnV6emluZyBmb3Igc3RhdGUgcHJ1bmluZyBjb3JyZWN0bmVzcywgdmVyaWZpZXIgZWRnZSBjYXNlcywgYW5kIGxvY2sgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowNC4xNDAzMTEwODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDM0MDc0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowNC4xNDE1NDE5OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2MTAyMTY5MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxcbjEuIEFkZHMgYSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGZhbGx0aHJvdWdoIGNoZWNrIGluIGNmZy5jIHRvIGVuc3VyZSBDTy1SRSByZWxvY2F0aW9ucyBjYW5ub3QgdmlvbGF0ZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuXFxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXFxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cXG40LiBDb3JyZWN0cyBzcGlubG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgaW5uZXIgbWFwIGxvb2t1cHMgYW5kIGNhbGxiYWNrIGFyZ3VtZW50IHN0YXRlcyBpbiB2ZXJpZmllci5jLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0ZDI2NjdhYjVkODgwOTE3OWQyOGQ5MzUxMDU0ODM0YWQxZWI5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDM2YjY1Nzk3ODc3ZDAuLjVjZjkyY2UxODUyMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtODU0LDYgKzg1NCw4IEBAIHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUge1xuIHN0cnVjdCBicGZfaWRfcGFpciB7XG4gXHR1MzIgb2xkO1xuIFx0dTMyIGN1cjtcbitcdHMzMiBwa3RfcHRyX2RlbHRhO1xuK1x0Ym9vbCBwa3RfcHRyX2RlbHRhX3NldDtcbiB9O1xuIFxuIHN0cnVjdCBicGZfaWRtYXAge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCA4NDJjN2QxZWFiY2NjLi5lM2M5MDQzMjhlZGUwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuKysrIGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtIHtcbiAgKi9cbiBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbitcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICsxMjIsMjYgQEAgc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuK1x0ICogc3VicHJvZ3JhbSBib3VuZGFyeSwgYnV0IHJ1bnMgYmVmb3JlIENPLVJFIHJlbG9jYXRpb25zIGNhbiByZXdyaXRlIGFuXG4rXHQgKiBpbnN0cnVjdGlvbi4gUmVlc3RhYmxpc2ggdGhlIGludmFyaWFudCBvbiB0aGUgZmluYWwgaW5zdHJ1Y3Rpb24gc3RyZWFtXG4rXHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4rXHQgKi9cbitcdGlmIChlID09IEZBTExUSFJPVUdIKSB7XG4rXHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbitcdFx0aWYgKHcgXHUwMDNjIHN1YnByb2ctXHUwMDNlc3RhcnQgfHwgdyBcdTAwM2U9IChzdWJwcm9nICsgMSktXHUwMDNlc3RhcnQpIHtcbitcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCIlZDogXCIsIHQpO1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gJWQgdG8gJWRcXG5cIiwgdCwgdyk7XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIHQsIFwiZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtXCIsXG4rXHRcdFx0XHRcIktlZXAgZmFsbC10aHJvdWdoIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIGN1cnJlbnQgc3VicHJvZ3JhbS5cIixcbitcdFx0XHRcdFwiSW5zdHJ1Y3Rpb24gJWQgZmFsbHMgdGhyb3VnaCB0byBpbnN0cnVjdGlvbiAlZCBvdXRzaWRlIGl0cyBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0dCwgdyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChlID09IEJSQU5DSCkge1xuIFx0XHQvKiBtYXJrIGJyYW5jaCB0YXJnZXQgZm9yIHN0YXRlIHBydW5pbmcgKi9cbiBcdFx0bWFya19wcnVuZV9wb2ludChlbnYsIHcpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCA1MmQzY2VjMzM2NzI3Li45NDAxZmZmY2VkZmQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcImRpc2FzbS5oXCJcbiBcbkBAIC0zMDYsMTIgKzMwNywyOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4gXHR9XG4gfVxuIFxuKy8qXG4rICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbisgKiBPKHByb2ctXHUwMDNlbGVuKSBvcGVyYXRpb24gcGVyIGluc3RydWN0aW9uLiBLZWVwIHRoZWlyIHNoYXJlZCBwcmltaXRpdmVzXG4rICoga2lsbGFibGUgYW5kIHByZWVtcHRpYmxlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcbit7XG4rXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y29uZF9yZXNjaGVkKCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aWYgKGxlbiBcdTAwM2UgMSkge1xuIFx0XHRuZXdfZGF0YSA9IHZyZWFsbG9jKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhLFxuIFx0XHRcdFx0ICAgIGFycmF5X3NpemUoZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuICsgbGVuIC0gMSxcbkBAIC01MjMsNiArNTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdHVuc2lnbmVkIGludCBvcmlnX3Byb2dfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiAtRUlOVFI7XG4rXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4gXHRcdGJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpO1xuIFxuQEAgLTI2NjYsNCArMjY4NiwzIEBAIGludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCA2NmZiMTFiNmM2YTc2Li4yZjhmM2ZlMTY0YjAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTMzOSw2ICszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4rXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XG4gXHRcdGlkbWFwLVx1MDAzZWNudCsrO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiArMzUzLDQzIEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuK1x0czY0IGRlbHRhO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAoIWNoZWNrX2lkcyhvbGQtXHUwMDNlaWQsIGN1ci1cdTAwM2VpZCwgaWRtYXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIW9sZC1cdTAwM2VpZClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFja2V0IHJhbmdlIGlzIHNoYXJlZCBieSBhbGwgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSBJRC4gUHJlc2VydmVcbitcdCAqIHRoZWlyIHJlbGF0aXZlIGRpc3BsYWNlbWVudCwgd2hpbGUgYWxsb3dpbmcgdGhlIHdob2xlIGNsYXNzIHRvIG1vdmUuXG4rXHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4rXHQgKiBiZXR3ZWVuIHR3byB2YWxpZCBvZmZzZXRzIGZpdHMgaW4gczMyLlxuK1x0ICovXG4rXHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4rXHRpZiAoZGVsdGEgXHUwMDNjIFMzMl9NSU4gfHwgZGVsdGEgXHUwMDNlIFMzMl9NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSsrKSB7XG4rXHRcdGlmIChtYXBbaV0ub2xkICE9IG9sZC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbitcdFx0XHRtYXBbaV0ucGt0X3B0cl9kZWx0YSA9IGRlbHRhO1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKlxuICAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXG4gICpcbkBAIC02MzIsOCArNjcwLDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0fSBlbHNlIGlmIChyb2xkLVx1MDAzZXJhbmdlIFx1MDAzZSByY3VyLVx1MDAzZXJhbmdlKSB7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tXHRcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xuLVx0XHRpZiAoIWNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4rXHRcdGlmICghY2hlY2tfcGt0X3B0cl9pZHMocm9sZCwgcmN1ciwgaWRtYXApKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cbiBcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFjMzAzOWYzZmMzMjMuLmFkMTRhN2ZiZWQ3MmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuQEAgLTQ0Nyw2ICs0NDgsMTMgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiBcdHJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctXHUwMDNlbWFwX3B0cjtcbitcbitcdHJldHVybiAhcmVnLVx1MDAzZW1hcF91aWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTkyNSwxMSArMTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0aWYgKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsO1xuIFx0XHRyZWctXHUwMDNlbWFwX3B0ciA9IG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YTtcbi1cdFx0LyogdHJhbnNmZXIgcmVnJ3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW1cbi1cdFx0ICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuXG4rXHRcdC8qXG4rXHRcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXG4rXHRcdCAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZVxuK1x0XHQgKiB2ZXJpZmljYXRpb24gbmVlZHMgdG8gZGlzdGluZ3Vpc2ggY29uY3JldGUgbWFwIGluc3RhbmNlcy4gRG9pbmdcbitcdFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cbitcdFx0ICpcbitcdFx0ICogRWFjaCBtYXAgbG9va3VwIGhhcyBhIHVuaXF1ZSByZWdpc3RlciBJRCwgc28gdXNlIGl0IGFzIHRoZSBVSUQgb2ZcbitcdFx0ICogdGhlIGlubmVyIG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlaW5uZXJfbWFwX21ldGEtXHUwMDNlcmVjb3JkLFxuLVx0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspKVxuK1x0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUksgfFxuK1x0XHRcdFx0XHQgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSlcbiBcdFx0XHRyZWctXHUwMDNlbWFwX3VpZCA9IHJlZy1cdTAwM2VpZDtcbiBcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcbiBcdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xuQEAgLTEwMDM1LDYgKzEwMDUwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSlcbitcdFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqL1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSA9IGNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfM107XG5AQCAtMTAxMzEsNiArMTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0yMTM2Nyw2ICsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xuK1x0LypcbitcdCAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYVxuK1x0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcbitcdCAqIGNvbnN1bWUgYSBmYXRhbC1zaWduYWwgY2FuY2VsbGF0aW9uIGZyb20gYnBmX3BhdGNoX2luc25fZGF0YSgpLlxuK1x0ICovXG4rXHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRyZXQgPSAtRUlOVFI7XG4gXG4gXHRlbnYtXHUwMDNldmVyaWZpY2F0aW9uX3RpbWUgPSBrdGltZV9nZXRfbnMoKSAtIHN0YXJ0X3RpbWU7XG4gXHRwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTtcbkBAIC0yMTQyNSw2ICsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9IDA7XG4gXG4gXHRlbnYtXHUwMDNlcHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtXHUwMDNlcHJvZywgXHUwMDI2cmV0KTtcbitcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldCA9IC1FSU5UUjtcbiBcbiBlcnJfcmVsZWFzZV9tYXBzOlxuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbkBAIC0xNCw2ICsxNCwxMTcgQEBcbiBcbiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTtcbiBcbitzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4rXHRcdFx0XHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXG4re1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9DQUxMX1JFTCgyKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0fTtcbitcdHN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7XG4rXHRcdHsgLmluc25fb2ZmID0gMCwgLnR5cGVfaWQgPSBtYWluX2lkIH0sXG4rXHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0ge1xuK1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4rXHRcdC50eXBlX2lkID0gZW51bV9pZCxcbitcdFx0LmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsXG4rXHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbitcdH07XG4rXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xuK1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuK1x0XHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcbitcdFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxuK1x0XHQubGljZW5zZSA9IChfX3U2NClcIkdQTFwiLFxuK1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4rXHRcdC5sb2dfc2l6ZSA9IHNpemVvZihsb2cpLFxuK1x0XHQubG9nX2xldmVsID0gMSxcbitcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuK1x0XHQuZnVuY19pbmZvX3JlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKSxcbitcdFx0LmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcyxcbitcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbitcdH07XG4rXG4rXHRpZiAocmVsb2NhdGUpIHtcbitcdFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcbitcdFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVx1MDAyNnJlbG87XG4rXHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuK1x0fVxuK1x0bWVtc2V0KGxvZywgMCwgc2l6ZW9mKGxvZykpO1xuK1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm9pZCAqcmF3X2J0ZjtcbitcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4rXHRfX3UzMiByYXdfYnRmX3NpemU7XG4rXHRpbnQgYWNjZXNzX3N0cl9vZmYsIGJ0Zl9mZCA9IC0xLCBlbnVtX2lkO1xuK1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuK1xuK1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwiYnRmX25ld19lbXB0eVwiKSlcbitcdFx0cmV0dXJuO1xuK1x0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCJpbnRcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcImFkZF9pbnRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCJhZGRfZnVuY19wcm90b1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0bWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcIm1haW5fZm5cIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChtYWluX2lkLCAwLCBcImFkZF9tYWluX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHN1Yl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcInN1Yl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHN1Yl9pZCwgMCwgXCJhZGRfc3ViX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCJjb3JlX3JlbG9fc3VicHJvZ19wb2lzb25fbWlzc2luZ1wiLCA0KTtcbitcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwiYWRkX2VudW1cIikgfHxcbitcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcInZhbHVlXCIsIDApLCBcImFkZF9lbnVtX3ZhbHVlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwiMFwiKTtcbitcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcImFkZF9hY2Nlc3Nfc3RyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRyYXdfYnRmID0gYnRmX19yYXdfZGF0YShidGYsIFx1MDAyNnJhd19idGZfc2l6ZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCJyYXdfYnRmXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRidGZfZmQgPSBicGZfYnRmX2xvYWQocmF3X2J0ZiwgcmF3X2J0Zl9zaXplLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXCJidGZfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogVGhlIHNhbWUgdHdvLXN1YnByb2dyYW0gcHJvZ3JhbSBpcyB2YWxpZCBiZWZvcmUgdGhlIHJlbG9jYXRpb24uICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRwcm9nX2ZkID0gLTE7XG4rXG4rXHQvKlxuK1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XG4rXHQgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy5cbitcdCAqL1xuK1x0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXG4rXHRcdFx0XHRcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XG4rXHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcInBvaXNvbmVkX2xvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCJmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuIDIgdG8gM1wiLFxuK1x0XHRcdCAgXCJwb2lzb25lZF9sb2FkX2xvZ1wiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxcblwiKTtcbitcdFx0cHJpbnRmKFwiJXNcIiwgbG9nKTtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcblwiKTtcbitcdH1cbitcdGNsb3NlKHByb2dfZmQpO1xuK1x0Y2xvc2UoYnRmX2ZkKTtcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbitcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxuIFxuIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKVxuIHtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCIpKVxuK1x0XHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJiYWRfbG9jYWxfaWRcIikpXG4gXHRcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDIzZTEzOTA4Y2ViZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSwxMjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK3N0cnVjdCBicGZfbWFwO1xuK1xuK3N0cnVjdCBsb2NrX3ZhbHVlIHtcbitcdHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4rfTtcbitcbitzdHJ1Y3QgaW5uZXJfbG9ja19tYXAge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gaW5uZXJfbG9ja19tYXBfYSBTRUMoXCIubWFwc1wiKSwgaW5uZXJfbG9ja19tYXBfYiBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7XG4rfSBsb2NrX21hcF9vZl9tYXBzIFNFQyhcIi5tYXBzXCIpID0ge1xuK1x0LnZhbHVlcyA9IHtcbitcdFx0WzBdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcbitcdFx0WzFdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYixcbitcdH0sXG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gbG9ja19tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IGNhbGxiYWNrX2N0eCB7XG4rXHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHRcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHN0cnVjdCBjYWxsYmFja19jdHggKmN0eClcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V2YWx1ZS1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiY2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcIilcbitfX2ZhaWx1cmUgX19tc2coXCJicGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcIilcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1x0aW50IGlubmVyX2tleSA9IDE7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0aW50IGlubmVyX2tleSA9IDA7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19kZXNjcmlwdGlvbihcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5X3NhbWUodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX3NhbWVfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbmluZGV4IDBiODZkOTVhNDEzMzUuLjY5MmE4NDY4ZjNkNzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuQEAgLTUsNiArNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiWERQIHBrdCByZWdzYWZlIHByZXNlcnZlcyBwYWNrZXQgcG9pbnRlciBjbGFzcyBkaXNwbGFjZW1lbnRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcIilcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcbitfX25ha2VkIHZvaWQgcGt0X3JlZ3NhZmVfY2xhc3NfZGlzcGxhY2VtZW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlxcXG4rXHRyOCA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcXFxuK1x0cjkgPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFdKTtcXFxuK1x0cjYgPSByOTtcXFxuK1x0cjYgKz0gODtcXFxuK1x0aWYgcjYgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHI5ICsgMCk7XFxcbitcdHI0ID0gcjA7XFxcbitcdHI0IFx1MDAyNj0gMTU7XFxcbitcdHI3ID0gcjA7XFxcbitcdHI3IFx1MDAzZVx1MDAzZT0gNjM7XFxcbitcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzICs9IDQ7XFxcbitcdGdvdG8gbF9qb2luXyU9O1xcXG4rbF9wYXRoX2JfJT06IFxcXG4rXHRyNCBcdTAwMjY9IDM7XFxcbitcdHI0ICs9IDg7XFxcbitcdHIyID0gcjk7XFxcbitcdHIyICs9IHI0O1xcXG4rXHRyMyA9IHIyO1xcXG4rXHRyMyAtPSA0O1xcXG4rbF9qb2luXyU9OiBcXFxuK1x0cjUgPSByMztcXFxuK1x0cjUgKz0gNDtcXFxuK1x0aWYgcjUgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHIyICsgMCk7XFxcbitsX2V4aXRfJT06IFxcXG4rXHRyMCA9IDA7XFxcbitcdGV4aXQ7XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxuK1x0ICBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YV9lbmQsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGFfZW5kKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIFNFQyhcInhkcFwiKVxuIF9fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlYWQsIHBrdF9lbmQgbWFuZ2xpbmcsIGJhZCBhY2Nlc3MgMVwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlIzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kXCIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowNC4xNDE1NTEyMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTA1NTQxNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEJQRiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGNyYW5rIHVwIHRoZSBLTVNBTiBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHJlbGF0ZWQgc3Vic3lzdGVtcywgd2hpY2ggaXMgZ29vZC4gQnV0LCB3ZSBoYXZlIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgc2V2ZXJhbCBtb2RpZmljYXRpb25zIGFjcm9zcyB2YXJpb3VzIEJQRiBjb21wb25lbnRzOiBjaGFuZ2VzIHRvIGBicGZfaWRfcGFpcmAsIGNvbnRyb2wgZmxvdyBhbmQgZmFsbC10aHJvdWdoIGNoZWNrcywgcHJlZW1wdGlvbiBjaGVja3MsIHBhY2tldCBwb2ludGVyIHN0YXRlIG1hbmFnZW1lbnQgd2l0aGluIElEIGNsYXNzZXMsIGFuZCBzcGlubG9jayB0cmFja2luZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBmb2N1cyBpcyBvbiBlbmhhbmNpbmcgdGhlIHZlcmlmaWVyJ3MgY29ycmVjdG5lc3MsIGNvbmN1cnJlbmN5LCBhbmQgcm9idXN0bmVzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQ08tUkUgcmVsb2NhdGlvbnMsIHByZWVtcHRpb24sIGFuZCBzdGF0ZSBwcnVuaW5nLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyBhbnkgb2YgdGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gS01TQU4gaXMgb3VyIGJlc3QgZnJpZW5kIGZvciBjYXRjaGluZyB0aGF0LiBMZXQncyBhbmFseXplIHRoZSBhcmVhcyBvZiBtb2RpZmljYXRpb24gb25lIGJ5IG9uZS5cblxuVGhlIGFkZGl0aW9uIG9mIGBwa3RfcHRyX2RlbHRhYCBhbmQgYHBrdF9wdHJfZGVsdGFfc2V0YCB0byBgc3RydWN0IGJwZl9pZF9wYWlyYCBoYXMgbXkgaW1tZWRpYXRlIGF0dGVudGlvbi4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaW5pdGlhbGl6ZXMgYHBrdF9wdHJfZGVsdGFfc2V0YCB0byBgZmFsc2VgIGluIGBjaGVja19pZHMoKWAgaXMgYSBnb29kIHNpZ24uIEJ1dCwgSSBtdXN0IHZlcmlmeSB3aGVyZSBgc3RydWN0IGJwZl9pZG1hcGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGVsc2V3aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdCBpcyBrZXkgdG8gZGV0ZXJtaW5pbmcgYW55IEtNU0FOIHJpc2suIEl0IGNvdWxkIGJlIHBvc3NpYmxlIHRoZXJlIGlzIGEgY2FzZSBmb3IgYSBtb3JlIGluLWRlcHRoIGxvb2sgdXNpbmcgS01TQU4uXG5cblRoZSBvdGhlciBjaGFuZ2VzIGxvb2sgbGlrZSB2ZXJpZmllciBpbXByb3ZlbWVudHMgYW5kIGNvcnJlY3RuZXNzIGZpeGVzLiBXaGlsZSB2YWx1YWJsZSwgdGhleSBzZWVtIGxlc3MgbGlrZWx5IHRvIGRpcmVjdGx5IHRyaWdnZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBidXQgbXVzdCBiZSBhc3Nlc3NlZCB0byBjb25maXJtLiBUaGUgY2hlY2tzIGZvciBgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIGFuZCBgY29uZF9yZXNjaGVkKClgIGFyZSBtb3JlIGxpa2VseSB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgYnVncywgb3IgZW5zdXJlIHByb3BlciBiZWhhdmlvciBkdXJpbmcgYXN5bmNocm9ub3VzIGV2ZW50cy5cblxuSSB0aGluayBJJ2xsIGxlYW4gdG93YXJkcyB0aGUgYE5lZWRzS01TQU49ZmFsc2VgIGZvciBub3csIGJ1dCB3aWxsIG1ha2Ugc3VyZSB0byBjaGVjayB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYGJwZl9pZG1hcGAgYW5kIGBicGZfaWRfcGFpcmAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowOS42NDcxMDAyMDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTg3OTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaWRtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTMwMj1zdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzE4LSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MzE5OnN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMyMC17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM1Nj1zdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzU3LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzozNTg6XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zNTkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTctICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0MTg6c3RhdGljIGJvb2wgY2hlY2tfc2NhbGFyX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQxOS17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUyNj1zdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI3LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUyODpcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01Mjkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01NDI9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjU0MzpcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTQ0LVxcdFxcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz03Mzc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzM4OlxcdFxcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTczOS1cXHRcXHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04ODI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4ODM6XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODg0LVxcdFxcdFxcdCAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTA1OlxcdFxcdCAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkwNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAwOC17XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDA5OlxcdHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwID0gXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTAtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTQzNz1zdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ0Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ0NzpzdGF0aWMgaW50IGlkc3RhY2tfcHVzaChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCwgdTMyIGlkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQ4LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDY0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDY1OnN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0NzQ9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ3Ny1cXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXFx1MDAzZWN1cl9zdGF0ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ3ODpcXHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ3OS1cXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDkuNzk2OTg5MzQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjUzMzU5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBCUEYgZGV2ZWxvcG1lbnQ6XG5cbioqRXhhbWluaW5nIGBjaGVja19pZHNgIGFuZCBgY2hlY2tfcGt0X3B0cl9pZHNgKipcblxuUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIHRhc2sgYXQgaGFuZCBpcyBjbGVhcmx5IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgaGFuZGxpbmcgSUQgY2hlY2tzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGBjaGVja19pZHNgIGFuZCBgY2hlY2tfcGt0X3B0cl9pZHNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIHdvcmssIHRoZWlyIHB1cnBvc2UsIGFuZCB3aGF0IGRhdGEgdGhleSdyZSBtYW5pcHVsYXRpbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRoZSBjb2RlIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGRhdGEgc3RydWN0dXJlcyB1c2VkIGFuZCB0aGUgbG9naWMgaW52b2x2ZWQgaW4gdmFsaWRhdGluZyB0aGVzZSBJRHMgYW5kIHBhY2tldCBwb2ludGVyIElEcy4gVGhpcyBtaWdodCBpbnZvbHZlIGxvb2tpbmcgYXQgdGhlaXIgY2FsbCBzaXRlcyBhbmQgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIFVuZGVyc3RhbmRpbmcgdGhlaXIgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGFueSBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMgcmVsYXRlZCB0byB0aGlzIHBhcnQgb2YgdGhlIEJQRiBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxMi4xMjIzMjg5NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE1OlxcdCAqIHRoYXQuXFxuIDMxNjpcXHQgKiBTbyB3ZSBsb29rIHRocm91Z2ggb3VyIGlkbWFwIHRvIHNlZSBpZiB0aGlzIG9sZCBpZCBoYXMgYmVlbiBzZWVuIGJlZm9yZS4gIElmXFxuIDMxNzpcXHQgKiBzbywgd2UgcmVxdWlyZSB0aGUgbmV3IGlkIHRvIG1hdGNoOyBvdGhlcndpc2UsIHdlIGFkZCB0aGUgaWQgcGFpciB0byB0aGUgbWFwLlxcbiAzMTg6XFx0ICovXFxuIDMxOTpcXHRzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDMyMDpcXHR7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgYnBmX2lkX3BhaXIgKm1hcCA9IGlkbWFwLVxcdTAwM2VtYXA7XFxuIDMyMjpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0LyogZWl0aGVyIGJvdGggSURzIHNob3VsZCBiZSBzZXQgb3IgYm90aCBzaG91bGQgYmUgemVybyAqL1xcbiAzMjU6XFx0XFx0aWYgKCEhb2xkX2lkICE9ICEhY3VyX2lkKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRpZiAob2xkX2lkID09IDApIC8qIGN1cl9pZCA9PSAwIGFzIHdlbGwgKi9cXG4gMzI5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaWRtYXAtXFx1MDAzZWNudDsgaSsrKSB7XFxuIDMzMjpcXHRcXHRcXHRpZiAobWFwW2ldLm9sZCA9PSBvbGRfaWQpXFxuIDMzMzpcXHRcXHRcXHRcXHRyZXR1cm4gbWFwW2ldLmN1ciA9PSBjdXJfaWQ7XFxuIDMzNDpcXHRcXHRcXHRpZiAobWFwW2ldLmN1ciA9PSBjdXJfaWQpXFxuIDMzNTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDMzNjpcXHRcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdC8qIFJlYWNoZWQgdGhlIGVuZCBvZiBrbm93biBtYXBwaW5nczsgaGF2ZW4ndCBzZWVuIHRoaXMgaWQgYmVmb3JlICovXFxuIDMzOTpcXHRcXHRpZiAoaWRtYXAtXFx1MDAzZWNudCBcXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xcbiAzNDA6XFx0XFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLm9sZCA9IG9sZF9pZDtcXG4gMzQxOlxcdFxcdFxcdG1hcFtpZG1hcC1cXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XFxuIDM0MjpcXHRcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcXG4gMzQzOlxcdFxcdFxcdGlkbWFwLVxcdTAwM2VjbnQrKztcXG4gMzQ0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzNDU6XFx0XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHQvKlxcbiAzNDg6XFx0XFx0ICogaWRtYXAgc2xvdHMgYXJlIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgYW5kIHN0YWNrIHNsb3RzLlxcbiAzNDk6XFx0XFx0ICogU2luY2UgcmVmZXJlbmNlZCBkeW5wdHJzIGFjcXVpcmUgaW50ZXJtZWRpYXRlIHJlZmVyZW5jZXMgdGhhdCBkb1xcbiAzNTA6XFx0XFx0ICogbm90IGxpdmUgaW4gZWl0aGVyLCBzbyB0aGUgbWFwIGNhbiBiZSBleGhhdXN0ZWQuIFNpbmNlIGl0IGlzIHVubGlrZWx5LFxcbiAzNTE6XFx0XFx0ICogZmFpbCB0aGUgdmVyaWZpY2F0aW9uIGJ5IHRyZWF0aW5nIHRoZSBzdGF0ZXMgYXMgbm90IGVxdWl2YWxlbnQuXFxuIDM1MjpcXHRcXHQgKi9cXG4gMzUzOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzU0OlxcdH1cXG4gMzU1OlxcdFxcbiAzNTY6XFx0c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG4gMzU3OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXFxuIDM1ODpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gMzU5OlxcdHtcXG4gMzYwOlxcdFxcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXFx1MDAzZW1hcDtcXG4gMzYxOlxcdFxcdHM2NCBkZWx0YTtcXG4gMzYyOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHRpZiAoIWNoZWNrX2lkcyhvbGQtXFx1MDAzZWlkLCBjdXItXFx1MDAzZWlkLCBpZG1hcCkpXFxuIDM2NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM2NjpcXHRcXHRpZiAoIW9sZC1cXHUwMDNlaWQpXFxuIDM2NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0LypcXG4gMzcwOlxcdFxcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXFxuIDM3MTpcXHRcXHQgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLlxcbiAzNzI6XFx0XFx0ICogUGFja2V0IHBvaW50ZXIgb2Zmc2V0cyBhcmUgYm91bmRlZCBieSBCUEZfTUFYX1ZBUl9PRkYsIHNvIHRoZSBkZWx0YVxcbiAzNzM6XFx0XFx0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cXG4gMzc0OlxcdFxcdCAqL1xcbiAzNzU6XFx0XFx0ZGVsdGEgPSAoczY0KShjdXItXFx1MDAzZXI2NC5iYXNlIC0gb2xkLVxcdTAwM2VyNjQuYmFzZSk7XFxuIDM3NjpcXHRcXHRpZiAoZGVsdGEgXFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFxcdTAwM2UgUzMyX01BWClcXG4gMzc3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKykge1xcbiAzODA6XFx0XFx0XFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVxcdTAwM2VpZClcXG4gMzgxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzODI6XFx0XFx0XFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcXG4gMzgzOlxcdFxcdFxcdFxcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XFxuIDM4NDpcXHRcXHRcXHRcXHRtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlO1xcbiAzODU6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDM4NjpcXHRcXHRcXHR9XFxuIDM4NzpcXHRcXHRcXHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XFxuIDM4ODpcXHRcXHR9XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzkxOlxcdH1cXG4gMzkyOlxcdFxcbiAzOTM6XFx0LypcXG4gMzk0OlxcdCAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXFxuIDM5NTpcXHQgKlxcbiAzOTY6XFx0ICogV2hlbiBvbGRfaWQgPT0gMCwgdGhlIG9sZCByZWdpc3RlciBpcyBpbmRlcGVuZGVudCAtIG5vdCBsaW5rZWQgdG8gYW55XFxuIDM5NzpcXHQgKiBvdGhlciByZWdpc3Rlci4gQW55IGxpbmtpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgb25seSBhZGRzIGNvbnN0cmFpbnRzLFxcbiAzOTg6XFx0ICogbWFraW5nIGl0IG1vcmUgcmVzdHJpY3RpdmUuIFNpbmNlIHRoZSBvbGQgc3RhdGUgZGlkbid0IHJlbHkgb24gYW55IElEXFxuIDM5OTpcXHQgKiByZWxhdGlvbnNoaXBzIGZvciB0aGlzIHJlZ2lzdGVyLCBpdCdzIGFsd2F5cyBzYWZlIHRvIGFjY2VwdCBjdXIgcmVnYXJkbGVzc1xcbiA0MDA6XFx0ICogb2YgaXRzIElELiBIZW5jZSwgcmV0dXJuIHRydWUgaW1tZWRpYXRlbHkuXFxuIDQwMTpcXHQgKlxcbiA0MDI6XFx0ICogV2hlbiBvbGRfaWQgIT0gMCBidXQgY3VyX2lkID09IDAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgZGlmZmVyZW50XFxuIDQwMzpcXHQgKiBpbmRlcGVuZGVudCByZWdpc3RlcnMgaW4gY3VyIGRvbid0IGluY29ycmVjdGx5IHNhdGlzZnkgdGhlIElEIG1hdGNoaW5nXFxuIDQwNDpcXHQgKiByZXF1aXJlbWVudHMgb2YgbGlua2VkIHJlZ2lzdGVycyBpbiBvbGQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjEyLjEyMjU5MjI2OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2MzMzOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBJRCBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIG1hbmFnaW5nIHBhY2tldCBJRHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjaGVja19pZHNgIGZ1bmN0aW9uIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYGlkbWFwYCBzdHJ1Y3R1cmUuIEl0IHNlZW1zIGxpa2UgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGBtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO2Agd2hlbiBhZGRpbmcgYSBuZXcgSUQgcGFpciBhdCBgaWRtYXAtXHUwMDNlY250YCBpcyB0aGUga2V5IHRoaW5nIHRvIGZvY3VzIG9uIGhlcmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIGJ1ZyBwb3RlbnRpYWwuXG5cbk5vdywgSSBhbHNvIG5lZWQgdG8gdHJhY2sgdGhlIGBpZHN0YWNrYCBvcGVyYXRpb25zIHdpdGhpbiBgdmVyaWZpZXIuY2AuIFB1c2hpbmcgYW5kIHBvcHBpbmcgZnJvbSB0aGUgYGlkc3RhY2tgIGlzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseSwgc28gSSBuZWVkIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUgbG9naWMuIExldCdzIHN0YXJ0IGJ5IGNsb3NlbHkgZXhhbWluaW5nIHRoZSBgaWRzdGFja19wdXNoYCBmdW5jdGlvbi4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBsaWUgd2l0aCBJRCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxNC4xNTg5Mjg0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk0NDA6XFx0XFxuOTQ0MTpcXHRcXHRlcnIgPSBfX3JlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xcbjk0NDI6XFx0XFx0aWYgKCFlcnIpXFxuOTQ0MzpcXHRcXHRcXHRicGZfZGlhZ19yZWNvcmRfcmVmX3JlbGVhc2UoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBpZCk7XFxuOTQ0NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjk0NDU6XFx0fVxcbjk0NDY6XFx0XFxuOTQ0NzpcXHRzdGF0aWMgaW50IGlkc3RhY2tfcHVzaChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCwgdTMyIGlkKVxcbjk0NDg6XFx0e1xcbjk0NDk6XFx0XFx0aW50IGk7XFxuOTQ1MDpcXHRcXG45NDUxOlxcdFxcdGlmICghaWQpXFxuOTQ1MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG45NDUzOlxcdFxcbjk0NTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKylcXG45NDU1OlxcdFxcdFxcdGlmIChpZG1hcC1cXHUwMDNlbWFwW2ldLm9sZCA9PSBpZClcXG45NDU2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjk0NTc6XFx0XFxuOTQ1ODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGlkbWFwLVxcdTAwM2VjbnQgXFx1MDAzZT0gQlBGX0lEX01BUF9TSVpFKSlcXG45NDU5OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjk0NjA6XFx0XFxuOTQ2MTpcXHRcXHRpZG1hcC1cXHUwMDNlbWFwW2lkbWFwLVxcdTAwM2VjbnQrK10ub2xkID0gaWQ7XFxuOTQ2MjpcXHRcXHRyZXR1cm4gMDtcXG45NDYzOlxcdH1cXG45NDY0OlxcdFxcbjk0NjU6XFx0c3RhdGljIGludCBpZHN0YWNrX3BvcChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG45NDY2OlxcdHtcXG45NDY3OlxcdFxcdGlmICghaWRtYXAtXFx1MDAzZWNudClcXG45NDY4OlxcdFxcdFxcdHJldHVybiAwO1xcbjk0Njk6XFx0XFxuOTQ3MDpcXHRcXHRyZXR1cm4gaWRtYXAtXFx1MDAzZW1hcFstLWlkbWFwLVxcdTAwM2VjbnRdLm9sZDtcXG45NDcxOlxcdH1cXG45NDcyOlxcdFxcbjk0NzM6XFx0LyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXFxuOTQ3NDpcXHRzdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZClcXG45NDc1OlxcdHtcXG45NDc2OlxcdFxcdHUzMiBtYXNrID0gKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfRFlOUFRSKTtcXG45NDc3OlxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbjk0Nzg6XFx0XFx0c3RydWN0IGJwZl9pZG1hcCAqaWRzdGFjayA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxuOTQ3OTpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTQuMTU5NzIyMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA4Mzk1MjY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEtNU0FOIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgZm9jdXNlZCBvbiBgaWRzdGFja19wdXNoYCBhbmQgYGlkc3RhY2tfcG9wYCwgdmVyaWZ5aW5nIHRoZXkgb25seSB0b3VjaCBgaWRtYXAtXHUwMDNlY250YCBhbmQgYG9sZGAuIFRoYXTigJlzIGEgY2xlYW4gc3RhcnQuXG5cblRoZW4sIEkgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgcGF0Y2g6IGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KClgLCBgcHVzaF9pbnNuKClgLCBgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoKWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MoKWAsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoKWAsIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKClgLCBhbmQgYGJwZl9jaGVjaygpYC4gRWFjaCBjaGFuZ2Ugd2FzIGNhcmVmdWxseSBzY3J1dGluaXplZC5cblxuVGhlIGtleSB3YXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBJIHdlbnQgdGhyb3VnaCBhIHJpZ29yb3VzIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZToqKiBEb2VzIHRoZSBwYXRjaCB0b3VjaCBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUsIG5vIHN1Y2ggY2hhbmdlcyBoZXJlLiBObyBgY29weV90b191c2VyYCwgbm8gbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGxzIGFyZSBhZmZlY3RlZC4gV2UncmUgaW4gdGhlIGNsZWFyLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIERvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyBOby4gSSBjaGVja2VkIGFsbCB0aGUgdmFyaWFibGVzIHVzZWQgKGxpa2UgYHN1YnByb2dgLCBgZGVsdGFgLCBhbmQgYGlgKSBhbmQgdmVyaWZpZWQgdGhleSdyZSBhbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgdGhlIGRlbHRhIGNhbGN1bGF0aW9uIGFuZCB0aGUgdXNlIG9mIGBwa3RfcHRyX2RlbHRhYCB3aXRoaW4gYGNoZWNrX3BrdF9wdHJfaWRzYCBhcmUgc291bmQuIFRoZSBgcGt0X3B0cl9kZWx0YV9zZXRgIGJvb2xlYW4gcHJldmVudHMgYSByZWFkIG9mIHRoZSBkZWx0YSBwcmlvciB0byBpdCBiZWluZyBzZXQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIEFyZSB0aGVyZSBhbnkgbmV3IGFsbG9jYXRpb25zIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkIGFuZCByZWFkIGxhdGVyPyBObyBuZXcgYWxsb2NhdGlvbnMuIFRoZSBmaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCBicGZfaWRfcGFpcmAgYXJlIHByb3Blcmx5IHNldC5cbjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBhY2Nlc3NlczoqKiBDb3VsZCB0aGUgY2hhbmdlcyBhZmZlY3QgYm91bmRzIGNoZWNrcyBhbmQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSByZWFkcz8gTm90IGluIHRoaXMgY2FzZS4gVGhlIGNoYW5nZXMgKnRpZ2h0ZW4qIEJQRiB2ZXJpZmllciBjaGVja3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyDigJMgcHJldmVudGluZyBmYWxsdGhyb3VnaCwgaW5jb3JyZWN0IHBhY2tldCBwb2ludGVyIHN0YXRlLCBwcmVzZXJ2aW5nIHNwaW5sb2NrIGlkZW50aXRpZXMsIGFuZCBncmFjZWZ1bCBjYW5jZWxsYXRpb24uIFRoaXMgbGVhZHMgdG8gKmZld2VyKiBidWdzLCBub3QgbW9yZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSB2ZXJpZmllciBjaGFuZ2VzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IGxvZ2ljIGFuZCBieXRlY29kZSB2ZXJpZmljYXRpb24uIFRoZSBwb3RlbnRpYWwgYnVncyBhcmUgbW9yZSBsaWtlbHkgbG9naWNhbCB2ZXJpZmljYXRpb24gZXJyb3JzLCBvciBtZW1vcnkgc2FmZXR5IGJ1Z3MgKHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoKS4gU28sIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5Ob3cgSSBuZWVkIHRvIHdyaXRlIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgcmF0aW9uYWxlIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDY3LCJPdXRwdXRUb2tlbnMiOjI4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjIwLjI0MzY3OTIyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgaW50ZXJuYWwgY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbXByb3ZlbWVudHMgdG8gdGhlIEJQRiB2ZXJpZmllciBhbmQgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIHBhc3NlczpcXG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxcbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxcbjMuIEVuaGFuY2VzIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcgaW4gc3RhdGVzLmMgZm9yIHBhY2tldCBwb2ludGVycyBieSB0cmFja2luZyBpbnRyYS1jbGFzcyBwb2ludGVyIGRpc3BsYWNlbWVudCAocGt0X3B0cl9kZWx0YSAvIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikuXFxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbW9kaWZ5IGtlcm5lbCBkYXRhIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeS4gQWxsIG5ld2x5IGFkZGVkIHN0cnVjdCBmaWVsZHMgKHN1Y2ggYXMgcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9naWMgcmVncmVzc2lvbnMgKGUuZy4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdmVyaWZpZXIgc3RhdGUgYnVncykgZmFsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOL3ZlcmlmaWVyIHRlc3Qgc3VpdGVzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxcbjEuIEFkZHMgYSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGZhbGx0aHJvdWdoIGNoZWNrIGluIGNmZy5jIHRvIGVuc3VyZSBDTy1SRSByZWxvY2F0aW9ucyBjYW5ub3QgdmlvbGF0ZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuXFxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXFxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cXG40LiBDb3JyZWN0cyBzcGlubG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgaW5uZXIgbWFwIGxvb2t1cHMgYW5kIGNhbGxiYWNrIGFyZ3VtZW50IHN0YXRlcyBpbiB2ZXJpZmllci5jLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 11:53:31 +0000 UTC FinishedAt: 2026-09-06 11:56:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "54033bdc-d4fd-4997-a132-ece393b35a2c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "regsafe", "check_pkt_ptr_ids", "bpf_patch_insn_data", "verifier_remove_insns", "refine_map_lookup_value", "map_set_for_each_callback_args", "set_timer_callback_state", "set_task_work_schedule_callback_state", "push_insn" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7Y2hlY2tfcGt0X3B0cl9pZHMmIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXJpZmllcl9yZW1vdmVfaW5zbnMmIzM0OywKICAgICYjMzQ7cmVmaW5lX21hcF9sb29rdXBfdmFsdWUmIzM0OywKICAgICYjMzQ7bWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzJiMzNDssCiAgICAmIzM0O3NldF90aW1lcl9jYWxsYmFja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3B1c2hfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGludGVybmFsIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW1wcm92ZW1lbnRzIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXM6XG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXG4zLiBFbmhhbmNlcyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nIGluIHN0YXRlcy5jIGZvciBwYWNrZXQgcG9pbnRlcnMgYnkgdHJhY2tpbmcgaW50cmEtY2xhc3MgcG9pbnRlciBkaXNwbGFjZW1lbnQgKHBrdF9wdHJfZGVsdGEgLyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpLlxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1vZGlmeSBrZXJuZWwgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuIEFsbCBuZXdseSBhZGRlZCBzdHJ1Y3QgZmllbGRzIChzdWNoIGFzIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvZ2ljIHJlZ3Jlc3Npb25zIChlLmcuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHZlcmlmaWVyIHN0YXRlIGJ1Z3MpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTi92ZXJpZmllciB0ZXN0IHN1aXRlcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFjcm9zcyBzZXZlcmFsIGZpbGVzOlxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cbjMuIGtlcm5lbC9icGYvY2ZnLmM6IEFkZHMgZmFsbHRocm91Z2ggdmFsaWRhdGlvbiBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyaWVzIGluIHB1c2hfaW5zbigpLlxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgcmVhY2hhYmxlIHZpYSBzeXNfYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIHN0YXRlIHBydW5pbmcgY29ycmVjdG5lc3MsIHZlcmlmaWVyIGVkZ2UgY2FzZXMsIGFuZCBsb2NrIHNhZmV0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0ZDI2NjdhYjVkODgwOTE3OWQyOGQ5MzUxMDU0ODM0YWQxZWI5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuJiM0MztcdHMzMiBwa3RfcHRyX2RlbHRhO1xuJiM0MztcdGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2lkbWFwIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggODQyYzdkMWVhYmNjYy4uZTNjOTA0MzI4ZWRlMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC0xMDIsNiAmIzQzOzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICYjNDM7MTIyLDI2IEBAIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuJiM0MztcdCAqIHN1YnByb2dyYW0gYm91bmRhcnksIGJ1dCBydW5zIGJlZm9yZSBDTy1SRSByZWxvY2F0aW9ucyBjYW4gcmV3cml0ZSBhblxuJiM0MztcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbiYjNDM7XHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbiYjNDM7XHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbiYjNDM7XHRcdGlmICh3IFx1MDAzYyBzdWJwcm9nLVx1MDAzZXN0YXJ0IHx8IHcgXHUwMDNlPSAoc3VicHJvZyAmIzQzOyAxKS1cdTAwM2VzdGFydCkge1xuJiM0MztcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCYjMzQ7JWQ6IFwmIzM0OywgdCk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuICVkIHRvICVkXFxuXCYjMzQ7LCB0LCB3KTtcbiYjNDM7XHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4mIzQzO1x0XHRcdFx0ZW52LCB0LCBcJiMzNDtmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDtJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHQsIHcpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZGlzYXNtLmhcJiMzNDtcbiBcbkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbiYjNDM7ICogTyhwcm9nLVx1MDAzZWxlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlc1xuJiM0MzsgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuJiM0MztcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gJiM0MzsgbGVuIC0gMSxcbkBAIC01MjMsNiAmIzQzOzU0MCw5IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuIFx0aWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgpKVxuIFx0XHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcbiBcbkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgJiM0MzszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4mIzQzO1x0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO1xuIFx0XHRpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuJiM0MztcdHM2NCBkZWx0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19pZHMob2xkLVx1MDAzZWlkLCBjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIW9sZC1cdTAwM2VpZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXG4mIzQzO1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbiYjNDM7XHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4mIzQzO1x0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4mIzQzO1x0aWYgKGRlbHRhIFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFx1MDAzZSBTMzJfTUFYKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZG1hcC1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobWFwW2ldLm9sZCAhPSBvbGQtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDb21wYXJlIHNjYWxhciByZWdpc3RlciBJRHMgZm9yIHN0YXRlIGVxdWl2YWxlbmNlLlxuICAqXG5AQCAtNjMyLDggJiM0Mzs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4mIzQzO1x0XHRpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdC8qIG5ldyB2YWwgbXVzdCBzYXRpc2Z5IG9sZCB2YWwga25vd2xlZGdlICovXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAxYzMwMzlmM2ZjMzIzLi5hZDE0YTdmYmVkNzJmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JzZWFyY2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuQEAgLTQ0Nyw2ICYjNDM7NDQ4LDEzIEBAIHN0YXRpYyBib29sIHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gXHRyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQocmVnX2J0Zl9yZWNvcmQocmVnKSwgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhcmVnLVx1MDAzZW1hcF91aWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHR5cGVfaXNfcmRvbmx5X21lbSh1MzIgdHlwZSlcbiB7XG4gXHRyZXR1cm4gdHlwZSBcdTAwMjYgTUVNX1JET05MWTtcbkBAIC0xOTI1LDExICYjNDM7MTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0aWYgKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsO1xuIFx0XHRyZWctXHUwMDNlbWFwX3B0ciA9IG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YTtcbi1cdFx0LyogdHJhbnNmZXIgcmVnJiMzOTtzIGlkIHdoaWNoIGlzIHVuaXF1ZSBmb3IgZXZlcnkgbWFwX2xvb2t1cF9lbGVtXG4tXHRcdCAqIGFzIFVJRCBvZiB0aGUgaW5uZXIgbWFwLlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXG4mIzQzO1x0XHQgKiBQcmVzZXJ2ZSB0aGUgbG9va3VwIGlkZW50aXR5IG9ubHkgZm9yIGVtYmVkZGVkIG9iamVjdHMgd2hvc2VcbiYjNDM7XHRcdCAqIHZlcmlmaWNhdGlvbiBuZWVkcyB0byBkaXN0aW5ndWlzaCBjb25jcmV0ZSBtYXAgaW5zdGFuY2VzLiBEb2luZ1xuJiM0MztcdFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBFYWNoIG1hcCBsb29rdXAgaGFzIGEgdW5pcXVlIHJlZ2lzdGVyIElELCBzbyB1c2UgaXQgYXMgdGhlIFVJRCBvZlxuJiM0MztcdFx0ICogdGhlIGlubmVyIG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlaW5uZXJfbWFwX21ldGEtXHUwMDNlcmVjb3JkLFxuLVx0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspKVxuJiM0MztcdFx0XHRcdFx0IEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLIHxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spKVxuIFx0XHRcdHJlZy1cdTAwM2VtYXBfdWlkID0gcmVnLVx1MDAzZWlkO1xuIFx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUCkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IFBUUl9UT19YRFBfU09DSyB8IG1heWJlX251bGw7XG5AQCAtMTAwMzUsNiAmIzQzOzEwMDUwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xuJiM0MztcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuJiM0MztcdFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogcG9pbnRlciB0byBzdGFjayBvciBudWxsICovXG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18zXTtcbkBAIC0xMDEzMSw2ICYjNDM7MTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXG4mIzQzO1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuQEAgLTEwMjQ5LDYgJiM0MzsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXG4mIzQzO1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuQEAgLTIxMzY3LDYgJiM0MzsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSklUIGNvbnN0YW50IGJsaW5kaW5nIHRyZWF0cyBpbnN0cnVjdGlvbiBwYXRjaGluZyBmYWlsdXJlcyBhcyBhXG4mIzQzO1x0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcbiYjNDM7XHQgKiBjb25zdW1lIGEgZmF0YWwtc2lnbmFsIGNhbmNlbGxhdGlvbiBmcm9tIGJwZl9wYXRjaF9pbnNuX2RhdGEoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0cmV0ID0gLUVJTlRSO1xuIFxuIFx0ZW52LVx1MDAzZXZlcmlmaWNhdGlvbl90aW1lID0ga3RpbWVfZ2V0X25zKCkgLSBzdGFydF90aW1lO1xuIFx0cHJpbnRfdmVyaWZpY2F0aW9uX3N0YXRzKGVudik7XG5AQCAtMjE0MjUsNiAmIzQzOzIxNDU2LDggQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gMDtcbiBcbiBcdGVudi1cdTAwM2Vwcm9nID0gX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShlbnYsIGVudi1cdTAwM2Vwcm9nLCBcdTAwMjZyZXQpO1xuJiM0MztcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRyZXQgPSAtRUlOVFI7XG4gXG4gZXJyX3JlbGVhc2VfbWFwczpcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5AQCAtMTQsNiAmIzQzOzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuJiM0MztzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4mIzQzO1x0XHRcdFx0ICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4mIzQzO1x0XHRCUEZfQ0FMTF9SRUwoMiksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xuJiM0MztcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbiYjNDM7XHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4mIzQzO1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4mIzQzO1x0XHQudHlwZV9pZCA9IGVudW1faWQsXG4mIzQzO1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbiYjNDM7XHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuJiM0MztcdFx0Lmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksXG4mIzQzO1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4mIzQzO1x0XHQubGljZW5zZSA9IChfX3U2NClcJiMzNDtHUExcJiMzNDssXG4mIzQzO1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4mIzQzO1x0XHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcbiYjNDM7XHRcdC5sb2dfbGV2ZWwgPSAxLFxuJiM0MztcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXG4mIzQzO1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAocmVsb2NhdGUpIHtcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX2NudCA9IDE7XG4mIzQzO1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuJiM0MztcdH1cbiYjNDM7XHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4mIzQzO1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB2b2lkICpyYXdfYnRmO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4mIzQzO1x0X191MzIgcmF3X2J0Zl9zaXplO1xuJiM0MztcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4mIzQzO1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuJiM0MztcbiYjNDM7XHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9uZXdfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGludF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwmIzM0O2ludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgXCYjMzQ7YWRkX2ludFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCYjMzQ7YWRkX2Z1bmNfcHJvdG9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdG1haW5faWQgPSBidGZfX2FkZF9mdW5jKGJ0ZiwgXCYjMzQ7bWFpbl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QobWFpbl9pZCwgMCwgXCYjMzQ7YWRkX21haW5fZnVuY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwmIzM0O3N1Yl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcJiMzNDthZGRfc3ViX2Z1bmNcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcJiMzNDssIDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwmIzM0O2FkZF9lbnVtXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcJiMzNDt2YWx1ZVwmIzM0OywgMCksIFwmIzM0O2FkZF9lbnVtX3ZhbHVlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwmIzM0OzBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcJiMzNDthZGRfYWNjZXNzX3N0clwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCYjMzQ7cmF3X2J0ZlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcJiMzNDtidGZfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocHJvZ19mZCwgMCwgXCYjMzQ7Y29udHJvbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRwcm9nX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdFxuJiM0MztcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuJiM0MztcdCAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcJiMzNDtwb2lzb25lZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihsb2csIFwmIzM0O2ZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O3BvaXNvbmVkX2xvYWRfbG9nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslc1wmIzM0OywgbG9nKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UocHJvZ19mZCk7XG4mIzQzO1x0Y2xvc2UoYnRmX2ZkKTtcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICYjNDM7MjMxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9iYWRfbG9jYWxfaWQodm9pZClcbiBcbiB2b2lkIHRlc3RfY29yZV9yZWxvY19yYXcodm9pZClcbiB7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtiYWRfbG9jYWxfaWRcJiMzNDspKVxuIFx0XHR0ZXN0X2JhZF9sb2NhbF9pZCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggNjRhYzQ5YWQ2N2U2My4uNWM1NzJkZDcyNWU3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaFwmIzM0O1xuQEAgLTE4OCw2ICYjNDM7MTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4mIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZmcodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZmcpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZSh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmNcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX21hcDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBsb2NrX3ZhbHVlIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlubmVyX2xvY2tfbWFwIHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XG4mIzQzO30gaW5uZXJfbG9ja19tYXBfYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspLCBpbm5lcl9sb2NrX21hcF9iIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbG9ja19tYXApO1xuJiM0Mzt9IGxvY2tfbWFwX29mX21hcHMgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KSA9IHtcbiYjNDM7XHQudmFsdWVzID0ge1xuJiM0MztcdFx0WzBdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcbiYjNDM7XHRcdFsxXSA9IFx1MDAyNmlubmVyX2xvY2tfbWFwX2IsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuJiM0Mzt9IGxvY2tfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNldmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4mIzQzO1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsIFx1MDAyNmN0eCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Y2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDticGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcJiMzNDspXG4mIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfaW5uZXJfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4mIzQzO1x0aW50IGlubmVyX2tleSA9IDE7XG4mIzQzO1x0dm9pZCAqaW5uZXJfbWFwO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4mIzQzO1x0aWYgKCFpbm5lcl9tYXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtkaXN0aW5jdCBvbmUtZWxlbWVudCBpbm5lciBtYXBzIGhhdmUgZGlzdGluY3QgbG9jayBpZGVudGl0aWVzXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YnBmX3NwaW5fdW5sb2NrIG9mIGRpZmZlcmVudCBsb2NrXCYjMzQ7KVxuJiM0MztpbnQgY2FsbGJhY2tfaW5uZXJfbWFwX3ZhbHVlX2xvY2tfaWRlbnRpdHkodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlubmVyX2tleSA9IDA7XG4mIzQzO1x0dm9pZCAqaW5uZXJfbWFwO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4mIzQzO1x0aWYgKCFpbm5lcl9tYXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZ2YWx1ZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7bmVzdGVkIGNhbGxiYWNrIGNhbiBsb2NrIGl0cyBvd24gbWFwIHZhbHVlXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHlfc2FtZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbmluZGV4IDBiODZkOTVhNDEzMzUuLjY5MmE4NDY4ZjNkNzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuQEAgLTUsNiAmIzQzOzUsNTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiBcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZVwmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX0FOWV9BTElHTk1FTlQpXG4mIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XFxcbiYjNDM7XHRyOCA9ICoodTMyICopKHIxICYjNDM7ICVbeGRwX21kX2RhdGFfZW5kXSk7XFxcbiYjNDM7XHRyOSA9ICoodTMyICopKHIxICYjNDM7ICVbeGRwX21kX2RhdGFdKTtcXFxuJiM0MztcdHI2ID0gcjk7XFxcbiYjNDM7XHRyNiAmIzQzOz0gODtcXFxuJiM0MztcdGlmIHI2IFx1MDAzZSByOCBnb3RvIGxfZXhpdF8lPTtcXFxuJiM0MztcdHIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XFxcbiYjNDM7XHRyNCA9IHIwO1xcXG4mIzQzO1x0cjQgXHUwMDI2PSAxNTtcXFxuJiM0MztcdHI3ID0gcjA7XFxcbiYjNDM7XHRyNyBcdTAwM2VcdTAwM2U9IDYzO1xcXG4mIzQzO1x0aWYgcjcgIT0gMCBnb3RvIGxfcGF0aF9iXyU9O1xcXG4mIzQzO1x0cjIgPSByOTtcXFxuJiM0MztcdHIyICYjNDM7PSByNDtcXFxuJiM0MztcdHIzID0gcjI7XFxcbiYjNDM7XHRyMyAmIzQzOz0gNDtcXFxuJiM0MztcdGdvdG8gbF9qb2luXyU9O1xcXG4mIzQzO2xfcGF0aF9iXyU9OiBcXFxuJiM0MztcdHI0IFx1MDAyNj0gMztcXFxuJiM0MztcdHI0ICYjNDM7PSA4O1xcXG4mIzQzO1x0cjIgPSByOTtcXFxuJiM0MztcdHIyICYjNDM7PSByNDtcXFxuJiM0MztcdHIzID0gcjI7XFxcbiYjNDM7XHRyMyAtPSA0O1xcXG4mIzQzO2xfam9pbl8lPTogXFxcbiYjNDM7XHRyNSA9IHIzO1xcXG4mIzQzO1x0cjUgJiM0Mzs9IDQ7XFxcbiYjNDM7XHRpZiByNSBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbiYjNDM7XHRyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1xcXG4mIzQzO2xfZXhpdF8lPTogXFxcbiYjNDM7XHRyMCA9IDA7XFxcbiYjNDM7XHRleGl0O1xcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1fY29uc3QoeGRwX21kX2RhdGEsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGEpKSxcbiYjNDM7XHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3hkcFwmIzM0OylcbiBfX2Rlc2NyaXB0aW9uKFwmIzM0O1hEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMyBwb2ludGVyIGFyaXRobWV0aWMgb24gcGt0X2VuZFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O2NoZWNrX3BrdF9wdHJfaWRzJiMzNDssCiAgICAmIzM0O2JwZl9wYXRjaF9pbnNuX2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O3JlZmluZV9tYXBfbG9va3VwX3ZhbHVlJiMzNDssCiAgICAmIzM0O21hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyYjMzQ7LAogICAgJiMzNDtzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7c2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtwdXNoX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiB2ZXJpZmllciBzdWJzeXN0ZW0gYWNyb3NzIHNldmVyYWwgZmlsZXM6XG4xLiBrZXJuZWwvYnBmL3N0YXRlcy5jOiBBZGRzIGNoZWNrX3BrdF9wdHJfaWRzKCkgYW5kIG1vZGlmaWVzIHJlZ3NhZmUoKSB0byBwcmVzZXJ2ZSBkaXNwbGFjZW1lbnQgd2l0aGluIHBhY2tldCBwb2ludGVyIElEIGNsYXNzZXMgZHVyaW5nIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcuXG4yLiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmM6IEFkZHMgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoKSwgcmVmaW5lcyBzcGlubG9jayBtYXAgVUlEIHRyYWNraW5nIGluIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKCksIGdlbmVyYXRlcyB1bmlxdWUgcmVnaXN0ZXIgSURzIGZvciBzcGlubG9jay1jb250YWluaW5nIG1hcCB2YWx1ZXMgaW4gY2FsbGJhY2sgaGVscGVycyAobWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUsIHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUpLCBhbmQgYWRkcyBmYXRhbCBzaWduYWwgYWJvcnQgY2hlY2tzIGluIGJwZl9jaGVjaygpLlxuMy4ga2VybmVsL2JwZi9jZmcuYzogQWRkcyBmYWxsdGhyb3VnaCB2YWxpZGF0aW9uIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgaW4gcHVzaF9pbnNuKCkuXG40LiBrZXJuZWwvYnBmL2ZpeHVwcy5jOiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQpIHRvIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBhbmQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKCkuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciByZWFjaGFibGUgdmlhIHN5c19icGYoQlBGX1BST0dfTE9BRCkgYW5kIHdhcnJhbnQgZnV6emluZyBmb3Igc3RhdGUgcHJ1bmluZyBjb3JyZWN0bmVzcywgdmVyaWZpZXIgZWRnZSBjYXNlcywgYW5kIGxvY2sgc2FmZXR5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRkMjY2N2FiNWQ4ODA5MTc5ZDI4ZDkzNTEwNTQ4MzRhZDFlYjljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYWQxNGE3ZmJlZDcyZiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ic2VhcmNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3R5cGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJvci1pbmplY3Rpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfbHNtLmgmZ3Q7CkBAIC00NDcsNiAmIzQzOzQ0OCwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCXJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctJmd0O21hcF9wdHI7CiYjNDM7CiYjNDM7CXJldHVybiAhcmVnLSZndDttYXBfdWlkICZhbXA7JmFtcDsgbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xOTI1LDExICYjNDM7MTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCWlmIChtYXAtJmd0O2lubmVyX21hcF9tZXRhKSB7CiAJCXJlZy0mZ3Q7dHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsOwogCQlyZWctJmd0O21hcF9wdHIgPSBtYXAtJmd0O2lubmVyX21hcF9tZXRhOwotCQkvKiB0cmFuc2ZlciByZWcmIzM5O3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW0KLQkJICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuCiYjNDM7CQkvKgomIzQzOwkJICogQ29uY3JldGUgaW5uZXIgbWFwcyBzaGFyZSB0aGUgdmVyaWZpZXItdmlzaWJsZSBpbm5lcl9tYXBfbWV0YS4KJiM0MzsJCSAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZQomIzQzOwkJICogdmVyaWZpY2F0aW9uIG5lZWRzIHRvIGRpc3Rpbmd1aXNoIGNvbmNyZXRlIG1hcCBpbnN0YW5jZXMuIERvaW5nCiYjNDM7CQkgKiB0aGlzIGZvciBldmVyeSBpbm5lciBtYXAgbWFrZXMgc3RhdGUgcHJ1bmluZyB0b28gY29uc2VydmF0aXZlLgomIzQzOwkJICoKJiM0MzsJCSAqIEVhY2ggbWFwIGxvb2t1cCBoYXMgYSB1bmlxdWUgcmVnaXN0ZXIgSUQsIHNvIHVzZSBpdCBhcyB0aGUgVUlEIG9mCiYjNDM7CQkgKiB0aGUgaW5uZXIgbWFwLgogCQkgKi8KIAkJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC0mZ3Q7aW5uZXJfbWFwX21ldGEtJmd0O3JlY29yZCwKLQkJCQkJIEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLKSkKJiM0MzsJCQkJCSBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSyB8CiYjNDM7CQkJCQkgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSkKIAkJCXJlZy0mZ3Q7bWFwX3VpZCA9IHJlZy0mZ3Q7aWQ7CiAJfSBlbHNlIGlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHsKIAkJcmVnLSZndDt0eXBlID0gUFRSX1RPX1hEUF9TT0NLIHwgbWF5YmVfbnVsbDsKQEAgLTEwMDM1LDYgJiM0MzsxMDA1MCw5IEBAIGludCBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqLwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdID0gY2FsbGVyLSZndDtyZWdzW0JQRl9SRUdfM107CkBAIC0xMDEzMSw2ICYjNDM7MTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCV9fbWFya19yZWdfa25vd25femVybygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKTsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gbWFwX3VpZDsKJiM0MzsJaWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSkKJiM0MzsJCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuOwogCiAJLyogdW51c2VkICovCiAJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSk7CkBAIC0xMDI0OSw2ICYjNDM7MTAyNzAsOSBAQCBzdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMjEzNjcsNiAmIzQzOzIxMzkxLDEzIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBicGZfZml4dXBfY2FsbF9hcmdzKGVudik7CiYjNDM7CS8qCiYjNDM7CSAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYQomIzQzOwkgKiByZXF1ZXN0IHRvIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuIERvIG5vdCBsZXQgc3VjaCBmYWxsYmFjawomIzQzOwkgKiBjb25zdW1lIGEgZmF0YWwtc2lnbmFsIGNhbmNlbGxhdGlvbiBmcm9tIGJwZl9wYXRjaF9pbnNuX2RhdGEoKS4KJiM0MzsJICovCiYjNDM7CWlmIChyZXQgPT0gMCAmYW1wOyZhbXA7IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJcmV0ID0gLUVJTlRSOwogCiAJZW52LSZndDt2ZXJpZmljYXRpb25fdGltZSA9IGt0aW1lX2dldF9ucygpIC0gc3RhcnRfdGltZTsKIAlwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTsKQEAgLTIxNDI1LDYgJiM0MzsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCQllbnYtJmd0O3Byb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID0gMDsKIAogCWVudi0mZ3Q7cHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtJmd0O3Byb2csICZhbXA7cmV0KTsKJiM0MzsJaWYgKHJldCA9PSAwICZhbXA7JmFtcDsgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXQgPSAtRUlOVFI7CiAKIGVycl9yZWxlYXNlX21hcHM6CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDEyMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBicGZfbWFwOwomIzQzOwomIzQzO3N0cnVjdCBsb2NrX3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpbm5lcl9sb2NrX21hcCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBsb2NrX3ZhbHVlKTsKJiM0Mzt9IGlubmVyX2xvY2tfbWFwX2EgU0VDKCYjMzQ7Lm1hcHMmIzM0OyksIGlubmVyX2xvY2tfbWFwX2IgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7CiYjNDM7fSBsb2NrX21hcF9vZl9tYXBzIFNFQygmIzM0Oy5tYXBzJiMzNDspID0gewomIzQzOwkudmFsdWVzID0gewomIzQzOwkJWzBdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9hLAomIzQzOwkJWzFdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9iLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfaW5uZXJfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07CiYjNDM7CWludCBpbm5lcl9rZXkgPSAxOwomIzQzOwl2b2lkICppbm5lcl9tYXA7CiYjNDM7CiYjNDM7CWlubmVyX21hcCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtsb2NrX21hcF9vZl9tYXBzLCAmYW1wO2lubmVyX2tleSk7CiYjNDM7CWlmICghaW5uZXJfbWFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbShpbm5lcl9tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCAmYW1wO2N0eCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7ZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllcyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgaW5uZXJfa2V5ID0gMDsKJiM0MzsJdm9pZCAqaW5uZXJfbWFwOwomIzQzOwomIzQzOwlpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7bG9ja19tYXBfb2ZfbWFwcywgJmFtcDtpbm5lcl9rZXkpOwomIzQzOwlpZiAoIWlubmVyX21hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjEzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFJlY29tbWVuZGF0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgU3l6a2FsbGVyIGZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGRpZmYsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZzoKCkZpcnN0LCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGRlZXBlciBkaXZlLiBUaGUgY2hhbmdlcyB0b3VjaCB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllci4gSXQmIzM5O3Mgbm90IGp1c3QgYSBtaW5vciB0d2VhazsgdGhpcyBoaXRzIGNvcmUgbG9naWMgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBga2VybmVsL2JwZi9jZmcuY2AsIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgYGtlcm5lbC9icGYvc3RhdGVzLmNgKS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcuLi4gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5ISBUaGUgQlBGIHZlcmlmaWVyIGlzIGEgbWFzc2l2ZSBhdHRhY2sgc3VyZmFjZSBiZWNhdXNlIGl0JiMzOTtzIHRoZSBzZWN1cml0eSBib3VuZGFyeSBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgdGhlIGBCUEZfUFJPR19MT0FEYCBjb21tYW5kLiBBbnkgd2Vha25lc3MgaGVyZSBjb3VsZCBsZWFkIHRvIGRldmFzdGF0aW5nIGNvbnNlcXVlbmNlcy4KClNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0byBzdGF0ZSBwcnVuaW5nIChgcmVnc2FmZWAsIGBjaGVja19wa3RfcHRyX2lkc2ApLCB3aGljaCBoYW5kbGVzIHRyYWNraW5nIHJlZ2lzdGVyIHN0YXRlczsgdGhpcyBpcyBzdXBlciBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBhIGNvcmUgY29tcG9uZW50IG9mIHRoZSB2ZXJpZmllcuKAmXMgYWJpbGl0eSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIG90aGVyIG1lbW9yeSBlcnJvcnMuIFRoZW4gdGhlcmUmIzM5O3MgbG9jayB0cmFja2luZyBhY3Jvc3MgY2FsbGJhY2tzIChgcmVnX21heV9wb2ludF90b19zcGluX2xvY2tgKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBwcm90ZWN0aW5nIGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBUaGVyZSBhcmUgYWxzbyBuZXcgY2hlY2tzIGZvciBDRkcgc3VicHJvZ3JhbSBib3VuZGFyaWVzLCB3aGljaCBoZWxwcyBwcmV2ZW50IGNvbnRyb2wtZmxvdyBlcnJvcnMgYW5kIHBvdGVudGlhbCBieXBhc3NlcyBvZiB0aGUgdmVyaWZpZXIsIGFuZCBjaGVja3MgZm9yIGZhdGFsIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuIEFsbCBvZiB0aGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBjaGFuZ2VzIHRoYXQgZnJlcXVlbnRseSB1bmNvdmVyIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcy4KCkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXRzIGF0dGFjayBzdXJmYWNlLCB0aGlzIHBhdGNoIHNlcmllcyBkaXJlY3RseSBpbXBhY3RzIFNlY3Rpb24gMzogQ29yZSBTdWJzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgQlBGLCBpdHMgdmVyaWZpZXIsIHN0YXRlIHBydW5pbmcsIENGRyBjaGVja3MsIGxvY2sgdHJhY2tpbmcsIGFuZCBzaWduYWwgYWJvcnQgaGFuZGxpbmcuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgZnV6emluZyB3aXRoIGEgdG9vbCBsaWtlIFN5emthbGxlciBpcyBtb3N0IGVmZmVjdGl2ZS4KCk15IHJlY29tbWVuZGF0aW9uIGlzIGFuIHVuZXF1aXZvY2FsIFlFUyEgV2UgbmVlZCB0byBnZXQgU3l6a2FsbGVyIHBvaW50ZWQgYXQgdGhpcyAqaW1tZWRpYXRlbHkqLiBCZWZvcmUgd2UgZG8gdGhhdCB0aG91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgdGhlIEJQRiBzdWJzeXN0ZW0gb3Igc3BlY2lmaWMgQlBGIGZlYXR1cmVzLiBXZSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSBjeWNsZXMgYnkgZnV6emluZyBjb2RlIHRoYXQgaXNuJiMzOTt0IGJ1aWx0IG9yIGVuYWJsZWQuIEkmIzM5O2xsIHVzZSBjb2Rlc2VhcmNoL2dyZXAgb3IgcmVhZC1maWxlIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgYGtlcm5lbC9icGYvYCBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBUaGVuLCB3aXRoIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBjbGVhciwgbGV0JiMzOTtzIHN0YXJ0IGZ1enppbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTU4PWNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03NS1cdGRlZmF1bHQgeVxua2VybmVsL2JwZi9LY29uZmlnOjc2Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTc3LVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05Mj1jb25maWcgQlBGX0xTTVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy05NC1cdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xua2VybmVsL2JwZi9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN0YWNrbWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzItZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJldXNlcG9ydF9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc3RydWN0X29wcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjItXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJlbG9fY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX3JlbG9jYXRlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0ga21lbV9jYWNoZV9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRtYWJ1Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMDA9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE0My1cbmtlcm5lbC9icGYvY29yZS5jOjE0NDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQ2OD1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0NzEtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDcyOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTI0NzMtaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzAzNj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcbmtlcm5lbC9icGYvY29yZS5jLTMwMzcte1xua2VybmVsL2JwZi9jb3JlLmM6MzAzODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM5LVx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwNjItXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XG5rZXJuZWwvYnBmL2NvcmUuYzozMDYzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwNjQtXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cdTAwM2VrZnVuY19idGZfdGFiKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzODUte1xua2VybmVsL2JwZi9jb3JlLmM6MzM4NjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg3LVx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQyND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDI4LVxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDMwLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ1NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcbmtlcm5lbC9icGYvY29yZS5jLTM0NTYtXG5rZXJuZWwvYnBmL2NvcmUuYzozNDU3OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0NTgtXG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc9Mj1tZW51Y29uZmlnIEJQRl9QUkVMT0FEXG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNC1cdGRlcGVuZHMgb24gQlBGXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzo1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNi1cdCMgVGhlIGRlcGVuZGVuY3kgb24gIUNPTVBJTEVfVEVTVCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIGVuYWJsZWRcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjEtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MjI6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMy1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzY5PXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODA3Olx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDQKCQkJCQkJCW91dHB1dDogNDA5CgkJCQkJCQl0aG91Z2h0czogMTAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGNoYW5nZXMgYW5kIHRoZWlyIGNhbGxlcnMuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYWNyb3NzIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeTogYGJwZl9jaGVja2AsIGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgLCBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHlgIChpbiB2ZXJpZmllci5jKSwgYGNoZWNrX3BrdF9wdHJfaWRzYCwgYGNoZWNrX2lkc2AsIGByZWdzYWZlYCAoaW4gc3RhdGVzLmMpLCBgcHVzaF9pbnNuYCAoaW4gY2ZnLmMpLCBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgLCBhbmQgYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgIChpbiBmaXh1cHMuYykuCgpNeSBtYWluIGVudHJ5IHBvaW50IG9mIGNvbmNlcm4gaXMgYGJwZl9jaGVja2AsIGFzIHRoYXQmIzM5O3MgdGhlIGNvcmUgdmVyaWZpZXIsIGFuZCB0aGUgZmFjdCB0aGF0IGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYW5kIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlYCBhcmUgYWRkZWQgaW4gcmVsYXRpb24gdG8gdGhlIG5ldyBsb2dpYywgc2VlbXMgdGhhdCB0aGUgbWFqb3IgY2hhbmdlIGlzIHRoZSB0cmFja2luZyBvZiBzcGlubG9ja3MgZm9yIGlubmVyIG1hcHMgYW5kIGNhbGxiYWNrcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdGF0ZSB0cmFja2luZyBjaGFuZ2VzIChgY2hlY2tfcGt0X3B0cl9pZHNgLCBgcmVnc2FmZWApLiBUaGUgQ29udHJvbCBGbG93IEdyYXBoIChDRkcpIGNoYW5nZXMgd2l0aCBgcHVzaF9pbnNuYCBhcmUgaW1wb3J0YW50IHRvby4gQW5kIHRoZW4sIHRoZSBpbnN0cnVjdGlvbiBwYXRjaGluZyBhbmQgcmVtb3ZhbCByb3V0aW5lcyAoYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCkgYW5kIHNpZ25hbCBjaGVja3MgYXJlIGNyaXRpY2FsIGZvciBzYWZldHksIG9mIGNvdXJzZS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBub24tc3RhdGljIHN5bWJvbHMgZm9yIGEgcG90ZW50aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gU28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50czogYGJwZl9jaGVja2AsIGByZWdzYWZlYCwgYGNoZWNrX3BrdF9wdHJfaWRzYCwgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGBwdXNoX2luc25gLiBUaGVzZSBzZWVtIHNwZWNpZmljIHRvIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LgoKVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIHNvdXJjZSBmaWxlcyBhcmUgb25seSBidWlsdCB3aGVuIHRoYXQgaXMgZW5hYmxlZC4gVGhlIGJ1aWxkIHJ1bGVzIGNvbmZpcm0gaXQuCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBzcGVjaWZpYyBhbmQgbm90IHViaXF1aXRvdXMuIEkgaGF2ZSBhIGNsZWFuIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcywgc28gbm93IGxldCYjMzk7cyB2ZXJpZnkgbXkgZmluZGluZ3MuIFRoZXNlIHBhdGNoZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgdmVyaWZpZXIgY29tcG9uZW50cywgcHJpbWFyaWx5IGltcGFjdGluZyB0aGUgZm9sbG93aW5nOgotIFN0YXRlIHBydW5pbmcgaW4gYHN0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGByZWdzYWZlYCBhbmQgYGNoZWNrX3BrdF9wdHJfaWRzYCBmb3IgaW1wcm92ZWQgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nLgotIGB2ZXJpZmllci5jYCB1cGRhdGVzIGFkZHJlc3MgaW5uZXIgbWFwIGxvb2t1cCBhbmQgc3BpbmxvY2sgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBzdGF0ZS4gQW5kIGl0IGFsc28gaW5jbHVkZXMgYWRkaXRpb25hbCBmYXRhbCBzaWduYWwgY2hlY2tpbmcgaW4gYGJwZl9jaGVja2AuCi0gYGNmZy5jYCBhZGRzIENGRyB2YWxpZGF0aW9uIHdpdGggYHB1c2hfaW5zbmAuCi0gYGZpeHVwcy5jYCBhZGRzIHByZWVtcHRpb24gYW5kIGZhdGFsIHNpZ25hbCBjaGVja3MgaW4gcGF0Y2hpbmcgYW5kIHJlbW92YWwgcm91dGluZXMuCgpBbGwgb2YgdGhlc2UgZGlyZWN0bHkgaW1wYWN0IEJQRiBwcm9ncmFtIGxvYWRpbmcgY29ycmVjdG5lc3MsIHZlcmlmaWNhdGlvbiwgYW5kIG92ZXJhbGwgc2FmZXR5IGFuZCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGggb2YgQlBGIHByb2dyYW0gbG9hZGluZy4gU28sIG5vdyBpdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGlmIEkgY2FuIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIGJlZm9yZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuIEV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBhbGlnbmVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDtjaGVja19wa3RfcHRyX2lkcyYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDtyZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7cHVzaF9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFjcm9zcyBzZXZlcmFsIGZpbGVzOlxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cbjMuIGtlcm5lbC9icGYvY2ZnLmM6IEFkZHMgZmFsbHRocm91Z2ggdmFsaWRhdGlvbiBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyaWVzIGluIHB1c2hfaW5zbigpLlxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgcmVhY2hhYmxlIHZpYSBzeXNfYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIHN0YXRlIHBydW5pbmcgY29ycmVjdG5lc3MsIHZlcmlmaWVyIGVkZ2UgY2FzZXMsIGFuZCBsb2NrIHNhZmV0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDtjaGVja19wa3RfcHRyX2lkcyYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDtyZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7cHVzaF9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFjcm9zcyBzZXZlcmFsIGZpbGVzOlxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cbjMuIGtlcm5lbC9icGYvY2ZnLmM6IEFkZHMgZmFsbHRocm91Z2ggdmFsaWRhdGlvbiBhY3Jvc3Mgc3VicHJvZ3JhbSBib3VuZGFyaWVzIGluIHB1c2hfaW5zbigpLlxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29kZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgcmVhY2hhYmxlIHZpYSBzeXNfYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIHN0YXRlIHBydW5pbmcgY29ycmVjdG5lc3MsIHZlcmlmaWVyIGVkZ2UgY2FzZXMsIGFuZCBsb2NrIHNhZmV0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxuMS4gQWRkcyBhIHN1YnByb2dyYW0gYm91bmRhcnkgZmFsbHRocm91Z2ggY2hlY2sgaW4gY2ZnLmMgdG8gZW5zdXJlIENPLVJFIHJlbG9jYXRpb25zIGNhbm5vdCB2aW9sYXRlIHN1YnByb2dyYW0gYm91bmRhcmllcy5cbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cbjQuIENvcnJlY3RzIHNwaW5sb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBpbm5lciBtYXAgbG9va3VwcyBhbmQgY2FsbGJhY2sgYXJndW1lbnQgc3RhdGVzIGluIHZlcmlmaWVyLmMuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRkMjY2N2FiNWQ4ODA5MTc5ZDI4ZDkzNTEwNTQ4MzRhZDFlYjljZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYWQxNGE3ZmJlZDcyZiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ic2VhcmNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3R5cGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJvci1pbmplY3Rpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfbHNtLmgmZ3Q7CkBAIC00NDcsNiAmIzQzOzQ0OCwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCXJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctJmd0O21hcF9wdHI7CiYjNDM7CiYjNDM7CXJldHVybiAhcmVnLSZndDttYXBfdWlkICZhbXA7JmFtcDsgbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xOTI1LDExICYjNDM7MTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogCWlmIChtYXAtJmd0O2lubmVyX21hcF9tZXRhKSB7CiAJCXJlZy0mZ3Q7dHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsOwogCQlyZWctJmd0O21hcF9wdHIgPSBtYXAtJmd0O2lubmVyX21hcF9tZXRhOwotCQkvKiB0cmFuc2ZlciByZWcmIzM5O3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW0KLQkJICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuCiYjNDM7CQkvKgomIzQzOwkJICogQ29uY3JldGUgaW5uZXIgbWFwcyBzaGFyZSB0aGUgdmVyaWZpZXItdmlzaWJsZSBpbm5lcl9tYXBfbWV0YS4KJiM0MzsJCSAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZQomIzQzOwkJICogdmVyaWZpY2F0aW9uIG5lZWRzIHRvIGRpc3Rpbmd1aXNoIGNvbmNyZXRlIG1hcCBpbnN0YW5jZXMuIERvaW5nCiYjNDM7CQkgKiB0aGlzIGZvciBldmVyeSBpbm5lciBtYXAgbWFrZXMgc3RhdGUgcHJ1bmluZyB0b28gY29uc2VydmF0aXZlLgomIzQzOwkJICoKJiM0MzsJCSAqIEVhY2ggbWFwIGxvb2t1cCBoYXMgYSB1bmlxdWUgcmVnaXN0ZXIgSUQsIHNvIHVzZSBpdCBhcyB0aGUgVUlEIG9mCiYjNDM7CQkgKiB0aGUgaW5uZXIgbWFwLgogCQkgKi8KIAkJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC0mZ3Q7aW5uZXJfbWFwX21ldGEtJmd0O3JlY29yZCwKLQkJCQkJIEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLKSkKJiM0MzsJCQkJCSBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSyB8CiYjNDM7CQkJCQkgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSkKIAkJCXJlZy0mZ3Q7bWFwX3VpZCA9IHJlZy0mZ3Q7aWQ7CiAJfSBlbHNlIGlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHsKIAkJcmVnLSZndDt0eXBlID0gUFRSX1RPX1hEUF9TT0NLIHwgbWF5YmVfbnVsbDsKQEAgLTEwMDM1LDYgJiM0MzsxMDA1MCw5IEBAIGludCBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqLwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdID0gY2FsbGVyLSZndDtyZWdzW0JQRl9SRUdfM107CkBAIC0xMDEzMSw2ICYjNDM7MTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCV9fbWFya19yZWdfa25vd25femVybygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKTsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjsKIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gbWFwX3VpZDsKJiM0MzsJaWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSkKJiM0MzsJCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuOwogCiAJLyogdW51c2VkICovCiAJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSk7CkBAIC0xMDI0OSw2ICYjNDM7MTAyNzAsOSBAQCBzdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMjEzNjcsNiAmIzQzOzIxMzkxLDEzIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBicGZfZml4dXBfY2FsbF9hcmdzKGVudik7CiYjNDM7CS8qCiYjNDM7CSAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYQomIzQzOwkgKiByZXF1ZXN0IHRvIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuIERvIG5vdCBsZXQgc3VjaCBmYWxsYmFjawomIzQzOwkgKiBjb25zdW1lIGEgZmF0YWwtc2lnbmFsIGNhbmNlbGxhdGlvbiBmcm9tIGJwZl9wYXRjaF9pbnNuX2RhdGEoKS4KJiM0MzsJICovCiYjNDM7CWlmIChyZXQgPT0gMCAmYW1wOyZhbXA7IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJcmV0ID0gLUVJTlRSOwogCiAJZW52LSZndDt2ZXJpZmljYXRpb25fdGltZSA9IGt0aW1lX2dldF9ucygpIC0gc3RhcnRfdGltZTsKIAlwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTsKQEAgLTIxNDI1LDYgJiM0MzsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCQllbnYtJmd0O3Byb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID0gMDsKIAogCWVudi0mZ3Q7cHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtJmd0O3Byb2csICZhbXA7cmV0KTsKJiM0MzsJaWYgKHJldCA9PSAwICZhbXA7JmFtcDsgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXQgPSAtRUlOVFI7CiAKIGVycl9yZWxlYXNlX21hcHM6CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDEyMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBicGZfbWFwOwomIzQzOwomIzQzO3N0cnVjdCBsb2NrX3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpbm5lcl9sb2NrX21hcCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBsb2NrX3ZhbHVlKTsKJiM0Mzt9IGlubmVyX2xvY2tfbWFwX2EgU0VDKCYjMzQ7Lm1hcHMmIzM0OyksIGlubmVyX2xvY2tfbWFwX2IgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7CiYjNDM7fSBsb2NrX21hcF9vZl9tYXBzIFNFQygmIzM0Oy5tYXBzJiMzNDspID0gewomIzQzOwkudmFsdWVzID0gewomIzQzOwkJWzBdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9hLAomIzQzOwkJWzFdID0gJmFtcDtpbm5lcl9sb2NrX21hcF9iLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfaW5uZXJfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07CiYjNDM7CWludCBpbm5lcl9rZXkgPSAxOwomIzQzOwl2b2lkICppbm5lcl9tYXA7CiYjNDM7CiYjNDM7CWlubmVyX21hcCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtsb2NrX21hcF9vZl9tYXBzLCAmYW1wO2lubmVyX2tleSk7CiYjNDM7CWlmICghaW5uZXJfbWFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbShpbm5lcl9tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCAmYW1wO2N0eCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7ZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllcyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgaW5uZXJfa2V5ID0gMDsKJiM0MzsJdm9pZCAqaW5uZXJfbWFwOwomIzQzOwomIzQzOwlpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7bG9ja19tYXBfb2ZfbWFwcywgJmFtcDtpbm5lcl9rZXkpOwomIzQzOwlpZiAoIWlubmVyX21hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDI1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIEJQRiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgdG8gY3JhbmsgdXAgdGhlIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBhbmQgcmVsYXRlZCBzdWJzeXN0ZW1zLCB3aGljaCBpcyBnb29kLiBCdXQsIHdlIGhhdmUgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNldmVyYWwgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgdmFyaW91cyBCUEYgY29tcG9uZW50czogY2hhbmdlcyB0byBgYnBmX2lkX3BhaXJgLCBjb250cm9sIGZsb3cgYW5kIGZhbGwtdGhyb3VnaCBjaGVja3MsIHByZWVtcHRpb24gY2hlY2tzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiBJRCBjbGFzc2VzLCBhbmQgc3BpbmxvY2sgdHJhY2tpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZm9jdXMgaXMgb24gZW5oYW5jaW5nIHRoZSB2ZXJpZmllciYjMzk7cyBjb3JyZWN0bmVzcywgY29uY3VycmVuY3ksIGFuZCByb2J1c3RuZXNzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBDTy1SRSByZWxvY2F0aW9ucywgcHJlZW1wdGlvbiwgYW5kIHN0YXRlIHBydW5pbmcuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyBhbnkgb2YgdGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gS01TQU4gaXMgb3VyIGJlc3QgZnJpZW5kIGZvciBjYXRjaGluZyB0aGF0LiBMZXQmIzM5O3MgYW5hbHl6ZSB0aGUgYXJlYXMgb2YgbW9kaWZpY2F0aW9uIG9uZSBieSBvbmUuCgpUaGUgYWRkaXRpb24gb2YgYHBrdF9wdHJfZGVsdGFgIGFuZCBgcGt0X3B0cl9kZWx0YV9zZXRgIHRvIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGhhcyBteSBpbW1lZGlhdGUgYXR0ZW50aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBpbml0aWFsaXplcyBgcGt0X3B0cl9kZWx0YV9zZXRgIHRvIGBmYWxzZWAgaW4gYGNoZWNrX2lkcygpYCBpcyBhIGdvb2Qgc2lnbi4gQnV0LCBJIG11c3QgdmVyaWZ5IHdoZXJlIGBzdHJ1Y3QgYnBmX2lkbWFwYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgZWxzZXdoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0IGlzIGtleSB0byBkZXRlcm1pbmluZyBhbnkgS01TQU4gcmlzay4gSXQgY291bGQgYmUgcG9zc2libGUgdGhlcmUgaXMgYSBjYXNlIGZvciBhIG1vcmUgaW4tZGVwdGggbG9vayB1c2luZyBLTVNBTi4KClRoZSBvdGhlciBjaGFuZ2VzIGxvb2sgbGlrZSB2ZXJpZmllciBpbXByb3ZlbWVudHMgYW5kIGNvcnJlY3RuZXNzIGZpeGVzLiBXaGlsZSB2YWx1YWJsZSwgdGhleSBzZWVtIGxlc3MgbGlrZWx5IHRvIGRpcmVjdGx5IHRyaWdnZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBidXQgbXVzdCBiZSBhc3Nlc3NlZCB0byBjb25maXJtLiBUaGUgY2hlY2tzIGZvciBgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIGFuZCBgY29uZF9yZXNjaGVkKClgIGFyZSBtb3JlIGxpa2VseSB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgYnVncywgb3IgZW5zdXJlIHByb3BlciBiZWhhdmlvciBkdXJpbmcgYXN5bmNocm9ub3VzIGV2ZW50cy4KCkkgdGhpbmsgSSYjMzk7bGwgbGVhbiB0b3dhcmRzIHRoZSBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIG5vdywgYnV0IHdpbGwgbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBgYnBmX2lkbWFwYCBhbmQgYGJwZl9pZF9wYWlyYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaWRtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MzAyPXN0YXRpYyBib29sIHJhbmdlX3dpdGhpbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMzE4LSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzozMTk6c3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMjAte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzU2PXN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzozNTg6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1OS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTctICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQxODpzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTkte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NTI2PXN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUyNy1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1Mjg6XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI5LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTU0Mj1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDM6XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0NC1cdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03Mzc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3Mzg6XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzM5LVx0XHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9ODgyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4ODM6XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxua2VybmVsL2JwZi9zdGF0ZXMuYy04ODQtXHRcdFx0ICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MDU6XHRcdCAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTA2LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LXtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcdHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTAtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0Mzc9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQ2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0NDc6c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQ4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDY1OnN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0NzQ9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NzctXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Nzg6XHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ3OS1cdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBCUEYgZGV2ZWxvcG1lbnQ6CgoqKkV4YW1pbmluZyBgY2hlY2tfaWRzYCBhbmQgYGNoZWNrX3BrdF9wdHJfaWRzYCoqCgpSaWdodCwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgdGFzayBhdCBoYW5kIGlzIGNsZWFybHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyBJRCBjaGVja3MsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgYGNoZWNrX2lkc2AgYW5kIGBjaGVja19wa3RfcHRyX2lkc2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yaywgdGhlaXIgcHVycG9zZSwgYW5kIHdoYXQgZGF0YSB0aGV5JiMzOTtyZSBtYW5pcHVsYXRpbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgY29kZSB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBhbmQgdGhlIGxvZ2ljIGludm9sdmVkIGluIHZhbGlkYXRpbmcgdGhlc2UgSURzIGFuZCBwYWNrZXQgcG9pbnRlciBJRHMuIFRoaXMgbWlnaHQgaW52b2x2ZSBsb29raW5nIGF0IHRoZWlyIGNhbGwgc2l0ZXMgYW5kIGRlcGVuZGVuY2llcyBhcyB3ZWxsLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbnkgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbiBlZmZvcnRzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0IG9mIHRoZSBCUEYgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0ICogdGhhdC5cbiAzMTY6XHQgKiBTbyB3ZSBsb29rIHRocm91Z2ggb3VyIGlkbWFwIHRvIHNlZSBpZiB0aGlzIG9sZCBpZCBoYXMgYmVlbiBzZWVuIGJlZm9yZS4gIElmXG4gMzE3Olx0ICogc28sIHdlIHJlcXVpcmUgdGhlIG5ldyBpZCB0byBtYXRjaDsgb3RoZXJ3aXNlLCB3ZSBhZGQgdGhlIGlkIHBhaXIgdG8gdGhlIG1hcC5cbiAzMTg6XHQgKi9cbiAzMTk6XHRzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gMzIwOlx0e1xuIDMyMTpcdFx0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cdTAwM2VtYXA7XG4gMzIyOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiAzMjM6XHRcbiAzMjQ6XHRcdC8qIGVpdGhlciBib3RoIElEcyBzaG91bGQgYmUgc2V0IG9yIGJvdGggc2hvdWxkIGJlIHplcm8gKi9cbiAzMjU6XHRcdGlmICghIW9sZF9pZCAhPSAhIWN1cl9pZClcbiAzMjY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKG9sZF9pZCA9PSAwKSAvKiBjdXJfaWQgPT0gMCBhcyB3ZWxsICovXG4gMzI5Olx0XHRcdHJldHVybiB0cnVlO1xuIDMzMDpcdFxuIDMzMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuIDMzMjpcdFx0XHRpZiAobWFwW2ldLm9sZCA9PSBvbGRfaWQpXG4gMzMzOlx0XHRcdFx0cmV0dXJuIG1hcFtpXS5jdXIgPT0gY3VyX2lkO1xuIDMzNDpcdFx0XHRpZiAobWFwW2ldLmN1ciA9PSBjdXJfaWQpXG4gMzM1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFxuIDMzODpcdFx0LyogUmVhY2hlZCB0aGUgZW5kIG9mIGtub3duIG1hcHBpbmdzOyBoYXZlbiYjMzk7dCBzZWVuIHRoaXMgaWQgYmVmb3JlICovXG4gMzM5Olx0XHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiAzNDA6XHRcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIDM0MTpcdFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4gMzQyOlx0XHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XG4gMzQzOlx0XHRcdGlkbWFwLVx1MDAzZWNudCYjNDM7JiM0Mzs7XG4gMzQ0Olx0XHRcdHJldHVybiB0cnVlO1xuIDM0NTpcdFx0fVxuIDM0NjpcdFxuIDM0NzpcdFx0LypcbiAzNDg6XHRcdCAqIGlkbWFwIHNsb3RzIGFyZSBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGFuZCBzdGFjayBzbG90cy5cbiAzNDk6XHRcdCAqIFNpbmNlIHJlZmVyZW5jZWQgZHlucHRycyBhY3F1aXJlIGludGVybWVkaWF0ZSByZWZlcmVuY2VzIHRoYXQgZG9cbiAzNTA6XHRcdCAqIG5vdCBsaXZlIGluIGVpdGhlciwgc28gdGhlIG1hcCBjYW4gYmUgZXhoYXVzdGVkLiBTaW5jZSBpdCBpcyB1bmxpa2VseSxcbiAzNTE6XHRcdCAqIGZhaWwgdGhlIHZlcmlmaWNhdGlvbiBieSB0cmVhdGluZyB0aGUgc3RhdGVzIGFzIG5vdCBlcXVpdmFsZW50LlxuIDM1MjpcdFx0ICovXG4gMzUzOlx0XHRyZXR1cm4gZmFsc2U7XG4gMzU0Olx0fVxuIDM1NTpcdFxuIDM1NjpcdHN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXG4gMzU3Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmN1cixcbiAzNTg6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiAzNTk6XHR7XG4gMzYwOlx0XHRzdHJ1Y3QgYnBmX2lkX3BhaXIgKm1hcCA9IGlkbWFwLVx1MDAzZW1hcDtcbiAzNjE6XHRcdHM2NCBkZWx0YTtcbiAzNjI6XHRcdHVuc2lnbmVkIGludCBpO1xuIDM2MzpcdFxuIDM2NDpcdFx0aWYgKCFjaGVja19pZHMob2xkLVx1MDAzZWlkLCBjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiAzNjU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDM2NjpcdFx0aWYgKCFvbGQtXHUwMDNlaWQpXG4gMzY3Olx0XHRcdHJldHVybiB0cnVlO1xuIDM2ODpcdFxuIDM2OTpcdFx0LypcbiAzNzA6XHRcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXG4gMzcxOlx0XHQgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLlxuIDM3MjpcdFx0ICogUGFja2V0IHBvaW50ZXIgb2Zmc2V0cyBhcmUgYm91bmRlZCBieSBCUEZfTUFYX1ZBUl9PRkYsIHNvIHRoZSBkZWx0YVxuIDM3MzpcdFx0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cbiAzNzQ6XHRcdCAqL1xuIDM3NTpcdFx0ZGVsdGEgPSAoczY0KShjdXItXHUwMDNlcjY0LmJhc2UgLSBvbGQtXHUwMDNlcjY0LmJhc2UpO1xuIDM3NjpcdFx0aWYgKGRlbHRhIFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFx1MDAzZSBTMzJfTUFYKVxuIDM3NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzc4Olx0XG4gMzc5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZG1hcC1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4gMzgwOlx0XHRcdGlmIChtYXBbaV0ub2xkICE9IG9sZC1cdTAwM2VpZClcbiAzODE6XHRcdFx0XHRjb250aW51ZTtcbiAzODI6XHRcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbiAzODM6XHRcdFx0XHRtYXBbaV0ucGt0X3B0cl9kZWx0YSA9IGRlbHRhO1xuIDM4NDpcdFx0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XG4gMzg1Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMzg2Olx0XHRcdH1cbiAzODc6XHRcdFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xuIDM4ODpcdFx0fVxuIDM4OTpcdFxuIDM5MDpcdFx0cmV0dXJuIGZhbHNlO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHQvKlxuIDM5NDpcdCAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXG4gMzk1Olx0ICpcbiAzOTY6XHQgKiBXaGVuIG9sZF9pZCA9PSAwLCB0aGUgb2xkIHJlZ2lzdGVyIGlzIGluZGVwZW5kZW50IC0gbm90IGxpbmtlZCB0byBhbnlcbiAzOTc6XHQgKiBvdGhlciByZWdpc3Rlci4gQW55IGxpbmtpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgb25seSBhZGRzIGNvbnN0cmFpbnRzLFxuIDM5ODpcdCAqIG1ha2luZyBpdCBtb3JlIHJlc3RyaWN0aXZlLiBTaW5jZSB0aGUgb2xkIHN0YXRlIGRpZG4mIzM5O3QgcmVseSBvbiBhbnkgSURcbiAzOTk6XHQgKiByZWxhdGlvbnNoaXBzIGZvciB0aGlzIHJlZ2lzdGVyLCBpdCYjMzk7cyBhbHdheXMgc2FmZSB0byBhY2NlcHQgY3VyIHJlZ2FyZGxlc3NcbiA0MDA6XHQgKiBvZiBpdHMgSUQuIEhlbmNlLCByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseS5cbiA0MDE6XHQgKlxuIDQwMjpcdCAqIFdoZW4gb2xkX2lkICE9IDAgYnV0IGN1cl9pZCA9PSAwLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGRpZmZlcmVudFxuIDQwMzpcdCAqIGluZGVwZW5kZW50IHJlZ2lzdGVycyBpbiBjdXIgZG9uJiMzOTt0IGluY29ycmVjdGx5IHNhdGlzZnkgdGhlIElEIG1hdGNoaW5nXG4gNDA0Olx0ICogcmVxdWlyZW1lbnRzIG9mIGxpbmtlZCByZWdpc3RlcnMgaW4gb2xkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqRGlnZ2luZyBpbnRvIElEIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgbWFuYWdpbmcgcGFja2V0IElEcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGNoZWNrX2lkc2AgZnVuY3Rpb24gYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgaWRtYXBgIHN0cnVjdHVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgYG1hcFtpZG1hcC0mZ3Q7Y250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO2Agd2hlbiBhZGRpbmcgYSBuZXcgSUQgcGFpciBhdCBgaWRtYXAtJmd0O2NudGAgaXMgdGhlIGtleSB0aGluZyB0byBmb2N1cyBvbiBoZXJlLiBJdOKAmXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgYnVnIHBvdGVudGlhbC4KCk5vdywgSSBhbHNvIG5lZWQgdG8gdHJhY2sgdGhlIGBpZHN0YWNrYCBvcGVyYXRpb25zIHdpdGhpbiBgdmVyaWZpZXIuY2AuIFB1c2hpbmcgYW5kIHBvcHBpbmcgZnJvbSB0aGUgYGlkc3RhY2tgIGlzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseSwgc28gSSBuZWVkIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUgbG9naWMuIExldCYjMzk7cyBzdGFydCBieSBjbG9zZWx5IGV4YW1pbmluZyB0aGUgYGlkc3RhY2tfcHVzaGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGxpZSB3aXRoIElEIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk0NDA6XHRcbjk0NDE6XHRcdGVyciA9IF9fcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudi1cdTAwM2VjdXJfc3RhdGUsIGlkKTtcbjk0NDI6XHRcdGlmICghZXJyKVxuOTQ0MzpcdFx0XHRicGZfZGlhZ19yZWNvcmRfcmVmX3JlbGVhc2UoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGlkKTtcbjk0NDQ6XHRcdHJldHVybiBlcnI7XG45NDQ1Olx0fVxuOTQ0NjpcdFxuOTQ0NzpcdHN0YXRpYyBpbnQgaWRzdGFja19wdXNoKHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLCB1MzIgaWQpXG45NDQ4Olx0e1xuOTQ0OTpcdFx0aW50IGk7XG45NDUwOlx0XG45NDUxOlx0XHRpZiAoIWlkKVxuOTQ1MjpcdFx0XHRyZXR1cm4gMDtcbjk0NTM6XHRcbjk0NTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspXG45NDU1Olx0XHRcdGlmIChpZG1hcC1cdTAwM2VtYXBbaV0ub2xkID09IGlkKVxuOTQ1NjpcdFx0XHRcdHJldHVybiAwO1xuOTQ1NzpcdFxuOTQ1ODpcdFx0aWYgKFdBUk5fT05fT05DRShpZG1hcC1cdTAwM2VjbnQgXHUwMDNlPSBCUEZfSURfTUFQX1NJWkUpKVxuOTQ1OTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjk0NjA6XHRcbjk0NjE6XHRcdGlkbWFwLVx1MDAzZW1hcFtpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7XS5vbGQgPSBpZDtcbjk0NjI6XHRcdHJldHVybiAwO1xuOTQ2MzpcdH1cbjk0NjQ6XHRcbjk0NjU6XHRzdGF0aWMgaW50IGlkc3RhY2tfcG9wKHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuOTQ2NjpcdHtcbjk0Njc6XHRcdGlmICghaWRtYXAtXHUwMDNlY250KVxuOTQ2ODpcdFx0XHRyZXR1cm4gMDtcbjk0Njk6XHRcbjk0NzA6XHRcdHJldHVybiBpZG1hcC1cdTAwM2VtYXBbLS1pZG1hcC1cdTAwM2VjbnRdLm9sZDtcbjk0NzE6XHR9XG45NDcyOlx0XG45NDczOlx0LyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXG45NDc0Olx0c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG45NDc1Olx0e1xuOTQ3NjpcdFx0dTMyIG1hc2sgPSAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXHUwMDNjXHUwMDNjIFNUQUNLX0RZTlBUUik7XG45NDc3Olx0XHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuOTQ3ODpcdFx0c3RydWN0IGJwZl9pZG1hcCAqaWRzdGFjayA9IFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoO1xuOTQ3OTpcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY3CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBJbXBhY3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgZm9jdXNlZCBvbiBgaWRzdGFja19wdXNoYCBhbmQgYGlkc3RhY2tfcG9wYCwgdmVyaWZ5aW5nIHRoZXkgb25seSB0b3VjaCBgaWRtYXAtJmd0O2NudGAgYW5kIGBvbGRgLiBUaGF04oCZcyBhIGNsZWFuIHN0YXJ0LgoKVGhlbiwgSSBtZXRpY3Vsb3VzbHkgZXhhbWluZWQgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBwYXRjaDogYGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKWAsIGBwdXNoX2luc24oKWAsIGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncygpYCwgYHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSgpYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoKWAsIGFuZCBgYnBmX2NoZWNrKClgLiBFYWNoIGNoYW5nZSB3YXMgY2FyZWZ1bGx5IHNjcnV0aW5pemVkLgoKVGhlIGtleSB3YXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBJIHdlbnQgdGhyb3VnaCBhIHJpZ29yb3VzIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogRG9lcyB0aGUgcGF0Y2ggdG91Y2ggYW55IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLCBubyBzdWNoIGNoYW5nZXMgaGVyZS4gTm8gYGNvcHlfdG9fdXNlcmAsIG5vIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RscyBhcmUgYWZmZWN0ZWQuIFdlJiMzOTtyZSBpbiB0aGUgY2xlYXIuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uIEkgY2hlY2tlZCBhbGwgdGhlIHZhcmlhYmxlcyB1c2VkIChsaWtlIGBzdWJwcm9nYCwgYGRlbHRhYCwgYW5kIGBpYCkgYW5kIHZlcmlmaWVkIHRoZXkmIzM5O3JlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCB0aGUgZGVsdGEgY2FsY3VsYXRpb24gYW5kIHRoZSB1c2Ugb2YgYHBrdF9wdHJfZGVsdGFgIHdpdGhpbiBgY2hlY2tfcGt0X3B0cl9pZHNgIGFyZSBzb3VuZC4gVGhlIGBwa3RfcHRyX2RlbHRhX3NldGAgYm9vbGVhbiBwcmV2ZW50cyBhIHJlYWQgb2YgdGhlIGRlbHRhIHByaW9yIHRvIGl0IGJlaW5nIHNldC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBBcmUgdGhlcmUgYW55IG5ldyBhbGxvY2F0aW9ucyB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBhbmQgcmVhZCBsYXRlcj8gTm8gbmV3IGFsbG9jYXRpb25zLiBUaGUgZmllbGRzIGFkZGVkIHRvIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGFyZSBwcm9wZXJseSBzZXQuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBhY2Nlc3NlczoqKiBDb3VsZCB0aGUgY2hhbmdlcyBhZmZlY3QgYm91bmRzIGNoZWNrcyBhbmQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSByZWFkcz8gTm90IGluIHRoaXMgY2FzZS4gVGhlIGNoYW5nZXMgKnRpZ2h0ZW4qIEJQRiB2ZXJpZmllciBjaGVja3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyDigJMgcHJldmVudGluZyBmYWxsdGhyb3VnaCwgaW5jb3JyZWN0IHBhY2tldCBwb2ludGVyIHN0YXRlLCBwcmVzZXJ2aW5nIHNwaW5sb2NrIGlkZW50aXRpZXMsIGFuZCBncmFjZWZ1bCBjYW5jZWxsYXRpb24uIFRoaXMgbGVhZHMgdG8gKmZld2VyKiBidWdzLCBub3QgbW9yZS4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgdmVyaWZpZXIgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWxseSBhYm91dCBsb2dpYyBhbmQgYnl0ZWNvZGUgdmVyaWZpY2F0aW9uLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgbGlrZWx5IGxvZ2ljYWwgdmVyaWZpY2F0aW9uIGVycm9ycywgb3IgbWVtb3J5IHNhZmV0eSBidWdzICh3aGljaCBLQVNBTiB3b3VsZCBjYXRjaCkuIFNvLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpOb3cgSSBuZWVkIHRvIHdyaXRlIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgcmF0aW9uYWxlIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGludGVybmFsIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW1wcm92ZW1lbnRzIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXM6XG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXG4zLiBFbmhhbmNlcyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nIGluIHN0YXRlcy5jIGZvciBwYWNrZXQgcG9pbnRlcnMgYnkgdHJhY2tpbmcgaW50cmEtY2xhc3MgcG9pbnRlciBkaXNwbGFjZW1lbnQgKHBrdF9wdHJfZGVsdGEgLyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpLlxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1vZGlmeSBrZXJuZWwgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkuIEFsbCBuZXdseSBhZGRlZCBzdHJ1Y3QgZmllbGRzIChzdWNoIGFzIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvZ2ljIHJlZ3Jlc3Npb25zIChlLmcuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHZlcmlmaWVyIHN0YXRlIGJ1Z3MpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTi92ZXJpZmllciB0ZXN0IHN1aXRlcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxuMS4gQWRkcyBhIHN1YnByb2dyYW0gYm91bmRhcnkgZmFsbHRocm91Z2ggY2hlY2sgaW4gY2ZnLmMgdG8gZW5zdXJlIENPLVJFIHJlbG9jYXRpb25zIGNhbm5vdCB2aW9sYXRlIHN1YnByb2dyYW0gYm91bmRhcmllcy5cbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cbjQuIENvcnJlY3RzIHNwaW5sb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBpbm5lciBtYXAgbG9va3VwcyBhbmQgY2FsbGJhY2sgYXJndW1lbnQgc3RhdGVzIGluIHZlcmlmaWVyLmMuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo0OS44MjgxODYzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDE1NTYwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJyZWdzYWZlXCIsXG4gICAgXCJjaGVja19wa3RfcHRyX2lkc1wiLFxuICAgIFwiYnBmX3BhdGNoX2luc25fZGF0YVwiLFxuICAgIFwidmVyaWZpZXJfcmVtb3ZlX2luc25zXCIsXG4gICAgXCJyZWZpbmVfbWFwX2xvb2t1cF92YWx1ZVwiLFxuICAgIFwibWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzXCIsXG4gICAgXCJzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVcIixcbiAgICBcInNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVcIixcbiAgICBcInB1c2hfaW5zblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgaW50ZXJuYWwgY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbXByb3ZlbWVudHMgdG8gdGhlIEJQRiB2ZXJpZmllciBhbmQgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIHBhc3NlczpcXG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxcbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxcbjMuIEVuaGFuY2VzIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcgaW4gc3RhdGVzLmMgZm9yIHBhY2tldCBwb2ludGVycyBieSB0cmFja2luZyBpbnRyYS1jbGFzcyBwb2ludGVyIGRpc3BsYWNlbWVudCAocGt0X3B0cl9kZWx0YSAvIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikuXFxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbW9kaWZ5IGtlcm5lbCBkYXRhIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeS4gQWxsIG5ld2x5IGFkZGVkIHN0cnVjdCBmaWVsZHMgKHN1Y2ggYXMgcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9naWMgcmVncmVzc2lvbnMgKGUuZy4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdmVyaWZpZXIgc3RhdGUgYnVncykgZmFsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOL3ZlcmlmaWVyIHRlc3Qgc3VpdGVzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIHZlcmlmaWVyIHN1YnN5c3RlbSBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczpcXG4xLiBrZXJuZWwvYnBmL3N0YXRlcy5jOiBBZGRzIGNoZWNrX3BrdF9wdHJfaWRzKCkgYW5kIG1vZGlmaWVzIHJlZ3NhZmUoKSB0byBwcmVzZXJ2ZSBkaXNwbGFjZW1lbnQgd2l0aGluIHBhY2tldCBwb2ludGVyIElEIGNsYXNzZXMgZHVyaW5nIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcuXFxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cXG4zLiBrZXJuZWwvYnBmL2NmZy5jOiBBZGRzIGZhbGx0aHJvdWdoIHZhbGlkYXRpb24gYWNyb3NzIHN1YnByb2dyYW0gYm91bmRhcmllcyBpbiBwdXNoX2luc24oKS5cXG40LiBrZXJuZWwvYnBmL2ZpeHVwcy5jOiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQpIHRvIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBhbmQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKCkuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHJlYWNoYWJsZSB2aWEgc3lzX2JwZihCUEZfUFJPR19MT0FEKSBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBzdGF0ZSBwcnVuaW5nIGNvcnJlY3RuZXNzLCB2ZXJpZmllciBlZGdlIGNhc2VzLCBhbmQgbG9jayBzYWZldHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjQ5LjgyODE5NTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTg1NTA0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNGQyNjY3YWI1ZDg4MDkxNzlkMjhkOTM1MTA1NDgzNGFkMWViOWNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlIHtcXG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcXG4gXFx0dTMyIG9sZDtcXG4gXFx0dTMyIGN1cjtcXG4rXFx0czMyIHBrdF9wdHJfZGVsdGE7XFxuK1xcdGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2lkbWFwIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcXG5pbmRleCA4NDJjN2QxZWFiY2NjLi5lM2M5MDQzMjhlZGUwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXFxuQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtIHtcXG4gICovXFxuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7XFxuIFxcdGludCAqaW5zbl9zdGFjayA9IGVudi1cXHUwMDNlY2ZnLmluc25fc3RhY2s7XFxuIFxcdGludCAqaW5zbl9zdGF0ZSA9IGVudi1cXHUwMDNlY2ZnLmluc25fc3RhdGU7XFxuIFxcbkBAIC0xMjEsNiArMTIyLDI2IEBAIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBjaGVja19zdWJwcm9ncygpIHByZXZlbnRzIGNvbnRyb2wgZmxvdyBmcm9tIGZhbGxpbmcgdGhyb3VnaCBhXFxuK1xcdCAqIHN1YnByb2dyYW0gYm91bmRhcnksIGJ1dCBydW5zIGJlZm9yZSBDTy1SRSByZWxvY2F0aW9ucyBjYW4gcmV3cml0ZSBhblxcbitcXHQgKiBpbnN0cnVjdGlvbi4gUmVlc3RhYmxpc2ggdGhlIGludmFyaWFudCBvbiB0aGUgZmluYWwgaW5zdHJ1Y3Rpb24gc3RyZWFtXFxuK1xcdCAqIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIENGRyB1c2VkIGJ5IGxhdGVyIHBlci1zdWJwcm9ncmFtIHBhc3Nlcy5cXG4rXFx0ICovXFxuK1xcdGlmIChlID09IEZBTExUSFJPVUdIKSB7XFxuK1xcdFxcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcXG4rXFx0XFx0aWYgKHcgXFx1MDAzYyBzdWJwcm9nLVxcdTAwM2VzdGFydCB8fCB3IFxcdTAwM2U9IChzdWJwcm9nICsgMSktXFx1MDAzZXN0YXJ0KSB7XFxuK1xcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCB0LCBcXFwiJWQ6IFxcXCIsIHQpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gJWQgdG8gJWRcXFxcblxcXCIsIHQsIHcpO1xcbitcXHRcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4rXFx0XFx0XFx0XFx0ZW52LCB0LCBcXFwiZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIktlZXAgZmFsbC10aHJvdWdoIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIGN1cnJlbnQgc3VicHJvZ3JhbS5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiSW5zdHJ1Y3Rpb24gJWQgZmFsbHMgdGhyb3VnaCB0byBpbnN0cnVjdGlvbiAlZCBvdXRzaWRlIGl0cyBzdWJwcm9ncmFtLlxcXCIsXFxuK1xcdFxcdFxcdFxcdHQsIHcpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAoZSA9PSBCUkFOQ0gpIHtcXG4gXFx0XFx0LyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovXFxuIFxcdFxcdG1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5pbmRleCA1MmQzY2VjMzM2NzI3Li45NDAxZmZmY2VkZmQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ic2VhcmNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImRpc2FzbS5oXFxcIlxcbiBcXG5AQCAtMzA2LDEyICszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFNvbWUgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIHBhc3NlcyByZXF1aXJlIGFuXFxuKyAqIE8ocHJvZy1cXHUwMDNlbGVuKSBvcGVyYXRpb24gcGVyIGluc3RydWN0aW9uLiBLZWVwIHRoZWlyIHNoYXJlZCBwcmltaXRpdmVzXFxuKyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS5cXG4rICovXFxuK3N0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcXG4re1xcbitcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbiBcXHRpZiAobGVuIFxcdTAwM2UgMSkge1xcbiBcXHRcXHRuZXdfZGF0YSA9IHZyZWFsbG9jKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgIGFycmF5X3NpemUoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gKyBsZW4gLSAxLFxcbkBAIC01MjMsNiArNTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcXG4gXFx0dW5zaWduZWQgaW50IG9yaWdfcHJvZ19sZW4gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbiBcXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSlcXG4gXFx0XFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XFxuIFxcbkBAIC0yNjY2LDQgKzI2ODYsMyBAQCBpbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5AQCAtMzM5LDYgKzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFx0aWYgKGlkbWFwLVxcdTAwM2VjbnQgXFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcXG4gXFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLm9sZCA9IG9sZF9pZDtcXG4gXFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLmN1ciA9IGN1cl9pZDtcXG4rXFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XFxuIFxcdFxcdGlkbWFwLVxcdTAwM2VjbnQrKztcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG5AQCAtMzUyLDYgKzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmN1cixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cXHUwMDNlbWFwO1xcbitcXHRzNjQgZGVsdGE7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0aWYgKCFjaGVja19pZHMob2xkLVxcdTAwM2VpZCwgY3VyLVxcdTAwM2VpZCwgaWRtYXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghb2xkLVxcdTAwM2VpZClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZVxcbitcXHQgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLlxcbitcXHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXFxuK1xcdCAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuXFxuK1xcdCAqL1xcbitcXHRkZWx0YSA9IChzNjQpKGN1ci1cXHUwMDNlcjY0LmJhc2UgLSBvbGQtXFx1MDAzZXI2NC5iYXNlKTtcXG4rXFx0aWYgKGRlbHRhIFxcdTAwM2MgUzMyX01JTiB8fCBkZWx0YSBcXHUwMDNlIFMzMl9NQVgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpZG1hcC1cXHUwMDNlY250OyBpKyspIHtcXG4rXFx0XFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7XFxuK1xcdFxcdFxcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XFxuK1xcdFxcdFxcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiBtYXBbaV0ucGt0X3B0cl9kZWx0YSA9PSBkZWx0YTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDb21wYXJlIHNjYWxhciByZWdpc3RlciBJRHMgZm9yIHN0YXRlIGVxdWl2YWxlbmNlLlxcbiAgKlxcbkBAIC02MzIsOCArNjcwLDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4gXFx0XFx0fSBlbHNlIGlmIChyb2xkLVxcdTAwM2VyYW5nZSBcXHUwMDNlIHJjdXItXFx1MDAzZXJhbmdlKSB7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHQvKiBpZCByZWxhdGlvbnMgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cXG4tXFx0XFx0aWYgKCFjaGVja19pZHMocm9sZC1cXHUwMDNlaWQsIHJjdXItXFx1MDAzZWlkLCBpZG1hcCkpXFxuK1xcdFxcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXFxuK1xcdFxcdGlmICghY2hlY2tfcGt0X3B0cl9pZHMocm9sZCwgcmN1ciwgaWRtYXApKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdC8qIG5ldyB2YWwgbXVzdCBzYXRpc2Z5IG9sZCB2YWwga25vd2xlZGdlICovXFxuIFxcdFxcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMWMzMDM5ZjNmYzMyMy4uYWQxNGE3ZmJlZDcyZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnNlYXJjaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jdHlwZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyb3ItaW5qZWN0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbHNtLmhcXHUwMDNlXFxuQEAgLTQ0Nyw2ICs0NDgsMTMgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gXFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4rXFxuK1xcdHJldHVybiAhcmVnLVxcdTAwM2VtYXBfdWlkIFxcdTAwMjZcXHUwMDI2IG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKVxcbiB7XFxuIFxcdHJldHVybiB0eXBlIFxcdTAwMjYgTUVNX1JET05MWTtcXG5AQCAtMTkyNSwxMSArMTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiBcXHRpZiAobWFwLVxcdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xcbiBcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBDT05TVF9QVFJfVE9fTUFQIHwgbWF5YmVfbnVsbDtcXG4gXFx0XFx0cmVnLVxcdTAwM2VtYXBfcHRyID0gbWFwLVxcdTAwM2Vpbm5lcl9tYXBfbWV0YTtcXG4tXFx0XFx0LyogdHJhbnNmZXIgcmVnJ3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW1cXG4tXFx0XFx0ICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXFxuK1xcdFxcdCAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZVxcbitcXHRcXHQgKiB2ZXJpZmljYXRpb24gbmVlZHMgdG8gZGlzdGluZ3Vpc2ggY29uY3JldGUgbWFwIGluc3RhbmNlcy4gRG9pbmdcXG4rXFx0XFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogRWFjaCBtYXAgbG9va3VwIGhhcyBhIHVuaXF1ZSByZWdpc3RlciBJRCwgc28gdXNlIGl0IGFzIHRoZSBVSUQgb2ZcXG4rXFx0XFx0ICogdGhlIGlubmVyIG1hcC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXFx1MDAzZWlubmVyX21hcF9tZXRhLVxcdTAwM2VyZWNvcmQsXFxuLVxcdFxcdFxcdFxcdFxcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSykpXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spKVxcbiBcXHRcXHRcXHRyZWctXFx1MDAzZW1hcF91aWQgPSByZWctXFx1MDAzZWlkO1xcbiBcXHR9IGVsc2UgaWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUCkge1xcbiBcXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xcbkBAIC0xMDAzNSw2ICsxMDA1MCw5IEBAIGludCBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xcbiBcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVxcdTAwM2VyZWdzW0JQRl9SRUdfMV0ubWFwX3VpZDtcXG4rXFx0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxcbitcXHRcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIFxcbiBcXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18zXTtcXG5AQCAtMTAxMzEsNiArMTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXFxuK1xcdFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXFx1MDAzZWlkX2dlbjtcXG4gXFxuIFxcdC8qIHVudXNlZCAqL1xcbiBcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xcbkBAIC0xMDI0OSw2ICsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkpXFxuK1xcdFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXFx1MDAzZWlkX2dlbjtcXG4gXFxuIFxcdC8qIHVudXNlZCAqL1xcbiBcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xcbkBAIC0yMTM2Nyw2ICsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4gXFxuIFxcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xcbitcXHQvKlxcbitcXHQgKiBKSVQgY29uc3RhbnQgYmxpbmRpbmcgdHJlYXRzIGluc3RydWN0aW9uIHBhdGNoaW5nIGZhaWx1cmVzIGFzIGFcXG4rXFx0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcXG4rXFx0ICogY29uc3VtZSBhIGZhdGFsLXNpZ25hbCBjYW5jZWxsYXRpb24gZnJvbSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldCA9IC1FSU5UUjtcXG4gXFxuIFxcdGVudi1cXHUwMDNldmVyaWZpY2F0aW9uX3RpbWUgPSBrdGltZV9nZXRfbnMoKSAtIHN0YXJ0X3RpbWU7XFxuIFxcdHByaW50X3ZlcmlmaWNhdGlvbl9zdGF0cyhlbnYpO1xcbkBAIC0yMTQyNSw2ICsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gMDtcXG4gXFxuIFxcdGVudi1cXHUwMDNlcHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtXFx1MDAzZXByb2csIFxcdTAwMjZyZXQpO1xcbitcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldCA9IC1FSU5UUjtcXG4gXFxuIGVycl9yZWxlYXNlX21hcHM6XFxuIFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xcbkBAIC0xNCw2ICsxNCwxMTcgQEBcXG4gXFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xcbiBcXG4rc3RhdGljIGludCBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGludCBidGZfZmQsIGludCBtYWluX2lkLCBpbnQgc3ViX2lkLFxcbitcXHRcXHRcXHRcXHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuK1xcdFxcdEJQRl9DQUxMX1JFTCgyKSxcXG4rXFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxcbitcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xcbitcXHRcXHR7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LFxcbitcXHRcXHR7IC5pbnNuX29mZiA9IDMsIC50eXBlX2lkID0gc3ViX2lkIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XFxuK1xcdFxcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcXG4rXFx0XFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxcbitcXHRcXHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcXG4rXFx0XFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxcbitcXHR9O1xcbitcXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xcbitcXHRcXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxcbitcXHRcXHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcXG4rXFx0XFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxcbitcXHRcXHQubGljZW5zZSA9IChfX3U2NClcXFwiR1BMXFxcIixcXG4rXFx0XFx0LmxvZ19idWYgPSAoX191NjQpbG9nLFxcbitcXHRcXHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcXG4rXFx0XFx0LmxvZ19sZXZlbCA9IDEsXFxuK1xcdFxcdC5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCxcXG4rXFx0XFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXFxuK1xcdFxcdC5mdW5jX2luZm8gPSAoX191NjQpZnVuY3MsXFxuK1xcdFxcdC5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksXFxuK1xcdH07XFxuK1xcbitcXHRpZiAocmVsb2NhdGUpIHtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVxcdTAwMjZyZWxvO1xcbitcXHRcXHRhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTtcXG4rXFx0fVxcbitcXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XFxuK1xcdHJldHVybiBzeXNfYnBmX3Byb2dfbG9hZChcXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcXG4re1xcbitcXHRjb25zdCB2b2lkICpyYXdfYnRmO1xcbitcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbitcXHRfX3UzMiByYXdfYnRmX3NpemU7XFxuK1xcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XFxuK1xcdGludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJidGZfbmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXFxcImludFxcXCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcXFwiYWRkX2ludFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcXFwiYWRkX2Z1bmNfcHJvdG9cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJtYWluX2ZuXFxcIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFxcXCJhZGRfbWFpbl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJzdWJfZm5cXFwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcXFwiYWRkX3N1Yl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcXFwiY29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcXFwiLCA0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXFxcImFkZF9lbnVtXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFxcXCJ2YWx1ZVxcXCIsIDApLCBcXFwiYWRkX2VudW1fdmFsdWVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFxcXCIwXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcXFwiYWRkX2FjY2Vzc19zdHJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0cmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcXHUwMDI2cmF3X2J0Zl9zaXplKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHJhd19idGYsIFxcXCJyYXdfYnRmXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXFxcImJ0Zl9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xcbitcXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFxcXCJjb250cm9sX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRjbG9zZShwcm9nX2ZkKTtcXG4rXFx0cHJvZ19mZCA9IC0xO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XFxuK1xcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxcbitcXHQgKi9cXG4rXFx0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFxcXCJwb2lzb25lZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcXFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDNcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJwb2lzb25lZF9sb2FkX2xvZ1xcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKGVudi52ZXJib3NpdHkgXFx1MDAzZSBWRVJCT1NFX05PUk1BTCBcXHUwMDI2XFx1MDAyNiBsb2dbMF0pIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlc1xcXCIsIGxvZyk7XFxuK1xcdFxcdHByaW50ZihcXFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGNsb3NlKGJ0Zl9mZCk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbit9XFxuK1xcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXFxuICAqIHBvaW50aW5nIHRvIG5vbi1leGlzdGVudCBCVEYgdHlwZS5cXG4gICovXFxuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxcbiBcXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXFxuIHtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInBvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvclxcXCIpKVxcbitcXHRcXHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYmFkX2xvY2FsX2lkXFxcIikpXFxuIFxcdFxcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuQEAgLTI1LDYgKzI1LDcgQEBcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jZmcuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXFxcIlxcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3Modm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3MpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XFxuK3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2ZnKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2ZnKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQyM2UxMzkwOGNlYmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xcbkBAIC0wLDAgKzEsMTIxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK3N0cnVjdCBicGZfbWFwO1xcbitcXG4rc3RydWN0IGxvY2tfdmFsdWUge1xcbitcXHRzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xcbit9O1xcbitcXG4rc3RydWN0IGlubmVyX2xvY2tfbWFwIHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xcbit9IGlubmVyX2xvY2tfbWFwX2EgU0VDKFxcXCIubWFwc1xcXCIpLCBpbm5lcl9sb2NrX21hcF9iIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbG9ja19tYXApO1xcbit9IGxvY2tfbWFwX29mX21hcHMgU0VDKFxcXCIubWFwc1xcXCIpID0ge1xcbitcXHQudmFsdWVzID0ge1xcbitcXHRcXHRbMF0gPSBcXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcXG4rXFx0XFx0WzFdID0gXFx1MDAyNmlubmVyX2xvY2tfbWFwX2IsXFxuK1xcdH0sXFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XFxuK30gbG9ja19tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RydWN0IGNhbGxiYWNrX2N0eCB7XFxuK1xcdHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpXFxuK3tcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2dmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNldmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xcbitcXG4rXFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsIFxcdTAwMjZjdHgsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCI/dGNcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiYnBmX3NwaW5fdW5sb2NrIG9mIGRpZmZlcmVudCBsb2NrXFxcIilcXG4raW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHkodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUsIE5VTEwsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX2RpZmZlcmVudF9pbm5lcl92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgY2FsbGJhY2tfY3R4IGN0eCA9IHsgLnZhbHVlID0gdmFsdWUgfTtcXG4rXFx0aW50IGlubmVyX2tleSA9IDE7XFxuK1xcdHZvaWQgKmlubmVyX21hcDtcXG4rXFxuK1xcdGlubmVyX21hcCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFxcdTAwMjZpbm5lcl9rZXkpO1xcbitcXHRpZiAoIWlubmVyX21hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShpbm5lcl9tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCBcXHUwMDI2Y3R4LCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllc1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiYnBmX3NwaW5fdW5sb2NrIG9mIGRpZmZlcmVudCBsb2NrXFxcIilcXG4raW50IGNhbGxiYWNrX2lubmVyX21hcF92YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcXG4re1xcbitcXHRpbnQgaW5uZXJfa2V5ID0gMDtcXG4rXFx0dm9pZCAqaW5uZXJfbWFwO1xcbitcXG4rXFx0aW5uZXJfbWFwID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2bG9ja19tYXBfb2ZfbWFwcywgXFx1MDAyNmlubmVyX2tleSk7XFxuK1xcdGlmICghaW5uZXJfbWFwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKGlubmVyX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF9pbm5lcl92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2dmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNnZhbHVlLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXFxuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG5AQCAtNSw2ICs1LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuIFxcbitTRUMoXFxcInhkcFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVnc2FmZSBwcmVzZXJ2ZXMgcGFja2V0IHBvaW50ZXIgY2xhc3MgZGlzcGxhY2VtZW50XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcXG4rX19uYWtlZCB2b2lkIHBrdF9yZWdzYWZlX2NsYXNzX2Rpc3BsYWNlbWVudCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcXFxcXG4rXFx0cjggPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFfZW5kXSk7XFxcXFxcbitcXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXFxcXG4rXFx0cjYgPSByOTtcXFxcXFxuK1xcdHI2ICs9IDg7XFxcXFxcbitcXHRpZiByNiBcXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXFxcXG4rXFx0cjAgPSAqKHU2NCAqKShyOSArIDApO1xcXFxcXG4rXFx0cjQgPSByMDtcXFxcXFxuK1xcdHI0IFxcdTAwMjY9IDE1O1xcXFxcXG4rXFx0cjcgPSByMDtcXFxcXFxuK1xcdHI3IFxcdTAwM2VcXHUwMDNlPSA2MztcXFxcXFxuK1xcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyArPSA0O1xcXFxcXG4rXFx0Z290byBsX2pvaW5fJT07XFxcXFxcbitsX3BhdGhfYl8lPTogXFxcXFxcbitcXHRyNCBcXHUwMDI2PSAzO1xcXFxcXG4rXFx0cjQgKz0gODtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyAtPSA0O1xcXFxcXG4rbF9qb2luXyU9OiBcXFxcXFxuK1xcdHI1ID0gcjM7XFxcXFxcbitcXHRyNSArPSA0O1xcXFxcXG4rXFx0aWYgcjUgXFx1MDAzZSByOCBnb3RvIGxfZXhpdF8lPTtcXFxcXFxuK1xcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxcXFxuK2xfZXhpdF8lPTogXFxcXFxcbitcXHRyMCA9IDA7XFxcXFxcbitcXHRleGl0O1xcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxcbitcXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMyBwb2ludGVyIGFyaXRobWV0aWMgb24gcGt0X2VuZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjUwLjY4NzcxMTI5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0NTI1OTA4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImNoZWNrX3BrdF9wdHJfaWRzXCIsXG4gICAgXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcInJlZmluZV9tYXBfbG9va3VwX3ZhbHVlXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwicHVzaF9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiB2ZXJpZmllciBzdWJzeXN0ZW0gYWNyb3NzIHNldmVyYWwgZmlsZXM6XFxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxcbjIuIGtlcm5lbC9icGYvdmVyaWZpZXIuYzogQWRkcyBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpLCByZWZpbmVzIHNwaW5sb2NrIG1hcCBVSUQgdHJhY2tpbmcgaW4gcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoKSwgZ2VuZXJhdGVzIHVuaXF1ZSByZWdpc3RlciBJRHMgZm9yIHNwaW5sb2NrLWNvbnRhaW5pbmcgbWFwIHZhbHVlcyBpbiBjYWxsYmFjayBoZWxwZXJzIChtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsIHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSwgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSksIGFuZCBhZGRzIGZhdGFsIHNpZ25hbCBhYm9ydCBjaGVja3MgaW4gYnBmX2NoZWNrKCkuXFxuMy4ga2VybmVsL2JwZi9jZmcuYzogQWRkcyBmYWxsdGhyb3VnaCB2YWxpZGF0aW9uIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgaW4gcHVzaF9pbnNuKCkuXFxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciByZWFjaGFibGUgdmlhIHN5c19icGYoQlBGX1BST0dfTE9BRCkgYW5kIHdhcnJhbnQgZnV6emluZyBmb3Igc3RhdGUgcHJ1bmluZyBjb3JyZWN0bmVzcywgdmVyaWZpZXIgZWRnZSBjYXNlcywgYW5kIGxvY2sgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0ZDI2NjdhYjVkODgwOTE3OWQyOGQ5MzUxMDU0ODM0YWQxZWI5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDM2YjY1Nzk3ODc3ZDAuLjVjZjkyY2UxODUyMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtODU0LDYgKzg1NCw4IEBAIHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUge1xuIHN0cnVjdCBicGZfaWRfcGFpciB7XG4gXHR1MzIgb2xkO1xuIFx0dTMyIGN1cjtcbitcdHMzMiBwa3RfcHRyX2RlbHRhO1xuK1x0Ym9vbCBwa3RfcHRyX2RlbHRhX3NldDtcbiB9O1xuIFxuIHN0cnVjdCBicGZfaWRtYXAge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCA4NDJjN2QxZWFiY2NjLi5lM2M5MDQzMjhlZGUwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuKysrIGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtIHtcbiAgKi9cbiBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbitcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICsxMjIsMjYgQEAgc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuK1x0ICogc3VicHJvZ3JhbSBib3VuZGFyeSwgYnV0IHJ1bnMgYmVmb3JlIENPLVJFIHJlbG9jYXRpb25zIGNhbiByZXdyaXRlIGFuXG4rXHQgKiBpbnN0cnVjdGlvbi4gUmVlc3RhYmxpc2ggdGhlIGludmFyaWFudCBvbiB0aGUgZmluYWwgaW5zdHJ1Y3Rpb24gc3RyZWFtXG4rXHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4rXHQgKi9cbitcdGlmIChlID09IEZBTExUSFJPVUdIKSB7XG4rXHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbitcdFx0aWYgKHcgXHUwMDNjIHN1YnByb2ctXHUwMDNlc3RhcnQgfHwgdyBcdTAwM2U9IChzdWJwcm9nICsgMSktXHUwMDNlc3RhcnQpIHtcbitcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCIlZDogXCIsIHQpO1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gJWQgdG8gJWRcXG5cIiwgdCwgdyk7XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIHQsIFwiZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtXCIsXG4rXHRcdFx0XHRcIktlZXAgZmFsbC10aHJvdWdoIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIGN1cnJlbnQgc3VicHJvZ3JhbS5cIixcbitcdFx0XHRcdFwiSW5zdHJ1Y3Rpb24gJWQgZmFsbHMgdGhyb3VnaCB0byBpbnN0cnVjdGlvbiAlZCBvdXRzaWRlIGl0cyBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0dCwgdyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChlID09IEJSQU5DSCkge1xuIFx0XHQvKiBtYXJrIGJyYW5jaCB0YXJnZXQgZm9yIHN0YXRlIHBydW5pbmcgKi9cbiBcdFx0bWFya19wcnVuZV9wb2ludChlbnYsIHcpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCA1MmQzY2VjMzM2NzI3Li45NDAxZmZmY2VkZmQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcImRpc2FzbS5oXCJcbiBcbkBAIC0zMDYsMTIgKzMwNywyOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4gXHR9XG4gfVxuIFxuKy8qXG4rICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbisgKiBPKHByb2ctXHUwMDNlbGVuKSBvcGVyYXRpb24gcGVyIGluc3RydWN0aW9uLiBLZWVwIHRoZWlyIHNoYXJlZCBwcmltaXRpdmVzXG4rICoga2lsbGFibGUgYW5kIHByZWVtcHRpYmxlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcbit7XG4rXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y29uZF9yZXNjaGVkKCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aWYgKGxlbiBcdTAwM2UgMSkge1xuIFx0XHRuZXdfZGF0YSA9IHZyZWFsbG9jKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhLFxuIFx0XHRcdFx0ICAgIGFycmF5X3NpemUoZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuICsgbGVuIC0gMSxcbkBAIC01MjMsNiArNTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdHVuc2lnbmVkIGludCBvcmlnX3Byb2dfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiAtRUlOVFI7XG4rXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4gXHRcdGJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpO1xuIFxuQEAgLTI2NjYsNCArMjY4NiwzIEBAIGludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCA2NmZiMTFiNmM2YTc2Li4yZjhmM2ZlMTY0YjAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTMzOSw2ICszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4rXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XG4gXHRcdGlkbWFwLVx1MDAzZWNudCsrO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiArMzUzLDQzIEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuK1x0czY0IGRlbHRhO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAoIWNoZWNrX2lkcyhvbGQtXHUwMDNlaWQsIGN1ci1cdTAwM2VpZCwgaWRtYXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIW9sZC1cdTAwM2VpZClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFja2V0IHJhbmdlIGlzIHNoYXJlZCBieSBhbGwgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSBJRC4gUHJlc2VydmVcbitcdCAqIHRoZWlyIHJlbGF0aXZlIGRpc3BsYWNlbWVudCwgd2hpbGUgYWxsb3dpbmcgdGhlIHdob2xlIGNsYXNzIHRvIG1vdmUuXG4rXHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4rXHQgKiBiZXR3ZWVuIHR3byB2YWxpZCBvZmZzZXRzIGZpdHMgaW4gczMyLlxuK1x0ICovXG4rXHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4rXHRpZiAoZGVsdGEgXHUwMDNjIFMzMl9NSU4gfHwgZGVsdGEgXHUwMDNlIFMzMl9NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSsrKSB7XG4rXHRcdGlmIChtYXBbaV0ub2xkICE9IG9sZC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbitcdFx0XHRtYXBbaV0ucGt0X3B0cl9kZWx0YSA9IGRlbHRhO1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKlxuICAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXG4gICpcbkBAIC02MzIsOCArNjcwLDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0fSBlbHNlIGlmIChyb2xkLVx1MDAzZXJhbmdlIFx1MDAzZSByY3VyLVx1MDAzZXJhbmdlKSB7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tXHRcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xuLVx0XHRpZiAoIWNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4rXHRcdGlmICghY2hlY2tfcGt0X3B0cl9pZHMocm9sZCwgcmN1ciwgaWRtYXApKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cbiBcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFjMzAzOWYzZmMzMjMuLmFkMTRhN2ZiZWQ3MmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuQEAgLTQ0Nyw2ICs0NDgsMTMgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiBcdHJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctXHUwMDNlbWFwX3B0cjtcbitcbitcdHJldHVybiAhcmVnLVx1MDAzZW1hcF91aWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTkyNSwxMSArMTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0aWYgKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsO1xuIFx0XHRyZWctXHUwMDNlbWFwX3B0ciA9IG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YTtcbi1cdFx0LyogdHJhbnNmZXIgcmVnJ3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW1cbi1cdFx0ICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuXG4rXHRcdC8qXG4rXHRcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXG4rXHRcdCAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZVxuK1x0XHQgKiB2ZXJpZmljYXRpb24gbmVlZHMgdG8gZGlzdGluZ3Vpc2ggY29uY3JldGUgbWFwIGluc3RhbmNlcy4gRG9pbmdcbitcdFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cbitcdFx0ICpcbitcdFx0ICogRWFjaCBtYXAgbG9va3VwIGhhcyBhIHVuaXF1ZSByZWdpc3RlciBJRCwgc28gdXNlIGl0IGFzIHRoZSBVSUQgb2ZcbitcdFx0ICogdGhlIGlubmVyIG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlaW5uZXJfbWFwX21ldGEtXHUwMDNlcmVjb3JkLFxuLVx0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspKVxuK1x0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUksgfFxuK1x0XHRcdFx0XHQgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSlcbiBcdFx0XHRyZWctXHUwMDNlbWFwX3VpZCA9IHJlZy1cdTAwM2VpZDtcbiBcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcbiBcdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xuQEAgLTEwMDM1LDYgKzEwMDUwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSlcbitcdFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqL1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSA9IGNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfM107XG5AQCAtMTAxMzEsNiArMTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0yMTM2Nyw2ICsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xuK1x0LypcbitcdCAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYVxuK1x0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcbitcdCAqIGNvbnN1bWUgYSBmYXRhbC1zaWduYWwgY2FuY2VsbGF0aW9uIGZyb20gYnBmX3BhdGNoX2luc25fZGF0YSgpLlxuK1x0ICovXG4rXHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRyZXQgPSAtRUlOVFI7XG4gXG4gXHRlbnYtXHUwMDNldmVyaWZpY2F0aW9uX3RpbWUgPSBrdGltZV9nZXRfbnMoKSAtIHN0YXJ0X3RpbWU7XG4gXHRwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTtcbkBAIC0yMTQyNSw2ICsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9IDA7XG4gXG4gXHRlbnYtXHUwMDNlcHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtXHUwMDNlcHJvZywgXHUwMDI2cmV0KTtcbitcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldCA9IC1FSU5UUjtcbiBcbiBlcnJfcmVsZWFzZV9tYXBzOlxuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbkBAIC0xNCw2ICsxNCwxMTcgQEBcbiBcbiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTtcbiBcbitzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4rXHRcdFx0XHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXG4re1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9DQUxMX1JFTCgyKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0fTtcbitcdHN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7XG4rXHRcdHsgLmluc25fb2ZmID0gMCwgLnR5cGVfaWQgPSBtYWluX2lkIH0sXG4rXHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0ge1xuK1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4rXHRcdC50eXBlX2lkID0gZW51bV9pZCxcbitcdFx0LmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsXG4rXHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbitcdH07XG4rXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xuK1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuK1x0XHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcbitcdFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxuK1x0XHQubGljZW5zZSA9IChfX3U2NClcIkdQTFwiLFxuK1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4rXHRcdC5sb2dfc2l6ZSA9IHNpemVvZihsb2cpLFxuK1x0XHQubG9nX2xldmVsID0gMSxcbitcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuK1x0XHQuZnVuY19pbmZvX3JlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKSxcbitcdFx0LmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcyxcbitcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbitcdH07XG4rXG4rXHRpZiAocmVsb2NhdGUpIHtcbitcdFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcbitcdFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVx1MDAyNnJlbG87XG4rXHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuK1x0fVxuK1x0bWVtc2V0KGxvZywgMCwgc2l6ZW9mKGxvZykpO1xuK1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm9pZCAqcmF3X2J0ZjtcbitcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4rXHRfX3UzMiByYXdfYnRmX3NpemU7XG4rXHRpbnQgYWNjZXNzX3N0cl9vZmYsIGJ0Zl9mZCA9IC0xLCBlbnVtX2lkO1xuK1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuK1xuK1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwiYnRmX25ld19lbXB0eVwiKSlcbitcdFx0cmV0dXJuO1xuK1x0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCJpbnRcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcImFkZF9pbnRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCJhZGRfZnVuY19wcm90b1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0bWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcIm1haW5fZm5cIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChtYWluX2lkLCAwLCBcImFkZF9tYWluX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHN1Yl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcInN1Yl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHN1Yl9pZCwgMCwgXCJhZGRfc3ViX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCJjb3JlX3JlbG9fc3VicHJvZ19wb2lzb25fbWlzc2luZ1wiLCA0KTtcbitcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwiYWRkX2VudW1cIikgfHxcbitcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcInZhbHVlXCIsIDApLCBcImFkZF9lbnVtX3ZhbHVlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwiMFwiKTtcbitcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcImFkZF9hY2Nlc3Nfc3RyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRyYXdfYnRmID0gYnRmX19yYXdfZGF0YShidGYsIFx1MDAyNnJhd19idGZfc2l6ZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCJyYXdfYnRmXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRidGZfZmQgPSBicGZfYnRmX2xvYWQocmF3X2J0ZiwgcmF3X2J0Zl9zaXplLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXCJidGZfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogVGhlIHNhbWUgdHdvLXN1YnByb2dyYW0gcHJvZ3JhbSBpcyB2YWxpZCBiZWZvcmUgdGhlIHJlbG9jYXRpb24uICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRwcm9nX2ZkID0gLTE7XG4rXG4rXHQvKlxuK1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XG4rXHQgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy5cbitcdCAqL1xuK1x0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXG4rXHRcdFx0XHRcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XG4rXHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcInBvaXNvbmVkX2xvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCJmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuIDIgdG8gM1wiLFxuK1x0XHRcdCAgXCJwb2lzb25lZF9sb2FkX2xvZ1wiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxcblwiKTtcbitcdFx0cHJpbnRmKFwiJXNcIiwgbG9nKTtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcblwiKTtcbitcdH1cbitcdGNsb3NlKHByb2dfZmQpO1xuK1x0Y2xvc2UoYnRmX2ZkKTtcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbitcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxuIFxuIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKVxuIHtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCIpKVxuK1x0XHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJiYWRfbG9jYWxfaWRcIikpXG4gXHRcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDIzZTEzOTA4Y2ViZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSwxMjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK3N0cnVjdCBicGZfbWFwO1xuK1xuK3N0cnVjdCBsb2NrX3ZhbHVlIHtcbitcdHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4rfTtcbitcbitzdHJ1Y3QgaW5uZXJfbG9ja19tYXAge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gaW5uZXJfbG9ja19tYXBfYSBTRUMoXCIubWFwc1wiKSwgaW5uZXJfbG9ja19tYXBfYiBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7XG4rfSBsb2NrX21hcF9vZl9tYXBzIFNFQyhcIi5tYXBzXCIpID0ge1xuK1x0LnZhbHVlcyA9IHtcbitcdFx0WzBdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcbitcdFx0WzFdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYixcbitcdH0sXG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gbG9ja19tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IGNhbGxiYWNrX2N0eCB7XG4rXHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHRcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHN0cnVjdCBjYWxsYmFja19jdHggKmN0eClcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V2YWx1ZS1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiY2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcIilcbitfX2ZhaWx1cmUgX19tc2coXCJicGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcIilcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1x0aW50IGlubmVyX2tleSA9IDE7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0aW50IGlubmVyX2tleSA9IDA7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19kZXNjcmlwdGlvbihcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5X3NhbWUodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX3NhbWVfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbmluZGV4IDBiODZkOTVhNDEzMzUuLjY5MmE4NDY4ZjNkNzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuQEAgLTUsNiArNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiWERQIHBrdCByZWdzYWZlIHByZXNlcnZlcyBwYWNrZXQgcG9pbnRlciBjbGFzcyBkaXNwbGFjZW1lbnRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcIilcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcbitfX25ha2VkIHZvaWQgcGt0X3JlZ3NhZmVfY2xhc3NfZGlzcGxhY2VtZW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlxcXG4rXHRyOCA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcXFxuK1x0cjkgPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFdKTtcXFxuK1x0cjYgPSByOTtcXFxuK1x0cjYgKz0gODtcXFxuK1x0aWYgcjYgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHI5ICsgMCk7XFxcbitcdHI0ID0gcjA7XFxcbitcdHI0IFx1MDAyNj0gMTU7XFxcbitcdHI3ID0gcjA7XFxcbitcdHI3IFx1MDAzZVx1MDAzZT0gNjM7XFxcbitcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzICs9IDQ7XFxcbitcdGdvdG8gbF9qb2luXyU9O1xcXG4rbF9wYXRoX2JfJT06IFxcXG4rXHRyNCBcdTAwMjY9IDM7XFxcbitcdHI0ICs9IDg7XFxcbitcdHIyID0gcjk7XFxcbitcdHIyICs9IHI0O1xcXG4rXHRyMyA9IHIyO1xcXG4rXHRyMyAtPSA0O1xcXG4rbF9qb2luXyU9OiBcXFxuK1x0cjUgPSByMztcXFxuK1x0cjUgKz0gNDtcXFxuK1x0aWYgcjUgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHIyICsgMCk7XFxcbitsX2V4aXRfJT06IFxcXG4rXHRyMCA9IDA7XFxcbitcdGV4aXQ7XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxuK1x0ICBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YV9lbmQsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGFfZW5kKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIFNFQyhcInhkcFwiKVxuIF9fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlYWQsIHBrdF9lbmQgbWFuZ2xpbmcsIGJhZCBhY2Nlc3MgMVwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlIzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kXCIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1MC42ODc3MTMxNjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDc2ODgzODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBSZWNvbW1lbmRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTGV0J3Mgc2VlLi4uIEkndmUgcmV2aWV3ZWQgdGhlIGRpZmYsIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmc6XG5cbkZpcnN0LCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGRlZXBlciBkaXZlLiBUaGUgY2hhbmdlcyB0b3VjaCB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllci4gSXQncyBub3QganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGlzIGhpdHMgY29yZSBsb2dpYyAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGBrZXJuZWwvYnBmL2NmZy5jYCwgYGtlcm5lbC9icGYvZml4dXBzLmNgLCBga2VybmVsL2JwZi9zdGF0ZXMuY2ApLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnLi4uIGluIHRoZSBiZXN0IHBvc3NpYmxlIHdheSEgVGhlIEJQRiB2ZXJpZmllciBpcyBhIG1hc3NpdmUgYXR0YWNrIHN1cmZhY2UgYmVjYXVzZSBpdCdzIHRoZSBzZWN1cml0eSBib3VuZGFyeSBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgdGhlIGBCUEZfUFJPR19MT0FEYCBjb21tYW5kLiBBbnkgd2Vha25lc3MgaGVyZSBjb3VsZCBsZWFkIHRvIGRldmFzdGF0aW5nIGNvbnNlcXVlbmNlcy5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIHN0YXRlIHBydW5pbmcgKGByZWdzYWZlYCwgYGNoZWNrX3BrdF9wdHJfaWRzYCksIHdoaWNoIGhhbmRsZXMgdHJhY2tpbmcgcmVnaXN0ZXIgc3RhdGVzOyB0aGlzIGlzIHN1cGVyIGltcG9ydGFudCBiZWNhdXNlIGl0J3MgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgdmVyaWZpZXLigJlzIGFiaWxpdHkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBvdGhlciBtZW1vcnkgZXJyb3JzLiBUaGVuIHRoZXJlJ3MgbG9jayB0cmFja2luZyBhY3Jvc3MgY2FsbGJhY2tzIChgcmVnX21heV9wb2ludF90b19zcGluX2xvY2tgKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBwcm90ZWN0aW5nIGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBUaGVyZSBhcmUgYWxzbyBuZXcgY2hlY2tzIGZvciBDRkcgc3VicHJvZ3JhbSBib3VuZGFyaWVzLCB3aGljaCBoZWxwcyBwcmV2ZW50IGNvbnRyb2wtZmxvdyBlcnJvcnMgYW5kIHBvdGVudGlhbCBieXBhc3NlcyBvZiB0aGUgdmVyaWZpZXIsIGFuZCBjaGVja3MgZm9yIGZhdGFsIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuIEFsbCBvZiB0aGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBjaGFuZ2VzIHRoYXQgZnJlcXVlbnRseSB1bmNvdmVyIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcy5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpdHMgYXR0YWNrIHN1cmZhY2UsIHRoaXMgcGF0Y2ggc2VyaWVzIGRpcmVjdGx5IGltcGFjdHMgU2VjdGlvbiAzOiBDb3JlIFN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBCUEYsIGl0cyB2ZXJpZmllciwgc3RhdGUgcHJ1bmluZywgQ0ZHIGNoZWNrcywgbG9jayB0cmFja2luZywgYW5kIHNpZ25hbCBhYm9ydCBoYW5kbGluZy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBmdXp6aW5nIHdpdGggYSB0b29sIGxpa2UgU3l6a2FsbGVyIGlzIG1vc3QgZWZmZWN0aXZlLlxuXG5NeSByZWNvbW1lbmRhdGlvbiBpcyBhbiB1bmVxdWl2b2NhbCBZRVMhIFdlIG5lZWQgdG8gZ2V0IFN5emthbGxlciBwb2ludGVkIGF0IHRoaXMgKmltbWVkaWF0ZWx5Ki4gQmVmb3JlIHdlIGRvIHRoYXQgdGhvdWdoLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgdGhlIEJQRiBzdWJzeXN0ZW0gb3Igc3BlY2lmaWMgQlBGIGZlYXR1cmVzLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBieSBmdXp6aW5nIGNvZGUgdGhhdCBpc24ndCBidWlsdCBvciBlbmFibGVkLiBJJ2xsIHVzZSBjb2Rlc2VhcmNoL2dyZXAgb3IgcmVhZC1maWxlIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgYGtlcm5lbC9icGYvYCBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBUaGVuLCB3aXRoIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBjbGVhciwgbGV0J3Mgc3RhcnQgZnV6emluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1Ni4xNjQ2MDAxNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4Njg3NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTU4PWNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWc6NjA6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNjEtXFx0aGVscFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTczPWNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNzUtXFx0ZGVmYXVsdCB5XFxua2VybmVsL2JwZi9LY29uZmlnOjc2OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctNzctXFx0aGVscFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkyPWNvbmZpZyBCUEZfTFNNXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctOTQtXFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxua2VybmVsL2JwZi9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctOTYtXFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXFxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXFx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjQ2OD1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3MS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDcyOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzAzNj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDM4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM5LVxcdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2Mi1cXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XFxua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2NC1cXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cXHUwMDNla2Z1bmNfYnRmX3RhYik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg1LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMzg2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg3LVxcdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQyND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MjgtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQ1NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU2LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0NTc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0NTgtXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0yPW1lbnVjb25maWcgQlBGX1BSRUxPQURcXG4tLVxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCUEZcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy02LVxcdCMgVGhlIGRlcGVuZGVuY3kgb24gIUNPTVBJTEVfVEVTVCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIGVuYWJsZWRcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MTQ9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIxLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MjI6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjMtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzY5PXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDYtXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODA3OlxcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NTYuMzUzMjk1NjkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU5ODM0NDU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcyB0byB0aGUgQlBGIHZlcmlmaWVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBjaGFuZ2VzIGFuZCB0aGVpciBjYWxsZXJzLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhY3Jvc3MgdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5OiBgYnBmX2NoZWNrYCwgYHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eWAgKGluIHZlcmlmaWVyLmMpLCBgY2hlY2tfcGt0X3B0cl9pZHNgLCBgY2hlY2tfaWRzYCwgYHJlZ3NhZmVgIChpbiBzdGF0ZXMuYyksIGBwdXNoX2luc25gIChpbiBjZmcuYyksIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AsIGFuZCBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGAgKGluIGZpeHVwcy5jKS5cblxuTXkgbWFpbiBlbnRyeSBwb2ludCBvZiBjb25jZXJuIGlzIGBicGZfY2hlY2tgLCBhcyB0aGF0J3MgdGhlIGNvcmUgdmVyaWZpZXIsIGFuZCB0aGUgZmFjdCB0aGF0IGByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYW5kIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlYCBhcmUgYWRkZWQgaW4gcmVsYXRpb24gdG8gdGhlIG5ldyBsb2dpYywgc2VlbXMgdGhhdCB0aGUgbWFqb3IgY2hhbmdlIGlzIHRoZSB0cmFja2luZyBvZiBzcGlubG9ja3MgZm9yIGlubmVyIG1hcHMgYW5kIGNhbGxiYWNrcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN0YXRlIHRyYWNraW5nIGNoYW5nZXMgKGBjaGVja19wa3RfcHRyX2lkc2AsIGByZWdzYWZlYCkuIFRoZSBDb250cm9sIEZsb3cgR3JhcGggKENGRykgY2hhbmdlcyB3aXRoIGBwdXNoX2luc25gIGFyZSBpbXBvcnRhbnQgdG9vLiBBbmQgdGhlbiwgdGhlIGluc3RydWN0aW9uIHBhdGNoaW5nIGFuZCByZW1vdmFsIHJvdXRpbmVzIChgYnBmX3BhdGNoX2luc25fZGF0YWAsIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgKSBhbmQgc2lnbmFsIGNoZWNrcyBhcmUgY3JpdGljYWwgZm9yIHNhZmV0eSwgb2YgY291cnNlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgbm9uLXN0YXRpYyBzeW1ib2xzIGZvciBhIHBvdGVudGlhbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIFNvIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50czogYGJwZl9jaGVja2AsIGByZWdzYWZlYCwgYGNoZWNrX3BrdF9wdHJfaWRzYCwgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlYCwgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGBwdXNoX2luc25gLiBUaGVzZSBzZWVtIHNwZWNpZmljIHRvIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LlxuXG5UaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgYEJQRl9TWVNDQUxMYCwgYW5kIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2Ugc291cmNlIGZpbGVzIGFyZSBvbmx5IGJ1aWx0IHdoZW4gdGhhdCBpcyBlbmFibGVkLiBUaGUgYnVpbGQgcnVsZXMgY29uZmlybSBpdC5cblxuTXkgZm9jdXMgc3ltYm9scyBhcmUgc3BlY2lmaWMgYW5kIG5vdCB1YmlxdWl0b3VzLiBJIGhhdmUgYSBjbGVhbiBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIHNvIG5vdyBsZXQncyB2ZXJpZnkgbXkgZmluZGluZ3MuIFRoZXNlIHBhdGNoZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgdmVyaWZpZXIgY29tcG9uZW50cywgcHJpbWFyaWx5IGltcGFjdGluZyB0aGUgZm9sbG93aW5nOlxuLSBTdGF0ZSBwcnVuaW5nIGluIGBzdGF0ZXMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcmVnc2FmZWAgYW5kIGBjaGVja19wa3RfcHRyX2lkc2AgZm9yIGltcHJvdmVkIHBhY2tldCBwb2ludGVyIGRpc3BsYWNlbWVudCB0cmFja2luZy5cbi0gYHZlcmlmaWVyLmNgIHVwZGF0ZXMgYWRkcmVzcyBpbm5lciBtYXAgbG9va3VwIGFuZCBzcGlubG9jayBoYW5kbGluZyBhbmQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIHN0YXRlLiBBbmQgaXQgYWxzbyBpbmNsdWRlcyBhZGRpdGlvbmFsIGZhdGFsIHNpZ25hbCBjaGVja2luZyBpbiBgYnBmX2NoZWNrYC5cbi0gYGNmZy5jYCBhZGRzIENGRyB2YWxpZGF0aW9uIHdpdGggYHB1c2hfaW5zbmAuXG4tIGBmaXh1cHMuY2AgYWRkcyBwcmVlbXB0aW9uIGFuZCBmYXRhbCBzaWduYWwgY2hlY2tzIGluIHBhdGNoaW5nIGFuZCByZW1vdmFsIHJvdXRpbmVzLlxuXG5BbGwgb2YgdGhlc2UgZGlyZWN0bHkgaW1wYWN0IEJQRiBwcm9ncmFtIGxvYWRpbmcgY29ycmVjdG5lc3MsIHZlcmlmaWNhdGlvbiwgYW5kIG92ZXJhbGwgc2FmZXR5IGFuZCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGggb2YgQlBGIHByb2dyYW0gbG9hZGluZy4gU28sIG5vdyBpdCdzIHRpbWUgdG8gY2hlY2sgaWYgSSBjYW4gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcgYmVmb3JlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gRXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGFsaWduZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0NCwiT3V0cHV0VG9rZW5zIjo0MDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjAzLjk1MTY1MjE3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjQxMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwicmVmaW5lX21hcF9sb29rdXBfdmFsdWVcIixcbiAgICBcIm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc1wiLFxuICAgIFwic2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlXCIsXG4gICAgXCJzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlXCIsXG4gICAgXCJwdXNoX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQlBGIHZlcmlmaWVyIHN1YnN5c3RlbSBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczpcXG4xLiBrZXJuZWwvYnBmL3N0YXRlcy5jOiBBZGRzIGNoZWNrX3BrdF9wdHJfaWRzKCkgYW5kIG1vZGlmaWVzIHJlZ3NhZmUoKSB0byBwcmVzZXJ2ZSBkaXNwbGFjZW1lbnQgd2l0aGluIHBhY2tldCBwb2ludGVyIElEIGNsYXNzZXMgZHVyaW5nIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcuXFxuMi4ga2VybmVsL2JwZi92ZXJpZmllci5jOiBBZGRzIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KCksIHJlZmluZXMgc3BpbmxvY2sgbWFwIFVJRCB0cmFja2luZyBpbiByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZSgpLCBnZW5lcmF0ZXMgdW5pcXVlIHJlZ2lzdGVyIElEcyBmb3Igc3BpbmxvY2stY29udGFpbmluZyBtYXAgdmFsdWVzIGluIGNhbGxiYWNrIGhlbHBlcnMgKG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncywgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlLCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSwgYW5kIGFkZHMgZmF0YWwgc2lnbmFsIGFib3J0IGNoZWNrcyBpbiBicGZfY2hlY2soKS5cXG4zLiBrZXJuZWwvYnBmL2NmZy5jOiBBZGRzIGZhbGx0aHJvdWdoIHZhbGlkYXRpb24gYWNyb3NzIHN1YnByb2dyYW0gYm91bmRhcmllcyBpbiBwdXNoX2luc24oKS5cXG40LiBrZXJuZWwvYnBmL2ZpeHVwcy5jOiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQpIHRvIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBhbmQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKCkuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHJlYWNoYWJsZSB2aWEgc3lzX2JwZihCUEZfUFJPR19MT0FEKSBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBzdGF0ZSBwcnVuaW5nIGNvcnJlY3RuZXNzLCB2ZXJpZmllciBlZGdlIGNhc2VzLCBhbmQgbG9jayBzYWZldHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImNoZWNrX3BrdF9wdHJfaWRzXCIsXG4gICAgXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcInJlZmluZV9tYXBfbG9va3VwX3ZhbHVlXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwicHVzaF9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEJQRiB2ZXJpZmllciBzdWJzeXN0ZW0gYWNyb3NzIHNldmVyYWwgZmlsZXM6XFxuMS4ga2VybmVsL2JwZi9zdGF0ZXMuYzogQWRkcyBjaGVja19wa3RfcHRyX2lkcygpIGFuZCBtb2RpZmllcyByZWdzYWZlKCkgdG8gcHJlc2VydmUgZGlzcGxhY2VtZW50IHdpdGhpbiBwYWNrZXQgcG9pbnRlciBJRCBjbGFzc2VzIGR1cmluZyBzdGF0ZSBlcXVpdmFsZW5jZSBwcnVuaW5nLlxcbjIuIGtlcm5lbC9icGYvdmVyaWZpZXIuYzogQWRkcyBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpLCByZWZpbmVzIHNwaW5sb2NrIG1hcCBVSUQgdHJhY2tpbmcgaW4gcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoKSwgZ2VuZXJhdGVzIHVuaXF1ZSByZWdpc3RlciBJRHMgZm9yIHNwaW5sb2NrLWNvbnRhaW5pbmcgbWFwIHZhbHVlcyBpbiBjYWxsYmFjayBoZWxwZXJzIChtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsIHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSwgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSksIGFuZCBhZGRzIGZhdGFsIHNpZ25hbCBhYm9ydCBjaGVja3MgaW4gYnBmX2NoZWNrKCkuXFxuMy4ga2VybmVsL2JwZi9jZmcuYzogQWRkcyBmYWxsdGhyb3VnaCB2YWxpZGF0aW9uIGFjcm9zcyBzdWJwcm9ncmFtIGJvdW5kYXJpZXMgaW4gcHVzaF9pbnNuKCkuXFxuNC4ga2VybmVsL2JwZi9maXh1cHMuYzogQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KSB0byBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgYW5kIHZlcmlmaWVyX3JlbW92ZV9pbnNucygpLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb2RlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciByZWFjaGFibGUgdmlhIHN5c19icGYoQlBGX1BST0dfTE9BRCkgYW5kIHdhcnJhbnQgZnV6emluZyBmb3Igc3RhdGUgcHJ1bmluZyBjb3JyZWN0bmVzcywgdmVyaWZpZXIgZWRnZSBjYXNlcywgYW5kIGxvY2sgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowNC4xNDAzMTEwODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDM0MDc0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowNC4xNDE1NDE5OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2MTAyMTY5MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxcbjEuIEFkZHMgYSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGZhbGx0aHJvdWdoIGNoZWNrIGluIGNmZy5jIHRvIGVuc3VyZSBDTy1SRSByZWxvY2F0aW9ucyBjYW5ub3QgdmlvbGF0ZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuXFxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXFxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cXG40LiBDb3JyZWN0cyBzcGlubG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgaW5uZXIgbWFwIGxvb2t1cHMgYW5kIGNhbGxiYWNrIGFyZ3VtZW50IHN0YXRlcyBpbiB2ZXJpZmllci5jLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0ZDI2NjdhYjVkODgwOTE3OWQyOGQ5MzUxMDU0ODM0YWQxZWI5Y2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDM2YjY1Nzk3ODc3ZDAuLjVjZjkyY2UxODUyMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtODU0LDYgKzg1NCw4IEBAIHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUge1xuIHN0cnVjdCBicGZfaWRfcGFpciB7XG4gXHR1MzIgb2xkO1xuIFx0dTMyIGN1cjtcbitcdHMzMiBwa3RfcHRyX2RlbHRhO1xuK1x0Ym9vbCBwa3RfcHRyX2RlbHRhX3NldDtcbiB9O1xuIFxuIHN0cnVjdCBicGZfaWRtYXAge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCA4NDJjN2QxZWFiY2NjLi5lM2M5MDQzMjhlZGUwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuKysrIGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtIHtcbiAgKi9cbiBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbitcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICsxMjIsMjYgQEAgc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuK1x0ICogc3VicHJvZ3JhbSBib3VuZGFyeSwgYnV0IHJ1bnMgYmVmb3JlIENPLVJFIHJlbG9jYXRpb25zIGNhbiByZXdyaXRlIGFuXG4rXHQgKiBpbnN0cnVjdGlvbi4gUmVlc3RhYmxpc2ggdGhlIGludmFyaWFudCBvbiB0aGUgZmluYWwgaW5zdHJ1Y3Rpb24gc3RyZWFtXG4rXHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4rXHQgKi9cbitcdGlmIChlID09IEZBTExUSFJPVUdIKSB7XG4rXHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbitcdFx0aWYgKHcgXHUwMDNjIHN1YnByb2ctXHUwMDNlc3RhcnQgfHwgdyBcdTAwM2U9IChzdWJwcm9nICsgMSktXHUwMDNlc3RhcnQpIHtcbitcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCIlZDogXCIsIHQpO1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gJWQgdG8gJWRcXG5cIiwgdCwgdyk7XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIHQsIFwiZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtXCIsXG4rXHRcdFx0XHRcIktlZXAgZmFsbC10aHJvdWdoIGNvbnRyb2wgZmxvdyBpbnNpZGUgdGhlIGN1cnJlbnQgc3VicHJvZ3JhbS5cIixcbitcdFx0XHRcdFwiSW5zdHJ1Y3Rpb24gJWQgZmFsbHMgdGhyb3VnaCB0byBpbnN0cnVjdGlvbiAlZCBvdXRzaWRlIGl0cyBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0dCwgdyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChlID09IEJSQU5DSCkge1xuIFx0XHQvKiBtYXJrIGJyYW5jaCB0YXJnZXQgZm9yIHN0YXRlIHBydW5pbmcgKi9cbiBcdFx0bWFya19wcnVuZV9wb2ludChlbnYsIHcpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCA1MmQzY2VjMzM2NzI3Li45NDAxZmZmY2VkZmQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcImRpc2FzbS5oXCJcbiBcbkBAIC0zMDYsMTIgKzMwNywyOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4gXHR9XG4gfVxuIFxuKy8qXG4rICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbisgKiBPKHByb2ctXHUwMDNlbGVuKSBvcGVyYXRpb24gcGVyIGluc3RydWN0aW9uLiBLZWVwIHRoZWlyIHNoYXJlZCBwcmltaXRpdmVzXG4rICoga2lsbGFibGUgYW5kIHByZWVtcHRpYmxlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcbit7XG4rXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y29uZF9yZXNjaGVkKCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aWYgKGxlbiBcdTAwM2UgMSkge1xuIFx0XHRuZXdfZGF0YSA9IHZyZWFsbG9jKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhLFxuIFx0XHRcdFx0ICAgIGFycmF5X3NpemUoZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuICsgbGVuIC0gMSxcbkBAIC01MjMsNiArNTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdHVuc2lnbmVkIGludCBvcmlnX3Byb2dfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4rXHRcdHJldHVybiAtRUlOVFI7XG4rXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4gXHRcdGJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpO1xuIFxuQEAgLTI2NjYsNCArMjY4NiwzIEBAIGludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5pbmRleCA2NmZiMTFiNmM2YTc2Li4yZjhmM2ZlMTY0YjAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuQEAgLTMzOSw2ICszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4rXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XG4gXHRcdGlkbWFwLVx1MDAzZWNudCsrO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiArMzUzLDQzIEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuK1x0czY0IGRlbHRhO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAoIWNoZWNrX2lkcyhvbGQtXHUwMDNlaWQsIGN1ci1cdTAwM2VpZCwgaWRtYXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIW9sZC1cdTAwM2VpZClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFja2V0IHJhbmdlIGlzIHNoYXJlZCBieSBhbGwgcG9pbnRlcnMgd2l0aCB0aGUgc2FtZSBJRC4gUHJlc2VydmVcbitcdCAqIHRoZWlyIHJlbGF0aXZlIGRpc3BsYWNlbWVudCwgd2hpbGUgYWxsb3dpbmcgdGhlIHdob2xlIGNsYXNzIHRvIG1vdmUuXG4rXHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4rXHQgKiBiZXR3ZWVuIHR3byB2YWxpZCBvZmZzZXRzIGZpdHMgaW4gczMyLlxuK1x0ICovXG4rXHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4rXHRpZiAoZGVsdGEgXHUwMDNjIFMzMl9NSU4gfHwgZGVsdGEgXHUwMDNlIFMzMl9NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSsrKSB7XG4rXHRcdGlmIChtYXBbaV0ub2xkICE9IG9sZC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbitcdFx0XHRtYXBbaV0ucGt0X3B0cl9kZWx0YSA9IGRlbHRhO1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKlxuICAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXG4gICpcbkBAIC02MzIsOCArNjcwLDggQEAgc3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcbiBcdFx0fSBlbHNlIGlmIChyb2xkLVx1MDAzZXJhbmdlIFx1MDAzZSByY3VyLVx1MDAzZXJhbmdlKSB7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tXHRcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xuLVx0XHRpZiAoIWNoZWNrX2lkcyhyb2xkLVx1MDAzZWlkLCByY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4rXHRcdGlmICghY2hlY2tfcGt0X3B0cl9pZHMocm9sZCwgcmN1ciwgaWRtYXApKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cbiBcdFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFjMzAzOWYzZmMzMjMuLmFkMTRhN2ZiZWQ3MmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJvci1pbmplY3Rpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuQEAgLTQ0Nyw2ICs0NDgsMTMgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiBcdHJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctXHUwMDNlbWFwX3B0cjtcbitcbitcdHJldHVybiAhcmVnLVx1MDAzZW1hcF91aWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTkyNSwxMSArMTkzMywxOCBAQCBzdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0aWYgKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSkge1xuIFx0XHRyZWctXHUwMDNldHlwZSA9IENPTlNUX1BUUl9UT19NQVAgfCBtYXliZV9udWxsO1xuIFx0XHRyZWctXHUwMDNlbWFwX3B0ciA9IG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YTtcbi1cdFx0LyogdHJhbnNmZXIgcmVnJ3MgaWQgd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSBtYXBfbG9va3VwX2VsZW1cbi1cdFx0ICogYXMgVUlEIG9mIHRoZSBpbm5lciBtYXAuXG4rXHRcdC8qXG4rXHRcdCAqIENvbmNyZXRlIGlubmVyIG1hcHMgc2hhcmUgdGhlIHZlcmlmaWVyLXZpc2libGUgaW5uZXJfbWFwX21ldGEuXG4rXHRcdCAqIFByZXNlcnZlIHRoZSBsb29rdXAgaWRlbnRpdHkgb25seSBmb3IgZW1iZWRkZWQgb2JqZWN0cyB3aG9zZVxuK1x0XHQgKiB2ZXJpZmljYXRpb24gbmVlZHMgdG8gZGlzdGluZ3Vpc2ggY29uY3JldGUgbWFwIGluc3RhbmNlcy4gRG9pbmdcbitcdFx0ICogdGhpcyBmb3IgZXZlcnkgaW5uZXIgbWFwIG1ha2VzIHN0YXRlIHBydW5pbmcgdG9vIGNvbnNlcnZhdGl2ZS5cbitcdFx0ICpcbitcdFx0ICogRWFjaCBtYXAgbG9va3VwIGhhcyBhIHVuaXF1ZSByZWdpc3RlciBJRCwgc28gdXNlIGl0IGFzIHRoZSBVSUQgb2ZcbitcdFx0ICogdGhlIGlubmVyIG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlaW5uZXJfbWFwX21ldGEtXHUwMDNlcmVjb3JkLFxuLVx0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspKVxuK1x0XHRcdFx0XHQgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUksgfFxuK1x0XHRcdFx0XHQgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKSlcbiBcdFx0XHRyZWctXHUwMDNlbWFwX3VpZCA9IHJlZy1cdTAwM2VpZDtcbiBcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcbiBcdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xuQEAgLTEwMDM1LDYgKzEwMDUwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfcHRyO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gY2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSlcbitcdFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqL1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSA9IGNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfM107XG5AQCAtMTAxMzEsNiArMTAxNDksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI3MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0yMTM2Nyw2ICsyMTM5MSwxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xuK1x0LypcbitcdCAqIEpJVCBjb25zdGFudCBibGluZGluZyB0cmVhdHMgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgZmFpbHVyZXMgYXMgYVxuK1x0ICogcmVxdWVzdCB0byBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyLiBEbyBub3QgbGV0IHN1Y2ggZmFsbGJhY2tcbitcdCAqIGNvbnN1bWUgYSBmYXRhbC1zaWduYWwgY2FuY2VsbGF0aW9uIGZyb20gYnBmX3BhdGNoX2luc25fZGF0YSgpLlxuK1x0ICovXG4rXHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRyZXQgPSAtRUlOVFI7XG4gXG4gXHRlbnYtXHUwMDNldmVyaWZpY2F0aW9uX3RpbWUgPSBrdGltZV9nZXRfbnMoKSAtIHN0YXJ0X3RpbWU7XG4gXHRwcmludF92ZXJpZmljYXRpb25fc3RhdHMoZW52KTtcbkBAIC0yMTQyNSw2ICsyMTQ1Niw4IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9IDA7XG4gXG4gXHRlbnYtXHUwMDNlcHJvZyA9IF9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoZW52LCBlbnYtXHUwMDNlcHJvZywgXHUwMDI2cmV0KTtcbitcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdHJldCA9IC1FSU5UUjtcbiBcbiBlcnJfcmVsZWFzZV9tYXBzOlxuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbkBAIC0xNCw2ICsxNCwxMTcgQEBcbiBcbiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTtcbiBcbitzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4rXHRcdFx0XHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXG4re1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9DQUxMX1JFTCgyKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0fTtcbitcdHN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7XG4rXHRcdHsgLmluc25fb2ZmID0gMCwgLnR5cGVfaWQgPSBtYWluX2lkIH0sXG4rXHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0ge1xuK1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4rXHRcdC50eXBlX2lkID0gZW51bV9pZCxcbitcdFx0LmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsXG4rXHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbitcdH07XG4rXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xuK1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuK1x0XHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcbitcdFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxuK1x0XHQubGljZW5zZSA9IChfX3U2NClcIkdQTFwiLFxuK1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4rXHRcdC5sb2dfc2l6ZSA9IHNpemVvZihsb2cpLFxuK1x0XHQubG9nX2xldmVsID0gMSxcbitcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuK1x0XHQuZnVuY19pbmZvX3JlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKSxcbitcdFx0LmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcyxcbitcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbitcdH07XG4rXG4rXHRpZiAocmVsb2NhdGUpIHtcbitcdFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcbitcdFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVx1MDAyNnJlbG87XG4rXHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuK1x0fVxuK1x0bWVtc2V0KGxvZywgMCwgc2l6ZW9mKGxvZykpO1xuK1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm9pZCAqcmF3X2J0ZjtcbitcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4rXHRfX3UzMiByYXdfYnRmX3NpemU7XG4rXHRpbnQgYWNjZXNzX3N0cl9vZmYsIGJ0Zl9mZCA9IC0xLCBlbnVtX2lkO1xuK1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuK1xuK1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwiYnRmX25ld19lbXB0eVwiKSlcbitcdFx0cmV0dXJuO1xuK1x0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCJpbnRcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcImFkZF9pbnRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCJhZGRfZnVuY19wcm90b1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0bWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcIm1haW5fZm5cIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4rXHRpZiAoIUFTU0VSVF9HVChtYWluX2lkLCAwLCBcImFkZF9tYWluX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdHN1Yl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCBcInN1Yl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHN1Yl9pZCwgMCwgXCJhZGRfc3ViX2Z1bmNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCJjb3JlX3JlbG9fc3VicHJvZ19wb2lzb25fbWlzc2luZ1wiLCA0KTtcbitcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwiYWRkX2VudW1cIikgfHxcbitcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcInZhbHVlXCIsIDApLCBcImFkZF9lbnVtX3ZhbHVlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwiMFwiKTtcbitcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcImFkZF9hY2Nlc3Nfc3RyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRyYXdfYnRmID0gYnRmX19yYXdfZGF0YShidGYsIFx1MDAyNnJhd19idGZfc2l6ZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCJyYXdfYnRmXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRidGZfZmQgPSBicGZfYnRmX2xvYWQocmF3X2J0ZiwgcmF3X2J0Zl9zaXplLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXCJidGZfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogVGhlIHNhbWUgdHdvLXN1YnByb2dyYW0gcHJvZ3JhbSBpcyB2YWxpZCBiZWZvcmUgdGhlIHJlbG9jYXRpb24uICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRwcm9nX2ZkID0gLTE7XG4rXG4rXHQvKlxuK1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XG4rXHQgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy5cbitcdCAqL1xuK1x0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXG4rXHRcdFx0XHRcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XG4rXHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcInBvaXNvbmVkX2xvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCJmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuIDIgdG8gM1wiLFxuK1x0XHRcdCAgXCJwb2lzb25lZF9sb2FkX2xvZ1wiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxcblwiKTtcbitcdFx0cHJpbnRmKFwiJXNcIiwgbG9nKTtcbitcdFx0cHJpbnRmKFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcblwiKTtcbitcdH1cbitcdGNsb3NlKHByb2dfZmQpO1xuK1x0Y2xvc2UoYnRmX2ZkKTtcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbitcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxuIFxuIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKVxuIHtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCIpKVxuK1x0XHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJiYWRfbG9jYWxfaWRcIikpXG4gXHRcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDIzZTEzOTA4Y2ViZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSwxMjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK3N0cnVjdCBicGZfbWFwO1xuK1xuK3N0cnVjdCBsb2NrX3ZhbHVlIHtcbitcdHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4rfTtcbitcbitzdHJ1Y3QgaW5uZXJfbG9ja19tYXAge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gaW5uZXJfbG9ja19tYXBfYSBTRUMoXCIubWFwc1wiKSwgaW5uZXJfbG9ja19tYXBfYiBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9sb2NrX21hcCk7XG4rfSBsb2NrX21hcF9vZl9tYXBzIFNFQyhcIi5tYXBzXCIpID0ge1xuK1x0LnZhbHVlcyA9IHtcbitcdFx0WzBdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYSxcbitcdFx0WzFdID0gXHUwMDI2aW5uZXJfbG9ja19tYXBfYixcbitcdH0sXG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuK30gbG9ja19tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IGNhbGxiYWNrX2N0eCB7XG4rXHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHRcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHN0cnVjdCBjYWxsYmFja19jdHggKmN0eClcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V2YWx1ZS1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiY2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcIilcbitfX2ZhaWx1cmUgX19tc2coXCJicGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcIilcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9O1xuK1x0aW50IGlubmVyX2tleSA9IDE7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXHUwMDI2Y3R4LCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwiZGlzdGluY3Qgb25lLWVsZW1lbnQgaW5uZXIgbWFwcyBoYXZlIGRpc3RpbmN0IGxvY2sgaWRlbnRpdGllc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja19pbm5lcl9tYXBfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXG4re1xuK1x0aW50IGlubmVyX2tleSA9IDA7XG4rXHR2b2lkICppbm5lcl9tYXA7XG4rXG4rXHRpbm5lcl9tYXAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmxvY2tfbWFwX29mX21hcHMsIFx1MDAyNmlubmVyX2tleSk7XG4rXHRpZiAoIWlubmVyX21hcClcbitcdFx0cmV0dXJuIDA7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oaW5uZXJfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X2lubmVyX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19kZXNjcmlwdGlvbihcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5X3NhbWUodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX3NhbWVfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbmluZGV4IDBiODZkOTVhNDEzMzUuLjY5MmE4NDY4ZjNkNzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuQEAgLTUsNiArNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbitTRUMoXCJ4ZHBcIilcbitfX2Rlc2NyaXB0aW9uKFwiWERQIHBrdCByZWdzYWZlIHByZXNlcnZlcyBwYWNrZXQgcG9pbnRlciBjbGFzcyBkaXNwbGFjZW1lbnRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcIilcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcbitfX25ha2VkIHZvaWQgcGt0X3JlZ3NhZmVfY2xhc3NfZGlzcGxhY2VtZW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlxcXG4rXHRyOCA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcXFxuK1x0cjkgPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFdKTtcXFxuK1x0cjYgPSByOTtcXFxuK1x0cjYgKz0gODtcXFxuK1x0aWYgcjYgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHI5ICsgMCk7XFxcbitcdHI0ID0gcjA7XFxcbitcdHI0IFx1MDAyNj0gMTU7XFxcbitcdHI3ID0gcjA7XFxcbitcdHI3IFx1MDAzZVx1MDAzZT0gNjM7XFxcbitcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzICs9IDQ7XFxcbitcdGdvdG8gbF9qb2luXyU9O1xcXG4rbF9wYXRoX2JfJT06IFxcXG4rXHRyNCBcdTAwMjY9IDM7XFxcbitcdHI0ICs9IDg7XFxcbitcdHIyID0gcjk7XFxcbitcdHIyICs9IHI0O1xcXG4rXHRyMyA9IHIyO1xcXG4rXHRyMyAtPSA0O1xcXG4rbF9qb2luXyU9OiBcXFxuK1x0cjUgPSByMztcXFxuK1x0cjUgKz0gNDtcXFxuK1x0aWYgcjUgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4rXHRyMCA9ICoodTY0ICopKHIyICsgMCk7XFxcbitsX2V4aXRfJT06IFxcXG4rXHRyMCA9IDA7XFxcbitcdGV4aXQ7XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxuK1x0ICBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YV9lbmQsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGFfZW5kKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIFNFQyhcInhkcFwiKVxuIF9fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlYWQsIHBrdF9lbmQgbWFuZ2xpbmcsIGJhZCBhY2Nlc3MgMVwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlIzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kXCIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowNC4xNDE1NTEyMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTA1NTQxNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEJQRiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGNyYW5rIHVwIHRoZSBLTVNBTiBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHJlbGF0ZWQgc3Vic3lzdGVtcywgd2hpY2ggaXMgZ29vZC4gQnV0LCB3ZSBoYXZlIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgc2V2ZXJhbCBtb2RpZmljYXRpb25zIGFjcm9zcyB2YXJpb3VzIEJQRiBjb21wb25lbnRzOiBjaGFuZ2VzIHRvIGBicGZfaWRfcGFpcmAsIGNvbnRyb2wgZmxvdyBhbmQgZmFsbC10aHJvdWdoIGNoZWNrcywgcHJlZW1wdGlvbiBjaGVja3MsIHBhY2tldCBwb2ludGVyIHN0YXRlIG1hbmFnZW1lbnQgd2l0aGluIElEIGNsYXNzZXMsIGFuZCBzcGlubG9jayB0cmFja2luZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBmb2N1cyBpcyBvbiBlbmhhbmNpbmcgdGhlIHZlcmlmaWVyJ3MgY29ycmVjdG5lc3MsIGNvbmN1cnJlbmN5LCBhbmQgcm9idXN0bmVzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQ08tUkUgcmVsb2NhdGlvbnMsIHByZWVtcHRpb24sIGFuZCBzdGF0ZSBwcnVuaW5nLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyBhbnkgb2YgdGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gS01TQU4gaXMgb3VyIGJlc3QgZnJpZW5kIGZvciBjYXRjaGluZyB0aGF0LiBMZXQncyBhbmFseXplIHRoZSBhcmVhcyBvZiBtb2RpZmljYXRpb24gb25lIGJ5IG9uZS5cblxuVGhlIGFkZGl0aW9uIG9mIGBwa3RfcHRyX2RlbHRhYCBhbmQgYHBrdF9wdHJfZGVsdGFfc2V0YCB0byBgc3RydWN0IGJwZl9pZF9wYWlyYCBoYXMgbXkgaW1tZWRpYXRlIGF0dGVudGlvbi4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaW5pdGlhbGl6ZXMgYHBrdF9wdHJfZGVsdGFfc2V0YCB0byBgZmFsc2VgIGluIGBjaGVja19pZHMoKWAgaXMgYSBnb29kIHNpZ24uIEJ1dCwgSSBtdXN0IHZlcmlmeSB3aGVyZSBgc3RydWN0IGJwZl9pZG1hcGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGVsc2V3aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdCBpcyBrZXkgdG8gZGV0ZXJtaW5pbmcgYW55IEtNU0FOIHJpc2suIEl0IGNvdWxkIGJlIHBvc3NpYmxlIHRoZXJlIGlzIGEgY2FzZSBmb3IgYSBtb3JlIGluLWRlcHRoIGxvb2sgdXNpbmcgS01TQU4uXG5cblRoZSBvdGhlciBjaGFuZ2VzIGxvb2sgbGlrZSB2ZXJpZmllciBpbXByb3ZlbWVudHMgYW5kIGNvcnJlY3RuZXNzIGZpeGVzLiBXaGlsZSB2YWx1YWJsZSwgdGhleSBzZWVtIGxlc3MgbGlrZWx5IHRvIGRpcmVjdGx5IHRyaWdnZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBidXQgbXVzdCBiZSBhc3Nlc3NlZCB0byBjb25maXJtLiBUaGUgY2hlY2tzIGZvciBgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIGFuZCBgY29uZF9yZXNjaGVkKClgIGFyZSBtb3JlIGxpa2VseSB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgYnVncywgb3IgZW5zdXJlIHByb3BlciBiZWhhdmlvciBkdXJpbmcgYXN5bmNocm9ub3VzIGV2ZW50cy5cblxuSSB0aGluayBJJ2xsIGxlYW4gdG93YXJkcyB0aGUgYE5lZWRzS01TQU49ZmFsc2VgIGZvciBub3csIGJ1dCB3aWxsIG1ha2Ugc3VyZSB0byBjaGVjayB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYGJwZl9pZG1hcGAgYW5kIGBicGZfaWRfcGFpcmAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowOS42NDcxMDAyMDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTg3OTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaWRtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTMwMj1zdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzE4LSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MzE5OnN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMyMC17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTM1Nj1zdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzU3LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzozNTg6XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zNTkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTctICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0MTg6c3RhdGljIGJvb2wgY2hlY2tfc2NhbGFyX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQxOS17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUyNj1zdGF0aWMgYm9vbCByZWdzX2V4YWN0KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI3LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1cixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjUyODpcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy01Mjkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01NDI9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjU0MzpcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTQ0LVxcdFxcdCAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz03Mzc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6NzM4OlxcdFxcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTczOS1cXHRcXHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04ODI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4ODM6XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODg0LVxcdFxcdFxcdCAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTA1OlxcdFxcdCAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkwNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAwOC17XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDA5OlxcdHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwID0gXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaDtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTAtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTQzNz1zdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ0Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ0NzpzdGF0aWMgaW50IGlkc3RhY2tfcHVzaChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCwgdTMyIGlkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDQ4LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDY0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDY1OnN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0NzQ9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ3Ny1cXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXFx1MDAzZWN1cl9zdGF0ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ3ODpcXHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXFx1MDAyNmVudi1cXHUwMDNlaWRtYXBfc2NyYXRjaDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ3OS1cXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDkuNzk2OTg5MzQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjUzMzU5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBCUEYgZGV2ZWxvcG1lbnQ6XG5cbioqRXhhbWluaW5nIGBjaGVja19pZHNgIGFuZCBgY2hlY2tfcGt0X3B0cl9pZHNgKipcblxuUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIHRhc2sgYXQgaGFuZCBpcyBjbGVhcmx5IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgaGFuZGxpbmcgSUQgY2hlY2tzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGBjaGVja19pZHNgIGFuZCBgY2hlY2tfcGt0X3B0cl9pZHNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIHdvcmssIHRoZWlyIHB1cnBvc2UsIGFuZCB3aGF0IGRhdGEgdGhleSdyZSBtYW5pcHVsYXRpbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRoZSBjb2RlIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGRhdGEgc3RydWN0dXJlcyB1c2VkIGFuZCB0aGUgbG9naWMgaW52b2x2ZWQgaW4gdmFsaWRhdGluZyB0aGVzZSBJRHMgYW5kIHBhY2tldCBwb2ludGVyIElEcy4gVGhpcyBtaWdodCBpbnZvbHZlIGxvb2tpbmcgYXQgdGhlaXIgY2FsbCBzaXRlcyBhbmQgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIFVuZGVyc3RhbmRpbmcgdGhlaXIgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGFueSBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMgcmVsYXRlZCB0byB0aGlzIHBhcnQgb2YgdGhlIEJQRiBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxMi4xMjIzMjg5NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE1OlxcdCAqIHRoYXQuXFxuIDMxNjpcXHQgKiBTbyB3ZSBsb29rIHRocm91Z2ggb3VyIGlkbWFwIHRvIHNlZSBpZiB0aGlzIG9sZCBpZCBoYXMgYmVlbiBzZWVuIGJlZm9yZS4gIElmXFxuIDMxNzpcXHQgKiBzbywgd2UgcmVxdWlyZSB0aGUgbmV3IGlkIHRvIG1hdGNoOyBvdGhlcndpc2UsIHdlIGFkZCB0aGUgaWQgcGFpciB0byB0aGUgbWFwLlxcbiAzMTg6XFx0ICovXFxuIDMxOTpcXHRzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDMyMDpcXHR7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgYnBmX2lkX3BhaXIgKm1hcCA9IGlkbWFwLVxcdTAwM2VtYXA7XFxuIDMyMjpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0LyogZWl0aGVyIGJvdGggSURzIHNob3VsZCBiZSBzZXQgb3IgYm90aCBzaG91bGQgYmUgemVybyAqL1xcbiAzMjU6XFx0XFx0aWYgKCEhb2xkX2lkICE9ICEhY3VyX2lkKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRpZiAob2xkX2lkID09IDApIC8qIGN1cl9pZCA9PSAwIGFzIHdlbGwgKi9cXG4gMzI5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaWRtYXAtXFx1MDAzZWNudDsgaSsrKSB7XFxuIDMzMjpcXHRcXHRcXHRpZiAobWFwW2ldLm9sZCA9PSBvbGRfaWQpXFxuIDMzMzpcXHRcXHRcXHRcXHRyZXR1cm4gbWFwW2ldLmN1ciA9PSBjdXJfaWQ7XFxuIDMzNDpcXHRcXHRcXHRpZiAobWFwW2ldLmN1ciA9PSBjdXJfaWQpXFxuIDMzNTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDMzNjpcXHRcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdC8qIFJlYWNoZWQgdGhlIGVuZCBvZiBrbm93biBtYXBwaW5nczsgaGF2ZW4ndCBzZWVuIHRoaXMgaWQgYmVmb3JlICovXFxuIDMzOTpcXHRcXHRpZiAoaWRtYXAtXFx1MDAzZWNudCBcXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xcbiAzNDA6XFx0XFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLm9sZCA9IG9sZF9pZDtcXG4gMzQxOlxcdFxcdFxcdG1hcFtpZG1hcC1cXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XFxuIDM0MjpcXHRcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcXG4gMzQzOlxcdFxcdFxcdGlkbWFwLVxcdTAwM2VjbnQrKztcXG4gMzQ0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzNDU6XFx0XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHQvKlxcbiAzNDg6XFx0XFx0ICogaWRtYXAgc2xvdHMgYXJlIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgYW5kIHN0YWNrIHNsb3RzLlxcbiAzNDk6XFx0XFx0ICogU2luY2UgcmVmZXJlbmNlZCBkeW5wdHJzIGFjcXVpcmUgaW50ZXJtZWRpYXRlIHJlZmVyZW5jZXMgdGhhdCBkb1xcbiAzNTA6XFx0XFx0ICogbm90IGxpdmUgaW4gZWl0aGVyLCBzbyB0aGUgbWFwIGNhbiBiZSBleGhhdXN0ZWQuIFNpbmNlIGl0IGlzIHVubGlrZWx5LFxcbiAzNTE6XFx0XFx0ICogZmFpbCB0aGUgdmVyaWZpY2F0aW9uIGJ5IHRyZWF0aW5nIHRoZSBzdGF0ZXMgYXMgbm90IGVxdWl2YWxlbnQuXFxuIDM1MjpcXHRcXHQgKi9cXG4gMzUzOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzU0OlxcdH1cXG4gMzU1OlxcdFxcbiAzNTY6XFx0c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG4gMzU3OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXFxuIDM1ODpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gMzU5OlxcdHtcXG4gMzYwOlxcdFxcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXFx1MDAzZW1hcDtcXG4gMzYxOlxcdFxcdHM2NCBkZWx0YTtcXG4gMzYyOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHRpZiAoIWNoZWNrX2lkcyhvbGQtXFx1MDAzZWlkLCBjdXItXFx1MDAzZWlkLCBpZG1hcCkpXFxuIDM2NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM2NjpcXHRcXHRpZiAoIW9sZC1cXHUwMDNlaWQpXFxuIDM2NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0LypcXG4gMzcwOlxcdFxcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXFxuIDM3MTpcXHRcXHQgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLlxcbiAzNzI6XFx0XFx0ICogUGFja2V0IHBvaW50ZXIgb2Zmc2V0cyBhcmUgYm91bmRlZCBieSBCUEZfTUFYX1ZBUl9PRkYsIHNvIHRoZSBkZWx0YVxcbiAzNzM6XFx0XFx0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cXG4gMzc0OlxcdFxcdCAqL1xcbiAzNzU6XFx0XFx0ZGVsdGEgPSAoczY0KShjdXItXFx1MDAzZXI2NC5iYXNlIC0gb2xkLVxcdTAwM2VyNjQuYmFzZSk7XFxuIDM3NjpcXHRcXHRpZiAoZGVsdGEgXFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFxcdTAwM2UgUzMyX01BWClcXG4gMzc3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKykge1xcbiAzODA6XFx0XFx0XFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVxcdTAwM2VpZClcXG4gMzgxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzODI6XFx0XFx0XFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcXG4gMzgzOlxcdFxcdFxcdFxcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XFxuIDM4NDpcXHRcXHRcXHRcXHRtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlO1xcbiAzODU6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDM4NjpcXHRcXHRcXHR9XFxuIDM4NzpcXHRcXHRcXHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XFxuIDM4ODpcXHRcXHR9XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzkxOlxcdH1cXG4gMzkyOlxcdFxcbiAzOTM6XFx0LypcXG4gMzk0OlxcdCAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXFxuIDM5NTpcXHQgKlxcbiAzOTY6XFx0ICogV2hlbiBvbGRfaWQgPT0gMCwgdGhlIG9sZCByZWdpc3RlciBpcyBpbmRlcGVuZGVudCAtIG5vdCBsaW5rZWQgdG8gYW55XFxuIDM5NzpcXHQgKiBvdGhlciByZWdpc3Rlci4gQW55IGxpbmtpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgb25seSBhZGRzIGNvbnN0cmFpbnRzLFxcbiAzOTg6XFx0ICogbWFraW5nIGl0IG1vcmUgcmVzdHJpY3RpdmUuIFNpbmNlIHRoZSBvbGQgc3RhdGUgZGlkbid0IHJlbHkgb24gYW55IElEXFxuIDM5OTpcXHQgKiByZWxhdGlvbnNoaXBzIGZvciB0aGlzIHJlZ2lzdGVyLCBpdCdzIGFsd2F5cyBzYWZlIHRvIGFjY2VwdCBjdXIgcmVnYXJkbGVzc1xcbiA0MDA6XFx0ICogb2YgaXRzIElELiBIZW5jZSwgcmV0dXJuIHRydWUgaW1tZWRpYXRlbHkuXFxuIDQwMTpcXHQgKlxcbiA0MDI6XFx0ICogV2hlbiBvbGRfaWQgIT0gMCBidXQgY3VyX2lkID09IDAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgZGlmZmVyZW50XFxuIDQwMzpcXHQgKiBpbmRlcGVuZGVudCByZWdpc3RlcnMgaW4gY3VyIGRvbid0IGluY29ycmVjdGx5IHNhdGlzZnkgdGhlIElEIG1hdGNoaW5nXFxuIDQwNDpcXHQgKiByZXF1aXJlbWVudHMgb2YgbGlua2VkIHJlZ2lzdGVycyBpbiBvbGQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjEyLjEyMjU5MjI2OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2MzMzOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBJRCBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIG1hbmFnaW5nIHBhY2tldCBJRHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjaGVja19pZHNgIGZ1bmN0aW9uIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYGlkbWFwYCBzdHJ1Y3R1cmUuIEl0IHNlZW1zIGxpa2UgdGhlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIGBtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO2Agd2hlbiBhZGRpbmcgYSBuZXcgSUQgcGFpciBhdCBgaWRtYXAtXHUwMDNlY250YCBpcyB0aGUga2V5IHRoaW5nIHRvIGZvY3VzIG9uIGhlcmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIGJ1ZyBwb3RlbnRpYWwuXG5cbk5vdywgSSBhbHNvIG5lZWQgdG8gdHJhY2sgdGhlIGBpZHN0YWNrYCBvcGVyYXRpb25zIHdpdGhpbiBgdmVyaWZpZXIuY2AuIFB1c2hpbmcgYW5kIHBvcHBpbmcgZnJvbSB0aGUgYGlkc3RhY2tgIGlzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseSwgc28gSSBuZWVkIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUgbG9naWMuIExldCdzIHN0YXJ0IGJ5IGNsb3NlbHkgZXhhbWluaW5nIHRoZSBgaWRzdGFja19wdXNoYCBmdW5jdGlvbi4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBsaWUgd2l0aCBJRCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxNC4xNTg5Mjg0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk0NDA6XFx0XFxuOTQ0MTpcXHRcXHRlcnIgPSBfX3JlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xcbjk0NDI6XFx0XFx0aWYgKCFlcnIpXFxuOTQ0MzpcXHRcXHRcXHRicGZfZGlhZ19yZWNvcmRfcmVmX3JlbGVhc2UoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBpZCk7XFxuOTQ0NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjk0NDU6XFx0fVxcbjk0NDY6XFx0XFxuOTQ0NzpcXHRzdGF0aWMgaW50IGlkc3RhY2tfcHVzaChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCwgdTMyIGlkKVxcbjk0NDg6XFx0e1xcbjk0NDk6XFx0XFx0aW50IGk7XFxuOTQ1MDpcXHRcXG45NDUxOlxcdFxcdGlmICghaWQpXFxuOTQ1MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG45NDUzOlxcdFxcbjk0NTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKylcXG45NDU1OlxcdFxcdFxcdGlmIChpZG1hcC1cXHUwMDNlbWFwW2ldLm9sZCA9PSBpZClcXG45NDU2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjk0NTc6XFx0XFxuOTQ1ODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGlkbWFwLVxcdTAwM2VjbnQgXFx1MDAzZT0gQlBGX0lEX01BUF9TSVpFKSlcXG45NDU5OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjk0NjA6XFx0XFxuOTQ2MTpcXHRcXHRpZG1hcC1cXHUwMDNlbWFwW2lkbWFwLVxcdTAwM2VjbnQrK10ub2xkID0gaWQ7XFxuOTQ2MjpcXHRcXHRyZXR1cm4gMDtcXG45NDYzOlxcdH1cXG45NDY0OlxcdFxcbjk0NjU6XFx0c3RhdGljIGludCBpZHN0YWNrX3BvcChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG45NDY2OlxcdHtcXG45NDY3OlxcdFxcdGlmICghaWRtYXAtXFx1MDAzZWNudClcXG45NDY4OlxcdFxcdFxcdHJldHVybiAwO1xcbjk0Njk6XFx0XFxuOTQ3MDpcXHRcXHRyZXR1cm4gaWRtYXAtXFx1MDAzZW1hcFstLWlkbWFwLVxcdTAwM2VjbnRdLm9sZDtcXG45NDcxOlxcdH1cXG45NDcyOlxcdFxcbjk0NzM6XFx0LyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXFxuOTQ3NDpcXHRzdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZClcXG45NDc1OlxcdHtcXG45NDc2OlxcdFxcdHUzMiBtYXNrID0gKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfRFlOUFRSKTtcXG45NDc3OlxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbjk0Nzg6XFx0XFx0c3RydWN0IGJwZl9pZG1hcCAqaWRzdGFjayA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxuOTQ3OTpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTQuMTU5NzIyMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA4Mzk1MjY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEtNU0FOIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgZm9jdXNlZCBvbiBgaWRzdGFja19wdXNoYCBhbmQgYGlkc3RhY2tfcG9wYCwgdmVyaWZ5aW5nIHRoZXkgb25seSB0b3VjaCBgaWRtYXAtXHUwMDNlY250YCBhbmQgYG9sZGAuIFRoYXTigJlzIGEgY2xlYW4gc3RhcnQuXG5cblRoZW4sIEkgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgcGF0Y2g6IGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KClgLCBgcHVzaF9pbnNuKClgLCBgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoKWAsIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MoKWAsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoKWAsIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKClgLCBhbmQgYGJwZl9jaGVjaygpYC4gRWFjaCBjaGFuZ2Ugd2FzIGNhcmVmdWxseSBzY3J1dGluaXplZC5cblxuVGhlIGtleSB3YXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBJIHdlbnQgdGhyb3VnaCBhIHJpZ29yb3VzIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZToqKiBEb2VzIHRoZSBwYXRjaCB0b3VjaCBhbnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUsIG5vIHN1Y2ggY2hhbmdlcyBoZXJlLiBObyBgY29weV90b191c2VyYCwgbm8gbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGxzIGFyZSBhZmZlY3RlZC4gV2UncmUgaW4gdGhlIGNsZWFyLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIERvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyBOby4gSSBjaGVja2VkIGFsbCB0aGUgdmFyaWFibGVzIHVzZWQgKGxpa2UgYHN1YnByb2dgLCBgZGVsdGFgLCBhbmQgYGlgKSBhbmQgdmVyaWZpZWQgdGhleSdyZSBhbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgdGhlIGRlbHRhIGNhbGN1bGF0aW9uIGFuZCB0aGUgdXNlIG9mIGBwa3RfcHRyX2RlbHRhYCB3aXRoaW4gYGNoZWNrX3BrdF9wdHJfaWRzYCBhcmUgc291bmQuIFRoZSBgcGt0X3B0cl9kZWx0YV9zZXRgIGJvb2xlYW4gcHJldmVudHMgYSByZWFkIG9mIHRoZSBkZWx0YSBwcmlvciB0byBpdCBiZWluZyBzZXQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIEFyZSB0aGVyZSBhbnkgbmV3IGFsbG9jYXRpb25zIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkIGFuZCByZWFkIGxhdGVyPyBObyBuZXcgYWxsb2NhdGlvbnMuIFRoZSBmaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCBicGZfaWRfcGFpcmAgYXJlIHByb3Blcmx5IHNldC5cbjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBhY2Nlc3NlczoqKiBDb3VsZCB0aGUgY2hhbmdlcyBhZmZlY3QgYm91bmRzIGNoZWNrcyBhbmQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSByZWFkcz8gTm90IGluIHRoaXMgY2FzZS4gVGhlIGNoYW5nZXMgKnRpZ2h0ZW4qIEJQRiB2ZXJpZmllciBjaGVja3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyDigJMgcHJldmVudGluZyBmYWxsdGhyb3VnaCwgaW5jb3JyZWN0IHBhY2tldCBwb2ludGVyIHN0YXRlLCBwcmVzZXJ2aW5nIHNwaW5sb2NrIGlkZW50aXRpZXMsIGFuZCBncmFjZWZ1bCBjYW5jZWxsYXRpb24uIFRoaXMgbGVhZHMgdG8gKmZld2VyKiBidWdzLCBub3QgbW9yZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSB2ZXJpZmllciBjaGFuZ2VzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IGxvZ2ljIGFuZCBieXRlY29kZSB2ZXJpZmljYXRpb24uIFRoZSBwb3RlbnRpYWwgYnVncyBhcmUgbW9yZSBsaWtlbHkgbG9naWNhbCB2ZXJpZmljYXRpb24gZXJyb3JzLCBvciBtZW1vcnkgc2FmZXR5IGJ1Z3MgKHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoKS4gU28sIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5Ob3cgSSBuZWVkIHRvIHdyaXRlIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgcmF0aW9uYWxlIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDY3LCJPdXRwdXRUb2tlbnMiOjI4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjIwLjI0MzY3OTIyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgaW50ZXJuYWwgY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbXByb3ZlbWVudHMgdG8gdGhlIEJQRiB2ZXJpZmllciBhbmQgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIHBhc3NlczpcXG4xLiBBZGRzIGEgc3VicHJvZ3JhbSBib3VuZGFyeSBmYWxsdGhyb3VnaCBjaGVjayBpbiBjZmcuYyB0byBlbnN1cmUgQ08tUkUgcmVsb2NhdGlvbnMgY2Fubm90IHZpb2xhdGUgc3VicHJvZ3JhbSBib3VuZGFyaWVzLlxcbjIuIEludHJvZHVjZXMgZmF0YWwgc2lnbmFsIGNoZWNrcyBhbmQgcHJlZW1wdGlvbiBwb2ludHMgKGNvbmRfcmVzY2hlZCkgaW4gZml4dXBzLmMgYW5kIHZlcmlmaWVyLmMgZHVyaW5nIGluc3RydWN0aW9uIHBhdGNoaW5nLlxcbjMuIEVuaGFuY2VzIHN0YXRlIGVxdWl2YWxlbmNlIHBydW5pbmcgaW4gc3RhdGVzLmMgZm9yIHBhY2tldCBwb2ludGVycyBieSB0cmFja2luZyBpbnRyYS1jbGFzcyBwb2ludGVyIGRpc3BsYWNlbWVudCAocGt0X3B0cl9kZWx0YSAvIHBrdF9wdHJfZGVsdGFfc2V0IGluIHN0cnVjdCBicGZfaWRfcGFpcikuXFxuNC4gQ29ycmVjdHMgc3BpbmxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGlubmVyIG1hcCBsb29rdXBzIGFuZCBjYWxsYmFjayBhcmd1bWVudCBzdGF0ZXMgaW4gdmVyaWZpZXIuYy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbW9kaWZ5IGtlcm5lbCBkYXRhIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeS4gQWxsIG5ld2x5IGFkZGVkIHN0cnVjdCBmaWVsZHMgKHN1Y2ggYXMgcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9naWMgcmVncmVzc2lvbnMgKGUuZy4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdmVyaWZpZXIgc3RhdGUgYnVncykgZmFsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOL3ZlcmlmaWVyIHRlc3Qgc3VpdGVzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBpbnRlcm5hbCBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgQlBGIHZlcmlmaWVyIGFuZCBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzOlxcbjEuIEFkZHMgYSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGZhbGx0aHJvdWdoIGNoZWNrIGluIGNmZy5jIHRvIGVuc3VyZSBDTy1SRSByZWxvY2F0aW9ucyBjYW5ub3QgdmlvbGF0ZSBzdWJwcm9ncmFtIGJvdW5kYXJpZXMuXFxuMi4gSW50cm9kdWNlcyBmYXRhbCBzaWduYWwgY2hlY2tzIGFuZCBwcmVlbXB0aW9uIHBvaW50cyAoY29uZF9yZXNjaGVkKSBpbiBmaXh1cHMuYyBhbmQgdmVyaWZpZXIuYyBkdXJpbmcgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcuXFxuMy4gRW5oYW5jZXMgc3RhdGUgZXF1aXZhbGVuY2UgcHJ1bmluZyBpbiBzdGF0ZXMuYyBmb3IgcGFja2V0IHBvaW50ZXJzIGJ5IHRyYWNraW5nIGludHJhLWNsYXNzIHBvaW50ZXIgZGlzcGxhY2VtZW50IChwa3RfcHRyX2RlbHRhIC8gcGt0X3B0cl9kZWx0YV9zZXQgaW4gc3RydWN0IGJwZl9pZF9wYWlyKS5cXG40LiBDb3JyZWN0cyBzcGlubG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgaW5uZXIgbWFwIGxvb2t1cHMgYW5kIGNhbGxiYWNrIGFyZ3VtZW50IHN0YXRlcyBpbiB2ZXJpZmllci5jLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtb2RpZnkga2VybmVsIGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LiBBbGwgbmV3bHkgYWRkZWQgc3RydWN0IGZpZWxkcyAoc3VjaCBhcyBwa3RfcHRyX2RlbHRhX3NldCBpbiBzdHJ1Y3QgYnBmX2lkX3BhaXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2dpYyByZWdyZXNzaW9ucyAoZS5nLiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB2ZXJpZmllciBzdGF0ZSBidWdzKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4vdmVyaWZpZXIgdGVzdCBzdWl0ZXMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[1] Phase: Succeeded StartedAt: 2026-09-06 11:56:31 +0000 UTC FinishedAt: 2026-09-06 11:56:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 11:56:31 +0000 UTC FinishedAt: 2026-09-06 11:56:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2] Phase: Succeeded StartedAt: 2026-09-06 11:56:31 +0000 UTC FinishedAt: 2026-09-06 15:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 11:56:31 +0000 UTC FinishedAt: 2026-09-06 15:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 11:56:31 +0000 UTC FinishedAt: 2026-09-06 11:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 11:56:31 +0000 UTC FinishedAt: 2026-09-06 11:56:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowz6zqv/series-workflowz6zqv-convert-artifact-1762715029/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 11:56:53 +0000 UTC FinishedAt: 2026-09-06 12:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 11:56:53 +0000 UTC FinishedAt: 2026-09-06 12:17:04 +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:*b6e6bebe-78bf-4e74-9ba2-a71d1994833e,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-workflowz6zqv/series-workflowz6zqv-convert-artifact-1762715029/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": "32087a74-9945-47fd-b68e-1361aa447299", "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-workflowz6zqv/series-workflowz6zqv-build-action-2714844667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 11:56:53 +0000 UTC FinishedAt: 2026-09-06 12:16:41 +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:*b6e6bebe-78bf-4e74-9ba2-a71d1994833e,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-workflowz6zqv/series-workflowz6zqv-convert-artifact-1762715029/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": "32087a74-9945-47fd-b68e-1361aa447299", "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-workflowz6zqv/series-workflowz6zqv-build-action-2714844667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 12:17:04 +0000 UTC FinishedAt: 2026-09-06 12:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 12:17:04 +0000 UTC FinishedAt: 2026-09-06 12:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 12:17:04 +0000 UTC FinishedAt: 2026-09-06 12:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 12:17:04 +0000 UTC FinishedAt: 2026-09-06 12:17:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowz6zqv/series-workflowz6zqv-convert-artifact-234687856/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 12:17:38 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 12:17:38 +0000 UTC FinishedAt: 2026-09-06 12:19:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32087a74-9945-47fd-b68e-1361aa447299,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-workflowz6zqv/series-workflowz6zqv-build-action-2714844667/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-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:38:31 +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:*b6e6bebe-78bf-4e74-9ba2-a71d1994833e,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-workflowz6zqv/series-workflowz6zqv-convert-artifact-234687856/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": "cff8c5d9-3885-4e58-a61d-b86cbeafaddd", "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-workflowz6zqv/series-workflowz6zqv-build-action-2659675756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:38:21 +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:*b6e6bebe-78bf-4e74-9ba2-a71d1994833e,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-workflowz6zqv/series-workflowz6zqv-convert-artifact-234687856/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": "cff8c5d9-3885-4e58-a61d-b86cbeafaddd", "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-workflowz6zqv/series-workflowz6zqv-build-action-2659675756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 12:38:31 +0000 UTC FinishedAt: 2026-09-06 12:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 12:38:31 +0000 UTC FinishedAt: 2026-09-06 12:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 12:38:31 +0000 UTC FinishedAt: 2026-09-06 12:40:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 12:38:31 +0000 UTC FinishedAt: 2026-09-06 12:40:10 +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:*cff8c5d9-3885-4e58-a61d-b86cbeafaddd,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-workflowz6zqv/series-workflowz6zqv-build-action-2659675756/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-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 15:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 15:41:41 +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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"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:*32087a74-9945-47fd-b68e-1361aa447299,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cff8c5d9-3885-4e58-a61d-b86cbeafaddd,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-workflowz6zqv/series-workflowz6zqv-build-action-2714844667/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-workflowz6zqv/series-workflowz6zqv-build-action-2659675756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 12:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 12:40:25 +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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"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-workflowz6zqv/series-workflowz6zqv-convert-artifact-4238013161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 12:40:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 12:40:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:40:20 +0000 UTC FinishedAt: 2026-09-06 12:40:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 12:40:30 +0000 UTC FinishedAt: 2026-09-06 15:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6zqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check","regsafe","check_pkt_ptr_ids","bpf_patch_insn_data","verifier_remove_insns","refine_map_lookup_value","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state","push_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"54033bdc-d4fd-4997-a132-ece393b35a2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 12:40:30 +0000 UTC FinishedAt: 2026-09-06 15:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32087a74-9945-47fd-b68e-1361aa447299,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cff8c5d9-3885-4e58-a61d-b86cbeafaddd,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-workflowz6zqv/series-workflowz6zqv-build-action-2714844667/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-workflowz6zqv/series-workflowz6zqv-build-action-2659675756/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-workflowz6zqv/series-workflowz6zqv-convert-artifact-4238013161/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,}