Name: series-workflow6pc9c Phase: Succeeded StartedAt: 2026-08-03 00:50:29 +0000 UTC FinishedAt: 2026-08-03 04:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[0] Phase: Succeeded StartedAt: 2026-08-03 00:50:29 +0000 UTC FinishedAt: 2026-08-03 00:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 00:50:29 +0000 UTC FinishedAt: 2026-08-03 00:52:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a18aa255-06fc-44b6-849d-2e8e20e2263d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_compute_live_registers", "bpf_insn_def32" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMmIzM0OywKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgaW5zdHJ1Y3Rpb24gZml4dXBzIHRvIHRyYWNrIDMyLWJpdCBzdWJyZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgemVyby1leHRlbnNpb25zIGR5bmFtaWNhbGx5LCByZW1vdmluZyB0aGUgYHN1YnJlZ19kZWZgIGZpZWxkIGZyb20gYGJwZl9yZWdfc3RhdGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSB2ZXJpZmljYXRpb24gYnlwYXNzZXMgb3IgaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc3N2ZlMjFhZDhlZWY3Njc4ZjhhNWVhYzA3MDQwY2NkOGRkM2I0YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDAwOjUxOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzLi4zOWIwZGIyYTRmMTdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxuIFx0ICovXG4gXHR1MzIgZnJhbWVubztcbi1cdC8qIFRyYWNrcyBzdWJyZWcgZGVmaW5pdGlvbi4gVGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgaW5zbl9pZHggb2YgdGhlXG4tXHQgKiB3cml0aW5nIGluc24uIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHN1YnJlZ19kZWYgaXMgdXNlZCBiZWZvcmUgYW55IGluc25cbi1cdCAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC5cbi1cdCAqL1xuLVx0czMyIHN1YnJlZ19kZWY7XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xNjMxLDcgJiM0MzsxNjI2LDYgQEAgc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiB7XG4gfTtcbiBcbiAvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IGZpeHVwcy5jICovXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcbiB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbik7XG4gdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7XG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuQEAgLTE2NTUsNSAmIzQzOzE2NDksNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4mIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIFxuICNlbmRpZiAvKiBfTElOVVhfQlBGX1ZFUklGSUVSX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOS4uN2M0NTk5ZTY1ZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtzdGFjaz0lcyBiZWZvcmUgXCYjMzQ7LCBlbnYtXHUwMDNldG1wX3N0cl9idWYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9lbmRfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gJXMlZCByJWRcXG5cJiMzNDssXG4mIzQzO1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlcyVkIHIlZFwmIzM0OyxcbiBcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fQkUgPyBcJiMzNDtiZVwmIzM0OyA6IFwmIzM0O2xlXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9ic3dhcF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuLVx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcblwmIzM0OyxcbiYjNDM7XHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0aW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gfVxuQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbik7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCA9IC0lYyVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgKCh1MzIpaW5zbi1cdTAwM2VpbW0pIFx1MDAzZVx1MDAzZSAxNiwgKHUxNilpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgJXMgJXMlYyVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIxOCw3ICYjNDM7MjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKVxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQUREIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9BTkQgfHxcbiBcdFx0XHQgIGluc24tXHUwMDNlaW1tID09IEJQRl9PUiB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWE9SKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGxvY2sgKiglcyAqKShyJWQgJSYjNDM7ZCkgJXMgciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsXG5AQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2F0b21pY19hbHVfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcJiMzNDs2NFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbkBAIC0yNjIsNDQgJiM0MzsyNjIsNDQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJSYjNDM7ZCkpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfU1RPUkVfUkVMKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZClcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG5vc3BlY1xcblwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZHhfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcXG5cJiMzNDssXG4mIzQzO1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG5AQCAtMzA3LDEyICYjNDM7MzA3LDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWltbSk7XG5AQCAtMzMyLDEyICYjNDM7MzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGlmIChpc19wdHIgXHUwMDI2XHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXG4gXHRcdFx0XHRpbW0gPSAwO1xuIFxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlc1wmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxuIFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xuQEAgLTM0NywzNSAmIzQzOzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRjaGFyIHRtcFs2NF07XG4gXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHtcbi1cdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGNhbGwgcGMlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsIHBjJXNcJiMzNDssXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0c3RyY3B5KHRtcCwgXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsICVzIyVkXFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUsXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgY2FsbCAlcyMlZFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0XHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxuIFx0XHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSksXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG94IHIlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b3ggciVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9NQVlfR09UTykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b2wgcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSxcbi1cdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7KCUwMngpIGlmICVjJWQgJXMgJWMlZCBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XSxcbkBAIC0zODMsMTQgJiM0MzszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcJiMzNDsoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzIDB4JXggZ290byBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF0sXG4gXHRcdFx0XHQodTMyKWluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJXNcJiMzNDssXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBicGZfY2xhc3Nfc3RyaW5nW2NsYXNzXSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi43YjM1MTBkNDZiMzc3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTQ0LDE1ICYjNDM7NDQsNjEgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHR9XG4gfVxuIFxuLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqL1xuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7LypcbiYjNDM7ICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcdTAwM2U9IDAuXG4mIzQzOyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LFxuJiM0MzsgKiBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4tXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuJiM0MztcdHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0dTggc2l6ZSA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0dTggb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRib29sIG1vZGVfbWVtO1xuJiM0MztcbiYjNDM7XHQvKiBzdWJyZWdpc3RlciBlbmRpbmVzcyBzd2FwICovXG4mIzQzO1x0aWYgKChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9BTFU2NCkgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9FTkQgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tICE9IDY0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiB3MCAmIzQzOz0gMSAqL1xuJiM0MztcdGlmIChjbGFzcyA9PSBCUEZfQUxVIFx1MDAyNlx1MDAyNiBvcCAhPSBCUEZfRU5EKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCksIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbiYjNDM7XHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9TUEFDRV9DQVNUIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAxKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBub24gNjQtYml0LCBub24gc2lnbmVkIGV4dGVuZGVkIGxvYWRzICovXG4mIzQzO1x0bW9kZV9tZW0gPSBtb2RlID09IEJQRl9NRU0gfHwgbW9kZSA9PSBCUEZfUFJPQkVfTUVNIHx8IG1vZGUgPT0gQlBGX1BST0JFX01FTTMyO1xuJiM0MztcdGlmIChjbGFzcyA9PSBCUEZfTERYIFx1MDAyNlx1MDAyNiBtb2RlX21lbSBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIGF0b21pY3MsIHNlZSBpbnNuX2RlZl9yZWdubygpICovXG4mIzQzO1x0aWYgKGNsYXNzID09IEJQRl9TVFggXHUwMDI2XHUwMDI2IHNpemUgIT0gQlBGX0RXKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGRzdF9yZWcgPT0gLTEpXG4mIzQzO1x0LyogYm90aCBMRF9JTkQgYW5kIExEX0FCUyByZXR1cm4gMzItYml0IGRhdGEuICovXG4mIzQzO1x0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gIWJwZl9pc19yZWc2NChpbnNuLCBkc3RfcmVnLCBOVUxMLCBEU1RfT1ApO1xuJiM0MztcdC8qIENvbnNlcnZhdGl2ZWx5IHJldHVybiB0cnVlIGF0IGRlZmF1bHQuICovXG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluZWQgYnkgSU5TTiwgb3IgLTEgaWYgSU5TTiBkb2VzIG5vdFxuJiM0MzsgKiBleHBsaWNpdGx5IGRlZmluZSBhIDMyLWJpdCB2YWx1ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuJiM0MztcbiYjNDM7XHRpZiAoZHN0X3JlZyBcdTAwM2MgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkc3RfcmVnO1xuIH1cbiBcbiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbkBAIC0xNjksNyAmIzQzOzIxNSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZVxuIFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cbiBcdCAqL1xuLVx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4mIzQzO1x0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSkgXHUwMDNlPSAwO1xuIFxuIFx0aWYgKGNudCA9PSAxKVxuIFx0XHRyZXR1cm47XG5AQCAtMTgxLDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpID0gb2ZmOyBpIFx1MDAzYyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4tXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpO1xuJiM0MztcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgXHUwMDNlPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC02MTYsMTEgJiM0Mzs2NjIsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKGxvYWRfcmVnID09IC0xKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0LyogTk9URTogYXJnIFwmIzM0O3JlZ1wmIzM0OyAodGhlIGZvdXJ0aCBvbmUpIGlzIG9ubHkgdXNlZCBmb3Jcbi1cdFx0XHQgKiAgICAgICBCUEZfU1RYICYjNDM7IFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTExcbi1cdFx0XHQgKiAgICAgICBoZXJlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChicGZfaXNfcmVnNjQoXHUwMDI2aW5zbiwgbG9hZF9yZWcsIE5VTEwsIERTVF9PUCkpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbmluZGV4IDBhYWRmYmFlMGFjYzUuLjc4MzUxZTRhNmYyNWYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuQEAgLTQ5Nyw3ICYjNDM7NDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JTNkOiBcJiMzNDssIGluc25faWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2luc25faWR4XSk7XG4tXHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXFxuICovXG4gXHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JSpjO1wmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICYjNDM7MTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHIlZDogXCYjMzQ7LCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pbltpXSk7XG5AQCAtMTA1OCw3ICYjNDM7MTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHNhJWQ6IFwmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5bYWldKTtcbkBAIC0xMDcwLDcgJiM0MzsxMDY3LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUzZDogXCYjMzQ7LCBpZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbi1cdFx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcbiBcdFx0XHRwcmludGVkID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0ZnAlJiM0MztkOiBcJiMzNDssIC0oaSAmIzQzOyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X3N0YWNrX2luW2ldKTtcbkBAIC0xNTQ1LDYgJiM0MzsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2lkeF0pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXG4gXHRcdC8qIENvbGxlY3Qgd2hhdCBuZWVkcyBwcmludGluZyAqL1xuIFx0XHRpZiAoaXNfbGR4X3N0eF9jYWxsIFx1MDAyNlx1MDAyNlxuQEAgLTIwNTAsMjkgJiM0MzsyMDQ3LDM4IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIHVzZTtcdC8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGRlZjtcdC8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIG91dDtcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xuIH07XG4gXG4gLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUxMX0NBTExFUl9TQVZFRF9SRUdTICgoMXUgXHUwMDNjXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTKSAtIDEpXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHJlZzMyX21hc2sodTMyIG4pIHsgcmV0dXJuIEJJVChuKTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiAmIzQzOyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtIFx1MDAzY1x1MDAzYyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gXHUwMDNlXHUwMDNlIDE2KTsgfVxuJiM0MztcbiAvKiBDb21wdXRlIGluZm8tXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXG4gc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxuIHtcbiBcdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuLVx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpO1xuLVx0dTE2IHNyYyA9IEJJVChpbnNuLVx1MDAzZXNyY19yZWcpO1xuLVx0dTE2IGRzdCA9IEJJVChpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLVx0dTE2IHIwICA9IEJJVCgwKTtcbi1cdHUxNiBkZWYgPSAwO1xuLVx0dTE2IHVzZSA9IDB4ZmZmZjtcbiYjNDM7XHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdGNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLVx1MDAzZXNyY19yZWcpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlZHN0X3JlZyk7XG4mIzQzO1x0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QzMiA9IG1hc2tfbG8oZHN0KTtcbiYjNDM7XHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcbiYjNDM7XHR1MzIgZGVmID0gMDtcbiYjNDM7XHR1MzIgdXNlID0gVTMyX01BWDtcbiBcbiBcdHN3aXRjaCAoY2xhc3MpIHtcbiBcdGNhc2UgQlBGX0xEOlxuQEAgLTIwODMsOCAmIzQzOzIwODksOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR1c2UgPSAwO1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfQUJTOlxuLVx0XHRjYXNlIEJQRl9MRCB8IEJQRl9JTkQ6XG4mIzQzO1x0XHRjYXNlIEJQRl9BQlM6XG4mIzQzO1x0XHRjYXNlIEJQRl9JTkQ6XG4gXHRcdFx0Lyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqL1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjA5Miw3ICYjNDM7MjA5OCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIEJQRl9MRFg6XG4gXHRcdHN3aXRjaCAobW9kZSkge1xuIFx0XHRjYXNlIEJQRl9NRU06XG4mIzQzO1x0XHRcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xuJiM0MztcdFx0XHRkZWYgPSBkc3Q7XG4mIzQzO1x0XHRcdHVzZSA9IHNyYztcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX01FTVNYOlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcbiYjNDM7XHRcdFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHR1c2UgPSBzcmM7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMjExMCwxMiAmIzQzOzIxMjQsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuJiM0MztcdFx0XHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0FUT01JQzpcbiYjNDM7XHRcdGNhc2UgQlBGX0FUT01JQzoge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XG4mIzQzO1x0XHRcdCAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XG4mIzQzO1x0XHRcdHUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApO1xuJiM0MztcbiBcdFx0XHRzd2l0Y2ggKGluc24tXHUwMDNlaW1tKSB7XG4gXHRcdFx0Y2FzZSBCUEZfQ01QWENIRzpcbi1cdFx0XHRcdHVzZSA9IHIwIHwgZHN0IHwgc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRkZWYgPSByMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX0xPQURfQUNROlxuQEAgLTIxMjQsMTAgJiM0MzsyMTQ1LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiBcdFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuIFx0XHRcdFx0XHRkZWYgPSBzcmM7XG4gXHRcdFx0XHRlbHNlXG5AQCAtMjEzNSw2ICYjNDM7MjE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTFU6XG4gXHRjYXNlIEJQRl9BTFU2NDpcbkBAIC0yMTQ4LDE0ICYjNDM7MjE3MCwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IDA7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IHNyYyA6IHNyYzMyO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LKVxuLVx0XHRcdFx0dXNlID0gZHN0O1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbiYjNDM7XHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0pNUDpcbkBAIC0yMTgxLDEzICYjNDM7MjIwMywxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0dXNlID0gZGVmIFx1MDAyNiB+QklUKEJQRl9SRUdfMCk7XG4gXHRcdFx0aWYgKGJwZl9nZXRfY2FsbF9zdW1tYXJ5KGVudiwgaW5zbiwgXHUwMDI2Y3MpKVxuIFx0XHRcdFx0dXNlID0gR0VOTUFTSyhtaW5fdCh1OCwgY3MubnVtX3BhcmFtcywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKSwgMSk7XG4mIzQzO1x0XHRcdGRlZiA9IG1hc2tfd2lkZW4oZGVmKTtcbiYjNDM7XHRcdFx0dXNlID0gbWFza193aWRlbih1c2UpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbi1cdFx0XHRcdHVzZSA9IGRzdDtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9KTVAgPyBkc3QgOiBkc3QzMjtcbiYjNDM7XHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWClcbiYjNDM7XHRcdFx0XHR1c2UgfD0gY2xhc3MgPT0gQlBGX0pNUCA/IHNyYyA6IHNyYzMyO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTIyMDksNiAmIzQzOzIyMzIsNyBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlO1xuIFx0aW50IGluc25fY250ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuJiM0MztcdHU2NCBwb3MsIGluc25fcG9zO1xuIFx0aW50IGVyciA9IDAsIGksIGo7XG4gXHRib29sIGNoYW5nZWQ7XG4gXG5AQCAtMjI1Miw4ICYjNDM7MjI3Niw4IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGludCBpbnNuX2lkeCA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbaV07XG4gXHRcdFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gXHUwMDI2c3RhdGVbaW5zbl9pZHhdO1xuIFx0XHRcdHN0cnVjdCBicGZfaWFycmF5ICpzdWNjO1xuLVx0XHRcdHUxNiBuZXdfb3V0ID0gMDtcbi1cdFx0XHR1MTYgbmV3X2luID0gMDtcbiYjNDM7XHRcdFx0dTMyIG5ld19vdXQgPSAwO1xuJiM0MztcdFx0XHR1MzIgbmV3X2luID0gMDtcbiBcbiBcdFx0XHRzdWNjID0gYnBmX2luc25fc3VjY2Vzc29ycyhlbnYsIGluc25faWR4KTtcbiBcdFx0XHRmb3IgKGludCBzID0gMDsgcyBcdTAwM2Mgc3VjYy1cdTAwM2VjbnQ7ICYjNDM7JiM0MztzKVxuQEAgLTIyNjcsOCAmIzQzOzIyOTEsMjAgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyAmIzQzOyYjNDM7aSlcbi1cdFx0aW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXHUwMDI2aW5zbnNbaV0pO1xuJiM0MztcdFx0dTMyIG91dCA9IHN0YXRlW2ldLm91dDtcbiYjNDM7XHRcdHUzMiBpbiA9IHN0YXRlW2ldLmluO1xuJiM0MztcbiYjNDM7XHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlc1xuJiM0MztcdFx0ICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb25cbiYjNDM7XHRcdCAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZVxuJiM0MztcdFx0ICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IChtYXNrX2hpKG91dCkgXHUwMDI2IEJJVChkZWYzMikpO1xuJiM0MztcdH1cbiBcbiBcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7TGl2ZSByZWdzIGJlZm9yZSBpbnNuOlxcblwmIzM0Oyk7XG5AQCAtMjI4NCw3ICYjNDM7MjMyMCwxMiBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0Oy5cJiMzNDspO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpXSk7XG4mIzQzO1x0XHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuJiM0MztcdFx0XHRpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUqYzsgemV4dFwmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspO1xuJiM0MztcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0XHRpZiAoYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbaV0pKVxuIFx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2ZjM1ZjRlNzE1YjYuLjQ1ZDRjMGEwMGE1ZGIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTIxMjksMTIgJiM0MzsyMTI5LDkgQEAgc3RhdGljIGludCByZWdfYm91bmRzX3Nhbml0eV9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXG4gdm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHRzMzIgc3VicmVnX2RlZiA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuIFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbiBcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuIFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuIH1cbiBcbkBAIC0yMjEwLDcgJiM0MzsyMjA3LDYgQEAgc3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBERUZfTk9UX1NVQlJFR1x0KDApXG4gc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxuIHtcbkBAIC0yMjE5LDcgJiM0MzsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfUkVHOyBpJiM0MzsmIzQzOykge1xuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2ldKTtcbi1cdFx0cmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHR9XG4gXG4gXHQvKiBmcmFtZSBwb2ludGVyICovXG5AQCAtMzAzMiwxMjAgJiM0MzszMDI3LDE0IEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkgLSBpKTtcbiB9XG4gXG4tLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvblxuLSAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXNcbi0gKiBvbiA2NC1iaXQsIG90aGVyd2lzZSByZXR1cm4gRkFMU0UuXG4tICovXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLVx0ICAgICAgdTMyIHJlZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbi17XG4tXHR1OCBjb2RlLCBjbGFzcywgb3A7XG4tXG4tXHRjb2RlID0gaW5zbi1cdTAwM2Vjb2RlO1xuLVx0Y2xhc3MgPSBCUEZfQ0xBU1MoY29kZSk7XG4tXHRvcCA9IEJQRl9PUChjb2RlKTtcbi1cdGlmIChjbGFzcyA9PSBCUEZfSk1QKSB7XG4tXHRcdC8qIEJQRl9FWElUIGZvciBcJiMzNDttYWluXCYjMzQ7IHdpbGwgcmVhY2ggaGVyZS4gUmV0dXJuIFRSVUVcbi1cdFx0ICogY29uc2VydmF0aXZlbHkuXG4tXHRcdCAqL1xuLVx0XHRpZiAob3AgPT0gQlBGX0VYSVQpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChvcCA9PSBCUEZfQ0FMTCkge1xuLVx0XHRcdC8qIEJQRiB0byBCUEYgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBtYXJraW5nXG4tXHRcdFx0ICogY2FsbGVyIHNhdmVkIGNsb2JiZXIgd2l0aCBEU1RfT1BfTk9fTUFSSyBmb3Igd2hpY2ggd2Vcbi1cdFx0XHQgKiBkb24mIzM5O3QgY2FyZSB0aGUgcmVnaXN0ZXIgZGVmIGJlY2F1c2UgdGhleSBhcmUgYW55d2F5XG4tXHRcdFx0ICogbWFya2VkIGFzIE5PVF9JTklUIGFscmVhZHkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcbi1cdFx0XHQgKiBjaGVjaywgY29uc2VydmF0aXZlbHkgcmV0dXJuIFRSVUUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHQgPT0gU1JDX09QKVxuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfRU5EIFx1MDAyNlx1MDAyNiAoaW5zbi1cdTAwM2VpbW0gPT0gMTYgfHwgaW5zbi1cdTAwM2VpbW0gPT0gMzIpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IHx8IGNsYXNzID09IEJQRl9KTVAgfHxcbi1cdCAgICAoY2xhc3MgPT0gQlBGX0FMVSBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX0VORCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gNjQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9KTVAzMilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9MRFgpIHtcbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYO1xuLVx0XHQvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfU1RYKSB7XG4tXHRcdC8qIEJQRl9TVFggKGluY2x1ZGluZyBhdG9taWMgdmFyaWFudHMpIGhhcyBvbmUgb3IgbW9yZSBzb3VyY2Vcbi1cdFx0ICogb3BlcmFuZHMsIG9uZSBvZiB3aGljaCBpcyBhIHB0ci4gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGVyIGlzXG4tXHRcdCAqIGFza2luZyBhYm91dCBpdC5cbi1cdFx0ICovXG4tXHRcdGlmICh0ID09IFNSQ19PUCBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXO1xuLVx0fVxuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9MRCkge1xuLVx0XHR1OCBtb2RlID0gQlBGX01PREUoY29kZSk7XG4tXG4tXHRcdC8qIExEX0lNTTY0ICovXG4tXHRcdGlmIChtb2RlID09IEJQRl9JTU0pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdC8qIEJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqL1xuLVx0XHRpZiAodCAhPSBTUkNfT1ApXG4tXHRcdFx0cmV0dXJuICBmYWxzZTtcbi1cbi1cdFx0LyogSW1wbGljaXQgY3R4IHB0ci4gKi9cbi1cdFx0aWYgKHJlZ25vID09IEJQRl9SRUdfNilcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdFx0LyogRXhwbGljaXQgc291cmNlIGNvdWxkIGJlIGFueSB3aWR0aC4gKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX1NUKVxuLVx0XHQvKiBUaGUgb25seSBzb3VyY2UgcmVnaXN0ZXIgZm9yIEJQRl9TVCBpcyBhIHB0ci4gKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4tXG4tXHQvKiBDb25zZXJ2YXRpdmVseSByZXR1cm4gdHJ1ZSBhdCBkZWZhdWx0LiAqL1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi17XG4tXHRzMzIgZGVmX2lkeCA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuLVx0aWYgKGRlZl9pZHggPT0gREVGX05PVF9TVUJSRUcpXG4tXHRcdHJldHVybjtcbi1cbi1cdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XG4tXHQvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJiMzOTt0IGJlIHN1Yi1yZWdpc3RlciBhbnltb3JlLiAqL1xuLVx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbi19XG4tXG4gc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbiBcdFx0XHQgICBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbiB7XG4tXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2kgJiM0MzsgZW52LVx1MDAzZWluc25faWR4O1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbi1cdGJvb2wgcnc2NDtcbiBcbiBcdG1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTtcbiBcbiBcdHJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVx0cnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTtcbiBcdGlmICh0ID09IFNSQ19PUCkge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgc291cmNlIG9wZXJhbmQgY2FuIGJlIHJlYWQgKi9cbiBcdFx0aWYgKHJlZy1cdTAwM2V0eXBlID09IE5PVF9JTklUKSB7XG5AQCAtMzE1Niw5ICYjNDM7MzA0NSw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHX0ZQKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHRpZiAocnc2NClcbi1cdFx0XHRtYXJrX2luc25femV4dChlbnYsIHJlZyk7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIGRlc3Qgb3BlcmFuZCBjYW4gYmUgd3JpdHRlbiB0byAqL1xuQEAgLTMxNjYsNyAmIzQzOzMwNTIsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmcmFtZSBwb2ludGVyIGlzIHJlYWQgb25seVxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbiBcdFx0aWYgKHQgPT0gRFNUX09QKVxuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZWdubyk7XG4gXHR9XG5AQCAtMzgyMiwxMSAmIzQzOzM3MDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdFx0aWYgKHNpemUgXHUwMDNjPSBzcGlsbF9zaXplIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XG4tXHRcdFx0XHQvKiBUaGUgZWFybGllciBjaGVja19yZWdfYXJnKCkgaGFzIGRlY2lkZWQgdGhlXG4tXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzMzIgc3VicmVnX2RlZiA9IHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xuLVxuIFx0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNiBzcGlsbF9zaXplID09IDQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzYz0gMzIpXG4gXHRcdFx0XHRcdC8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uXG5AQCAtMzgzNCw3ICYjNDM7MzcxNCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdFx0ICovXG4gXHRcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XG4gXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10gPSAqcmVnO1xuLVx0XHRcdFx0c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFxuIFx0XHRcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuXG4gXHRcdFx0XHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXG5AQCAtNjI3MSwxMiAmIzQzOzYxNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncyxcbiBcdFx0XHRcdFx0XHQgICAgdmFsdWVfcmVnbm8pO1xuLVx0XHRcdFx0LyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudFxuLVx0XHRcdFx0ICogYWN0dWFsIGxvYWQgc2l6ZSB3aXRoIHRoZSBvbmUgZW5jb2RlZCBpbiB0aGVcbi1cdFx0XHRcdCAqIGluc24uIFdoZW4gdGhlIGRzdCBpcyBQVFIsIGl0IGlzIGZvciBzdXJlIG5vdFxuLVx0XHRcdFx0ICogYSBzdWItcmVnaXN0ZXIuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0XHRcdGlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xuIFx0XHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjtcbiBcdFx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7XG5AQCAtNzM4MCwxMCAmIzQzOzcyNTMsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0XHRcdGlmIChzcGkgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gc3BpO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG4tXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi1cdFx0XHQgKi9cbiBcdFx0XHRtYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XG4gXG4gXHRcdFx0cmVnID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbkBAIC05NDYzLDcgJiM0Mzs5MzMyLDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqL1xuIFx0XHRpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHtcbiBcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIEJQRl9SRUdfMCk7XG4tXHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQ4Miw5ICYjNDM7MTAzNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG4tXHQvKiBoZWxwZXIgY2FsbCByZXR1cm5zIDY0LWJpdCB2YWx1ZS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4tXG4gXHQvKiB1cGRhdGUgcmV0dXJuIHJlZ2lzdGVyIChhbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlKSAqL1xuIFx0cmV0X3R5cGUgPSBmbi1cdTAwM2VyZXRfdHlwZTtcbiBcdHJldF9mbGFnID0gdHlwZV9mbGFnKHJldF90eXBlKTtcbkBAIC0xMDcyMiwzMCAmIzQzOzEwNTg3LDYgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XG4tICogdGhlIEJURiBmdW5jX3Byb3RvJiMzOTtzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cbi0gKi9cbi1zdGF0aWMgdm9pZCBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4tXHRcdFx0XHQgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKVxuLXtcbi1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSBcdTAwMjZyZWdzW3JlZ25vXTtcbi1cbi1cdGlmIChyZWdubyA9PSBCUEZfUkVHXzApIHtcbi1cdFx0LyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlICovXG4tXHRcdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xuLVx0XHRcdERFRl9OT1RfU1VCUkVHIDogZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4tXHR9IGVsc2UgaWYgKHJlZ19zaXplID09IHNpemVvZih1NjQpKSB7XG4tXHRcdC8qIEZ1bmN0aW9uIGFyZ3VtZW50ICovXG4tXHRcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHZvaWQgbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgcmVnbm8sXG4tXHRcdFx0XHQgICBzaXplX3QgcmVnX3NpemUpXG4te1xuLVx0cmV0dXJuIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIGN1cl9yZWdzKGVudiksIHJlZ25vLCByZWdfc2l6ZSk7XG4tfVxuLVxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbiBcdHJldHVybiBtZXRhLVx1MDAzZWtmdW5jX2ZsYWdzIFx1MDAyNiBLRl9BQ1FVSVJFO1xuQEAgLTEyOTc0LDcgJiM0MzsxMjgxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXg7XG4gXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xuLVx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcbiBcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQ7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbkBAIC0xMzAxOCw3ICYjNDM7MTI4NTgsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmYWlsZWQgdG8gbWFyayBzMzIgcmFuZ2UgZm9yIHJldHZhbCBpbiBmb3JrZWQgc3RhdGUgZm9yIGxvY2tcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdFx0X19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7XG4gXHR9IGVsc2UgaWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX19fYnBmX3RyYXBdKSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC0xMzE2OCw3ICYjNDM7MTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4gXG4gXHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbcmVnbm9dKTtcbi1cdFx0cmVnc1tyZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG5AQCAtMTMxOTAsNyAmIzQzOzEzMDI4LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbiBcdFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxuIFx0XHRcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTEzMjgxLDcgJiM0MzsxMzExOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0LyogRm9yIG1hcmtfcHRyX29yX251bGxfcmVnLCBzZWUgOTNjMjMwZTNmNWJkNiAqL1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuIFx0XHR9XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcbiBcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkpIHtcbiBcdFx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuIFx0XHRcdGlmIChpZCBcdTAwM2MgMClcbkBAIC0xMzMxOCwxOCAmIzQzOzEzMTU0LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRjYWxsZXJfaW5mby1cdTAwM2VzdGFja19hcmdfY250ID0gc3RhY2tfYXJnX2NudDtcbiBcdH1cbiBcbi1cdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLmZ1bmNfcHJvdG8gJiM0MzsgMSk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIG5hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgcmVnbm8gPSBpICYjNDM7IDE7XG4tXG4tXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdC8qIHNjYWxhci4gZW5zdXJlZCBieSBjaGVja19rZnVuY19hcmdzKCkgKi9cbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXHUwMDNlc2l6ZSk7XG4tXHR9XG4tXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTE0ODIzLDE0ICYjNDM7MTQ2NDcsMTQgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSlcbiBcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFxuLVx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cbi1cdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NClcbiYjNDM7XHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuIFx0XHRcdCAqIDY0LWJpdCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIDMyLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGF1eC1cdTAwM2VuZWVkc196ZXh0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YXV4LVx1MDAzZXpleHRfZHN0ID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0LyogQW55IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvbiBhcmVuYSBwb2ludGVycyAqL1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNDk2OSw2ICYjNDM7MTQ3OTMsNyBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gLyogY2hlY2sgdmFsaWRpdHkgb2YgMzItYml0IGFuZCA2NC1iaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zICovXG4gc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCA9IGN1cl9hdXgoZW52KTtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbiBcdHU4IG9wY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuIFx0aW50IGVycjtcbkBAIC0xNTAyNiwxOCAmIzQzOzE0ODUxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSkge1xuIFx0XHRcdFx0XHQvKiBvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCAqL1xuIFx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbi1cdFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4mIzQzO1x0XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gMSkgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4gXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xuLVx0XHRcdFx0XHRcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKSB7XG4gXHRcdFx0XHRcdC8qIGNhc2U6IFIxID0gUjJcbiBcdFx0XHRcdFx0ICogY29weSByZWdpc3RlciBzdGF0ZSB0byBkZXN0IHJlZ1xuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4tXHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi9cbiBcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG5AQCAtMTUwNTUsNyAmIzQzOzE0ODc2LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHRcdFx0XHR9XG5AQCAtMTUwODAsNyAmIzQzOzE0OTAwLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRcdGlmICghaXNfc3JjX3JlZ191MzIpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xuIFx0XHRcdFx0XHRcdGJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuQEAgLTE1MDkwLDcgJiM0MzsxNDkwOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbiBcdFx0XHRcdFx0XHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE1OTU5LDEyICYjNDM7MTU3NzcsOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4gXHRcdFx0czMyIHNhdmVkX29mZiA9IHJlZy1cdTAwM2VkZWx0YTtcbiBcdFx0XHR1MzIgc2F2ZWRfaWQgPSByZWctXHUwMDNlaWQ7XG4gXG5AQCAtMTU5NzQsMTIgJiM0MzsxNTc4OCwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdC8qIHJlZyA9IGtub3duX3JlZzsgcmVnICYjNDM7PSBkZWx0YSAqL1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXG4tXHRcdFx0ICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxuJiM0MztcdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGluY29ycmVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZWctXHUwMDNlZGVsdGEgPSBzYXZlZF9vZmY7XG4gXHRcdFx0cmVnLVx1MDAzZWlkID0gc2F2ZWRfaWQ7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFxuIFx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuIFx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbkBAIC0xNjQxNCw4ICYjNDM7MTYyMjcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxuIFx0ICovXG4gXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi1cdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHQvKlxuIFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXG4gXHQgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy5cbkBAIC0xNjczMCw3ICYjNDM7MTY1NDEsNiBAQCBib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcbiBcdGludCBpO1xuIFxuIFx0aWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkge1xuLVxuIFx0XHRpZiAoYnBmX2dldF9oZWxwZXJfcHJvdG8oZW52LCBjYWxsLVx1MDAzZWltbSwgXHUwMDI2Zm4pIFx1MDAzYyAwKVxuIFx0XHRcdC8qIGVycm9yIHdvdWxkIGJlIHJlcG9ydGVkIGxhdGVyICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE3NDc1LDYgJiM0MzsxNzI4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslZDogXCYjMzQ7LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdFx0ZW52LVx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXHUwMDNlcHJldl9sb2dfcG9zO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjU1NzkxNzNhNjFlM2IgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xuQEAgLTEwNywxNCAmIzQzOzEwNyw3IEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gXG4gXHRwID0gYnVmO1xuIFx0d2hpbGUgKCpwICE9ICYjMzk7XFwwJiMzOTspIHtcbi1cdFx0aWYgKCpwID09ICYjMzk7XFxuJiMzOTspIHtcbi1cdFx0XHRtZW1tb3ZlKHAgJiM0MzsgMywgcCwgc3RybGVuKGJ1ZikgJiM0MzsgMSAtIChwIC0gYnVmKSk7XG4tXHRcdFx0LyogQWxpZ24gZWFjaCBpbnN0cnVjdGlvbiBkdW1wIHJvdyBsZWZ0LiAqL1xuLVx0XHRcdCpwJiM0MzsmIzQzOyA9ICYjMzk7XFxcXCYjMzk7O1xuLVx0XHRcdCpwJiM0MzsmIzQzOyA9ICYjMzk7bCYjMzk7O1xuLVx0XHRcdC8qIE91dHB1dCBtdWx0aWxpbmUgY29uY2F0ZW5hdGlvbi4gKi9cbi1cdFx0XHQqcCYjNDM7JiM0MzsgPSAmIzM5O1xcXFwmIzM5Oztcbi1cdFx0fSBlbHNlIGlmICgqcCA9PSAmIzM5O1x1MDAzYyYjMzk7IHx8ICpwID09ICYjMzk7XHUwMDNlJiMzOTsgfHwgKnAgPT0gJiMzOTt8JiMzOTsgfHwgKnAgPT0gJiMzOTtcdTAwMjYmIzM5Oykge1xuJiM0MztcdFx0aWYgKCpwID09ICYjMzk7XHUwMDNjJiMzOTsgfHwgKnAgPT0gJiMzOTtcdTAwM2UmIzM5OyB8fCAqcCA9PSAmIzM5O3wmIzM5OyB8fCAqcCA9PSAmIzM5O1x1MDAyNiYjMzk7KSB7XG4gXHRcdFx0bWVtbW92ZShwICYjNDM7IDEsIHAsIHN0cmxlbihidWYpICYjNDM7IDEgLSAocCAtIGJ1ZikpO1xuIFx0XHRcdC8qIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3Rlci4gKi9cbiBcdFx0XHQqcCYjNDM7JiM0MzsgPSAmIzM5O1xcXFwmIzM5OztcbkBAIC0xMjksMTYgJiM0MzsxMjIsMTAgQEAgcHJpbnRfaW5zbl9mb3JfZ3JhcGgodm9pZCAqcHJpdmF0ZV9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBzdGF0aWMgdm9pZCBfX3ByaW50ZigyLCAzKVxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XG4tXHRjaGFyIGNob21wZWRfZm10W2xdO1xuIFx0dmFfbGlzdCBhcmdzO1xuIFxuIFx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdGlmIChsIFx1MDAzZSAwKSB7XG4tXHRcdHN0cm5jcHkoY2hvbXBlZF9mbXQsIGZtdCwgbCAtIDEpO1xuLVx0XHRjaG9tcGVkX2ZtdFtsIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuLVx0fVxuLVx0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBjaG9tcGVkX2ZtdCwgYXJncyk7XG4mIzQzO1x0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xuIFx0dmFfZW5kKGFyZ3MpO1xuIH1cbiBcbkBAIC0zNTEsNiAmIzQzOzMzOCw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbiBcbiBcdFx0cHJpbnRmKFwmIzM0OyU0dTogXCYjMzQ7LCBpKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcblwmIzM0Oyk7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0OyAgICAgICBcJiMzNDspO1xuQEAgLTQxNyw2ICYjNDM7NDA1LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9mb3JfZ3JhcGgoc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1Zl9zdGFydCwgdm9pZCAqYnVmX2VuZCxcbiBcbiBcdFx0cHJpbnRmKFwmIzM0OyV1OiBcJiMzNDssIGluc25fb2ZmKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcXFxsXFxcXFxcblwmIzM0Oyk7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0O1xcXFwgXFxcXCBcXFxcIFxcXFwgXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXG5pbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXG5AQCAtNTUsMTAgJiM0Mzs1NSw5IEBAIHN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4gXHQgKiBmb3IgZWFjaCBpbnN0cnVjdGlvbiAoRkYgc3RhbmRzIGZvciBpbnN0cnVjdGlvbiBgY29kZWAgYnl0ZSkuXG4gXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cbiBcdCAqIEUuZy46IFwmIzM0Oyg4NSkgY2FsbCBmb28jMTBcJiMzNDsgLVx1MDAzZSBcJiMzNDtjYWxsIGZvb1wmIzM0Oy5cbi1cdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICYjMzk7bWF4KHN0cmxlbihidWYpIC0gMSwgMCkmIzM5OyB0aGluZykuXG4gXHQgKi9cbiBcdHBmeF9lbmQgPSBidWYgJiM0MzsgNTtcbi1cdHNmeF9zdGFydCA9IGJ1ZiAmIzQzOyBtYXgoKGludClzdHJsZW4oYnVmKSAtIDEsIDApO1xuJiM0MztcdHNmeF9zdGFydCA9IGJ1ZiAmIzQzOyAoaW50KXN0cmxlbihidWYpO1xuIFx0aWYgKHN0cm5jbXAocGZ4X2VuZCwgXCYjMzQ7Y2FsbCBcJiMzNDssIDUpID09IDAgXHUwMDI2XHUwMDI2ICh0bXAgPSBzdHJyY2hyKGJ1ZiwgJiMzOTsjJiMzOTspKSlcbiBcdFx0c2Z4X3N0YXJ0ID0gdG1wO1xuIFx0bGVuID0gc2Z4X3N0YXJ0IC0gcGZ4X2VuZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggYmU5N2Y2ODg3ZjBlNy4uZmJhNTYyYzgxOTY5MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC0xMjQsNiAmIzQzOzEyNCw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfaml0X2lubGluZS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpcnEuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY3R4X3B0cl9wYXJhbS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfemV4dC5za2VsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1BWF9FTlRSSUVTIDExXG4gXG5AQCAtMjc3LDYgJiM0MzsyNzgsNyBAQCB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfVxuJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH1cbiBcbiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJkZDNlYTY2MWI3Nzhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcbkBAIC0wLDAgJiM0MzsxLDM4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IGFyZW5hIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztleHRlcm4gbG9uZyBicGZfa2Z1bmNfY2FsbF90ZXN0NChzaWduZWQgY2hhciBhLCBzaG9ydCBiLCBpbnQgYywgbG9uZyBkKSBfX2tzeW07XG4mIzQzO1xuJiM0MzsvKiB0byByZXRhaW4gZGVidWcgaW5mbyBmb3IgQlRGIGdlbmVyYXRpb24gKi9cbiYjNDM7dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbiYjNDM7XHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoMCwgMCwgMCwgMCwgMCk7XG4mIzQzO1x0YnBmX3Jkb25seV9jYXN0KDAsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMilcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2xvc3RfYWNyb3NzX2NoZWNrcG9pbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IDB4ZGVhZGJlZWZjYWZlYmFiZSBsbDtcdC8qIGluamVjdCBzb21lIHZhbHVlIGZvciByNiYjMzk7cyB1cHBlciBoYWxmICovXHRcXFxuJiM0MztcdGlmIHI4ICE9IDAgZ290byAxZjtcdFx0LyogZmFsbC10aHJvdWdoIGNhY2hlZCBmaXJzdCwgYnJhbmNoIHBydW5lZCAqL1x0XFxcbiYjNDM7XHRyNiA9IDMyO1x0XHRcdC8qIGZ1bGwgNjQtYml0IGRlZiAqL1x0XHRcdFx0XFxcbiYjNDM7XHRnb3RvIDJmO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHR3NiA9IDMyO1x0XHRcdC8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovXHRcdFxcXG4mIzQzOzI6XHRyMCA9IHI2O1x0XHRcdC8qIGJ1Z2d5IHZlcmlmaWVyIGJlbGlldmVkIHVwcGVyIDMyIGJpdHMgYXJlIDAgKi8gXFxcbiYjNDM7XHRcdFx0XHRcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1x0XFxcbiYjNDM7XHRyMCBcdTAwM2VcdTAwM2U9IDMyO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2t0aW1lX2dldF9ucylcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3cxID0gdzB7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHcxID0gdzA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIG9ubHkgYXMgMzItYml0IC1cdTAwM2Ugbm8gemV4dCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0OzsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHcxID0gdzA7XHRcdC8qIE1PViAqL1x0XHRcXFxuJiM0MztcdHcyID0gdzE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzIgJiM0Mzs9IHcxO1x0XHQvKiBBTFUzMiwgQlBGX1ggKi9cdFxcXG4mIzQzO1x0dzIgJiM0Mzs9IDE7XHRcdC8qIEFMVTMyLCBCUEZfSyAqL1x0XFxcbiYjNDM7XHR3MiA9IHcyO1x0XHQvKiBrZWVwIHcyIGFsaXZlIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbiAqLyBcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDY0LWJpdCBkZWZpbml0aW9uIGlzIG5ldmVyIHplcm8gZXh0ZW5kZWQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbm90X21zZyhcJiMzNDtyMSA9IHIwe3suKn19OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgbm9femV4dF9tb3Y2NCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTmFycm93IGxvYWQgcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7cjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbmFycm93X2xvYWRfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICoodTMyICopKHIxMCAtIDgpO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDMyLWJpdCBhdG9taWMgZmV0Y2ggcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7cjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfYXRvbWljX2ZldGNoMzJfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IHIxO1x0XHRcdFx0XFxcbiYjNDM7XHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQuOGJ5dGUgJVtmZXRjaF9hZGQzMl07XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsXG4mIzQzO1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDMyLWJpdCBhdG9taWMgY21weGNoZyByZXN1bHQgKHIwKSByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3IwID0gYXRvbWljX2NtcHhjaGcoKHUzMiAqKShyMTAgLTgpLCByMCwgcjEpe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4mIzQzO1x0dzAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0LjhieXRlICVbY21weGNoZzMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIyO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9pbnNuKGNtcHhjaGczMixcbiYjNDM7XHRcdCAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0NNUFhDSEcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDMyLWJpdCBkZWYgYmVmb3JlIGEgYnJhbmNoLCB1cHBlciBoYWxmIHVzZWQgb24gb25lIGJyYW5jaCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3c2ID0gMzJ7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHc2ID0gMzI7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHIxJiMzOTtzIHVwcGVyIGhhbGYgaXMgZGVhZCwgc28gJiMzOTt3MSA9IDEmIzM5OyBtdXN0IE5PVCBiZSBtYXJrZWQgZm9yIHplcm8gZXh0ZW5zaW9uLiAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0O3cxID0gMXt7Lip9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcXFxuJiM0MztcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDtyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2xkX2Fic19oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHU4ICopc2tiWzBdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjc7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSGVscGVyIHBhcmFtZXRlcnMgYXJlIHJlYWQgYXMgNjQtYml0IChjYWxsX3VzZV9tYXNrKCkgZmFsbGJhY2spICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MiA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdHcyID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfdHJhY2VfcHJpbnRrXTtcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfdHJhY2VfcHJpbnRrKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHN1YnByb2dfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQ7XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgemVybyBleHRlbmRlZCAqL1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDt3MiA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDt3MyA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDt3NCA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQga2Z1bmNfcGFyYW1fcmVhZF9wZXJfYnRmKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHcyID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHczID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHc0ID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgYnBmX2tmdW5jX2NhbGxfdGVzdDQ7XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0OzsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGFsdTMyX2FuZF8zMmJpdF9jb25kaXRpb25hbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHcxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbiYjNDM7XHR3MiA9IDI4O1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHcyIFx1MDAzZSB3MSBnb3RvIDFmO1x0XHQvKiBCUEZfWCAqL1x0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGFsdTMyX2FuZF82NGJpdF9jb25kaXRpb25hbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbiYjNDM7XHRyMiA9IDI4O1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIyIFx1MDAzZSByMSBnb3RvIDFmO1x0XHQvKiBCUEZfWCAqL1x0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX25vdF9tc2coXCYjMzQ7OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgYWx1NjRfYW5kX2NvbmRpdGlvbmFscyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHcxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbiYjNDM7XHRpZiByMSBcdTAwM2UgNDIgZ290byAxZjtcdFx0LyogQlBGX0sgKi9cdFxcXG4mIzQzO1x0cjIgPSAyODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiB3MiBcdTAwM2UgdzEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4mIzQzO1x0aWYgcjIgXHUwMDNlIHIxIGdvdG8gMWY7XHRcdC8qIEJQRl9YICovXHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P2ZlbnRyeS5zL1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuJiM0MztfX2FyY2hfczM5MHhcbiYjNDM7X194bGF0ZWQoXCYjMzQ7NzogdzEgPSB3MFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7ODogdzEgPSB3MVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7OTogdzEgJiM0Mzs9IDhcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OzEwOiB3MSA9IHcxXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgYXJlbmFfcHRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gJVthcmVuYV0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIzID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI0ID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI1ID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdO1x0XHRcdFxcXG4mIzQzO1x0cjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpO1x0LyogbmVlZHMgemV4dCAqL1xcXG4mIzQzO1x0cjEgJiM0Mzs9IDg7XHRcdFx0LyogbmVlZHMgemV4dCAqL1xcXG4mIzQzO1x0Kih1NjQgKikocjEgJiM0MzswKSA9IDQyO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIoYXJlbmEpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsvKiBDaGVjayBpZiBwcm9iZSBtZW0gbG9hZHMga2VlcCB0aGVpciB6ZXJvIGV4dGVuc2lvbi4gKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fYXJjaF9zMzkweFxuJiM0MztfX3hsYXRlZChcJiMzNDszOiByMSA9ICoodTY0ICopKHIwICYjNDM7MClcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OzQ6IHIyID0gKih1MzIgKikocjAgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7NTogdzIgPSB3MlwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7NjogcjMgPSAqKHUxNiAqKShyMCAmIzQzOzApXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDs3OiB3MyA9IHczXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDs4OiByNCA9ICoodTggKikocjAgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7OTogdzQgPSB3NFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHByb2JlX21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcdFx0XHRcXFxuJiM0MztcdHIxID0gKih1NjQgKikocjAgJiM0MzsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuJiM0MztcdHIyID0gKih1MzIgKikocjAgJiM0MzsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuJiM0MztcdHIzID0gKih1MTYgKikocjAgJiM0MzsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuJiM0MztcdHI0ID0gKih1OCAqKShyMCAmIzQzOyAwKTtcdC8qIEJQRl9QUk9CRV9NRU0gKi9cdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0LyogbWFrZSB0aGUgcmVnaXN0ZXJzIHVzZWQgKi8gXFxcbiYjNDM7XHRyMCAmIzQzOz0gcjI7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgJiM0Mzs9IHIzO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwICYjNDM7PSByNDtcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfcmRvbmx5X2Nhc3QpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZlcmlmaWNhdGlvbiBieXBhc3NlcyBvciBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzc3ZmUyMWFkOGVlZjc2NzhmOGE1ZWFjMDcwNDBjY2Q4ZGQzYjRiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMDA6NTE6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzLi4zOWIwZGIyYTRmMTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHsKIAkgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS4KIAkgKi8KIAl1MzIgZnJhbWVubzsKLQkvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZQotCSAqIHdyaXRpbmcgaW5zbi4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc3VicmVnX2RlZiBpcyB1c2VkIGJlZm9yZSBhbnkgaW5zbgotCSAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC4KLQkgKi8KLQlzMzIgc3VicmVnX2RlZjsKIAkvKiBpZiAoIXByZWNpc2UgJmFtcDsmYW1wOyBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqLwogCWJvb2wgcHJlY2lzZTsKIH07CkBAIC0xNjMxLDcgJiM0MzsxNjI2LDYgQEAgc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiB7CiB9OwogCiAvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IGZpeHVwcy5jICovCi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpOwogdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pOwogdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7CiBib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CkBAIC0xNjU1LDUgJiM0MzsxNjQ5LDYgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTsKIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwogaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CiBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwomIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogCiAjZW5kaWYgLyogX0xJTlVYX0JQRl9WRVJJRklFUl9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwppbmRleCAyZTRhZTBlZjA4NjA5Li43YzQ1OTllNjVlY2ViIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCwKIAkJdmVyYm9zZShlbnYsICYjMzQ7c3RhY2s9JXMgYmVmb3JlICYjMzQ7LCBlbnYtJmd0O3RtcF9zdHJfYnVmKTsKIAkJdmVyYm9zZShlbnYsICYjMzQ7JWQ6ICYjMzQ7LCBpZHgpOwogCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAl9CiAKIAkvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jCmluZGV4IDAzOTFiM2JjMDA3MzQuLjUwYjNjYTUxNDlhMGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaXNhc20uYwpAQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfZW5kX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLAogCQkJICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiB7Ci0JdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkXG4mIzM0OywKJiM0MzsJdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkJiMzNDssCiAJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCUJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1RPX0JFID8gJiMzNDtiZSYjMzQ7IDogJiMzNDtsZSYjMzQ7LAogCQlpbnNuLSZndDtpbW0sIGluc24tJmd0O2RzdF9yZWcpOwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfYnN3YXBfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsCiAJCQkgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKLQl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWRcbiYjMzQ7LAomIzQzOwl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWQmIzM0OywKIAkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtkc3RfcmVnKTsKIH0KQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWVsc2UKIAkJCQlwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLSZndDtwcml2YXRlX2RhdGEsIGluc24pOwogCQl9IGVsc2UgaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTkVHKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkID0gLSVjJWRcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcpOwogCQl9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7c3JjX3JlZywgKCh1MzIpaW5zbi0mZ3Q7aW1tKSAmZ3Q7Jmd0OyAxNiwgKHUxNilpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKGlzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJmFtcDsodm9pZCBfX3BlcmNwdSAqKShyJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAmYW1wOyh2b2lkIF9fcGVyY3B1ICopKHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlcyVjJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OywKIAkJCQlpbnNuLSZndDtkc3RfcmVnLAogCQkJCWlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdCkBAIC0yMTgsNyAmIzQzOzIxOCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaXNfc2Rpdl9zbW9kKGluc24pID8gYnBmX2FsdV9zaWduX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0KQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0pCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLApAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgKGluc24tJmd0O2ltbSA9PSBCUEZfQUREIHx8IGluc24tJmd0O2ltbSA9PSBCUEZfQU5EIHx8CiAJCQkgIGluc24tJmd0O2ltbSA9PSBCUEZfT1IgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YT1IpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlJiM0MztkKSAlcyByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsCkBAIC0yNDYsNyAmIzQzOzI0Niw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O3NyY19yZWcsCiAJCQkJQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0RXID8gJiMzNDs2NCYjMzQ7IDogJiMzNDsmIzM0OywKIAkJCQlicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tJmd0O2ltbSkgJmd0OyZndDsgNF0sCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQlCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcgPyAmIzM0OzY0JiMzNDsgOiAmIzM0OyYjMzQ7LAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKQEAgLTI2Miw0NCAmIzQzOzI2Miw0NCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCQlpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDICZhbXA7JmFtcDsKIAkJCSAgIGluc24tJmd0O2ltbSA9PSBCUEZfWENIRykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtzcmNfcmVnLAogCQkJCUJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVyA/ICYjMzQ7NjQmIzM0OyA6ICYjMzQ7JiMzNDssCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9IGxvYWRfYWNxdWlyZSgoJXMgKikociVkICUmIzQzO2QpKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX1NUT1JFX1JFTCkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsIGluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHXyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkgewogCQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7b2ZmLCBpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjJiMzNDssIGluc24tJmd0O2NvZGUpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfc3RfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX3N0XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9NRU0gJmFtcDsmYW1wOyBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfTUVNU1gpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkeF8lMDJ4XG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcbiYjMzQ7LAomIzQzOwkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZCkmIzM0OywKIAkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQlCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNID8KIAkJCQkgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdIDoKQEAgLTMwNywxMiAmIzQzOzMwNywxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BQlMpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF0mIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9JTkQpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICYjNDM7ICVkXSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O2ltbSk7CkBAIC0zMzIsMTIgJiM0MzszMzIsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCQlpZiAoaXNfcHRyICZhbXA7JmFtcDsgIWFsbG93X3B0cl9sZWFrcykKIAkJCQlpbW0gPSAwOwogCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAlc1xuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJXMmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLAogCQkJCV9fZnVuY19pbW1fbmFtZShjYnMsIGluc24sIGltbSwKIAkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpKTsKIAkJfSBlbHNlIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkXyUwMnhcbiYjMzQ7LCBpbnNuLSZndDtjb2RlKTsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZF8lMDJ4JiMzNDssIGluc24tJmd0O2NvZGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkgewpAQCAtMzQ3LDM1ICYjNDM7MzQ3LDM1IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJY2hhciB0bXBbNjRdOwogCiAJCQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXNcbiYjMzQ7LAomIzQzOwkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXMmIzM0OywKIAkJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQkJX19mdW5jX2dldF9uYW1lKGNicywgaW5zbiwKIAkJCQkJCQl0bXAsIHNpemVvZih0bXApKSk7CiAJCQl9IGVsc2UgewogCQkJCXN0cmNweSh0bXAsICYjMzQ7dW5rbm93biYjMzQ7KTsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsICVzIyVkXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSwKJiM0MzsJCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgY2FsbCAlcyMlZCYjMzQ7LCBpbnNuLSZndDtjb2RlLAogCQkJCQlfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLAogCQkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpLAogCQkJCQlpbnNuLSZndDtpbW0pOwogCQkJfQogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtvZmYpOwogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCkpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG94IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290b3ggciVkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgJmFtcDsmYW1wOwogCQkJICAgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfTUFZX0dPVE8pIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7b2ZmKTsKIAkJfSBlbHNlIGlmIChpbnNuLSZndDtjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG9sIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2ltbSk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZXhpdFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGV4aXQmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwKLQkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdLApAQCAtMzgzLDE0ICYjNDM7MzgzLDE0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSB7CiAJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLAotCQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssCiAJCQkJaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCQlicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0sCiAJCQkJKHUzMilpbnNuLSZndDtpbW0sIGluc24tJmd0O29mZik7CiAJCX0KIAl9IGVsc2UgewotCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlc1xuJiMzNDssCiYjNDM7CQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlcyYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgYnBmX2NsYXNzX3N0cmluZ1tjbGFzc10pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGEwYmRkYWRhNzk2NGUuLjdiMzUxMGQ0NmIzNzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtNDQsMTUgJiM0Mzs0NCw2MSBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAl9CiB9CiAKLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqLwotc3RhdGljIGJvb2wgaW5zbl9oYXNfZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzOy8qCiYjNDM7ICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSAmZ3Q7PSAwLgomIzQzOyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LAomIzQzOyAqIG90aGVyd2lzZSByZXR1cm4gRkFMU0UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKLQlpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pOwomIzQzOwl1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKTsKJiM0MzsJdTggbW9kZSA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpOwomIzQzOwl1OCBzaXplID0gQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CXU4IG9wID0gQlBGX09QKGluc24tJmd0O2NvZGUpOwomIzQzOwlib29sIG1vZGVfbWVtOwomIzQzOwomIzQzOwkvKiBzdWJyZWdpc3RlciBlbmRpbmVzcyBzd2FwICovCiYjNDM7CWlmICgoY2xhc3MgPT0gQlBGX0FMVSB8fCBjbGFzcyA9PSBCUEZfQUxVNjQpICZhbXA7JmFtcDsgb3AgPT0gQlBGX0VORCAmYW1wOyZhbXA7IGluc24tJmd0O2ltbSAhPSA2NCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogdzAgJiM0Mzs9IDEgKi8KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9BTFUgJmFtcDsmYW1wOyBvcCAhPSBCUEZfRU5EKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCksIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi8KJiM0MzsJaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgJmFtcDsmYW1wOwomIzQzOwkgICAgaW5zbi0mZ3Q7b2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgJmFtcDsmYW1wOyBpbnNuLSZndDtpbW0gPT0gMSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogbm9uIDY0LWJpdCwgbm9uIHNpZ25lZCBleHRlbmRlZCBsb2FkcyAqLwomIzQzOwltb2RlX21lbSA9IG1vZGUgPT0gQlBGX01FTSB8fCBtb2RlID09IEJQRl9QUk9CRV9NRU0gfHwgbW9kZSA9PSBCUEZfUFJPQkVfTUVNMzI7CiYjNDM7CWlmIChjbGFzcyA9PSBCUEZfTERYICZhbXA7JmFtcDsgbW9kZV9tZW0gJmFtcDsmYW1wOyBzaXplICE9IEJQRl9EVykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogYXRvbWljcywgc2VlIGluc25fZGVmX3JlZ25vKCkgKi8KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9TVFggJmFtcDsmYW1wOyBzaXplICE9IEJQRl9EVykKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCWlmIChkc3RfcmVnID09IC0xKQomIzQzOwkvKiBib3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi8KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9MRCAmYW1wOyZhbXA7IChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuICFicGZfaXNfcmVnNjQoaW5zbiwgZHN0X3JlZywgTlVMTCwgRFNUX09QKTsKJiM0MzsJLyogQ29uc2VydmF0aXZlbHkgcmV0dXJuIHRydWUgYXQgZGVmYXVsdC4gKi8KJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90CiYjNDM7ICogZXhwbGljaXRseSBkZWZpbmUgYSAzMi1iaXQgdmFsdWUuCiYjNDM7ICovCiYjNDM7aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWludCBkc3RfcmVnID0gaW5zbl9kZWZfcmVnbm8oaW5zbik7CiYjNDM7CiYjNDM7CWlmIChkc3RfcmVnICZsdDsgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiBkc3RfcmVnOwogfQogCiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTE2OSw3ICYjNDM7MjE1LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZQogCSAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuCiAJICovCi0JZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7CiYjNDM7CWRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpICZndDs9IDA7CiAKIAlpZiAoY250ID09IDEpCiAJCXJldHVybjsKQEAgLTE4MSw3ICYjNDM7MjI3LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlmb3IgKGkgPSBvZmY7IGkgJmx0OyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHsKIAkJLyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi8KIAkJZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47Ci0JCWRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpOwomIzQzOwkJZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgJmd0Oz0gMDsKIAl9CiAKIAkvKgpAQCAtNjE2LDExICYjNDM7NjYyLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJaWYgKGxvYWRfcmVnID09IC0xKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKiBOT1RFOiBhcmcgJiMzNDtyZWcmIzM0OyAodGhlIGZvdXJ0aCBvbmUpIGlzIG9ubHkgdXNlZCBmb3IKLQkJCSAqICAgICAgIEJQRl9TVFggJiM0MzsgU1JDX09QLCBzbyBpdCBpcyBzYWZlIHRvIHBhc3MgTlVMTAotCQkJICogICAgICAgaGVyZS4KLQkJCSAqLwotCQkJaWYgKGJwZl9pc19yZWc2NCgmYW1wO2luc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7CiYjNDM7CQkJaWYgKGJwZl9pc19yZWc2NCgmYW1wO2luc24pKSB7CiAJCQkJaWYgKGNsYXNzID09IEJQRl9MRCAmYW1wOyZhbXA7CiAJCQkJICAgIEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTU0pCiAJCQkJCWkmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jCmluZGV4IDBhYWRmYmFlMGFjYzUuLjc4MzUxZTRhNmYyNWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKQEAgLTQ5Nyw3ICYjNDM7NDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmkKIAkJcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKIAkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaW5zbl9pZHgpOwogCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgJmFtcDtpbnNuc1tpbnNuX2lkeF0pOwotCQlicGZfdmxvZ19yZXNldCgmYW1wO2Vudi0mZ3Q7bG9nLCBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gMSk7IC8qIHJlbW92ZSBcbiAqLwogCQlpbnNuX3BvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3M7CiAJCXZlcmJvc2UoZW52LCAmIzM0OyUqYzsmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspOwogCQlwb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwpAQCAtMTA0Myw3ICYjNDM7MTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpCiAJCWlmICghcHJpbnRlZCkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKLQkJCWJwZl92bG9nX3Jlc2V0KCZhbXA7ZW52LSZndDtsb2csIGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSAxKTsKIAkJCXByaW50ZWQgPSB0cnVlOwogCQl9CiAJCXZlcmJvc2UoZW52LCAmIzM0O1x0ciVkOiAmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgJmFtcDthdF9pbltpXSk7CkBAIC0xMDU4LDcgJiM0MzsxMDU2LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGkKIAkJaWYgKCFwcmludGVkKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslM2Q6ICYjMzQ7LCBpZHgpOwogCQkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pOwotCQkJYnBmX3Zsb2dfcmVzZXQoJmFtcDtlbnYtJmd0O2xvZywgZW52LSZndDtsb2cuZW5kX3BvcyAtIDEpOwogCQkJcHJpbnRlZCA9IHRydWU7CiAJCX0KIAkJdmVyYm9zZShlbnYsICYjMzQ7XHRzYSVkOiAmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgJmFtcDthdF9pblthaV0pOwpAQCAtMTA3MCw3ICYjNDM7MTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpCiAJCWlmICghcHJpbnRlZCkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKLQkJCWJwZl92bG9nX3Jlc2V0KCZhbXA7ZW52LSZndDtsb2csIGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSAxKTsKIAkJCXByaW50ZWQgPSB0cnVlOwogCQl9CiAJCXZlcmJvc2UoZW52LCAmIzM0O1x0ZnAlJiM0MztkOiAmIzM0OywgLShpICYjNDM7IDEpICogOCk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgJmFtcDthdF9zdGFja19pbltpXSk7CkBAIC0xNTQ1LDYgJiM0MzsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAKIAkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaWR4XSk7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAogCQkvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi8KIAkJaWYgKGlzX2xkeF9zdHhfY2FsbCAmYW1wOyZhbXA7CkBAIC0yMDUwLDI5ICYjNDM7MjA0NywzOCBAQCBpbnQgYnBmX2NvbXB1dGVfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIC8qIEVhY2ggZmllbGQgaXMgYSByZWdpc3RlciBiaXRtYXNrICovCiBzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgewotCXUxNiB1c2U7CS8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovCi0JdTE2IGRlZjsJLyogcmVnaXN0ZXJzIHdyaXR0ZW4gYnkgaW5zdHJ1Y3Rpb24gKi8KLQl1MTYgaW47CQkvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovCi0JdTE2IG91dDsJLyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovCiYjNDM7CXUzMiB1c2U7CS8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovCiYjNDM7CXUzMiBkZWY7CS8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovCiYjNDM7CXUzMiBpbjsJCS8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBiZWZvcmUgaW5zdHJ1Y3Rpb24gKi8KJiM0MzsJdTMyIG91dDsJLyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovCiB9OwogCiAvKiBCaXRtYXNrIHdpdGggMXMgZm9yIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFMTF9DQUxMRVJfU0FWRURfUkVHUyAoKDF1ICZsdDsmbHQ7IENBTExFUl9TQVZFRF9SRUdTKSAtIDEpCiAKJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiAmIzQzOyAxNik7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUzMiBtYXNrX3dpZGVuKHUzMiBtKSB7IHJldHVybiBtIHwgKG0gJmx0OyZsdDsgMTYpOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSAmZ3Q7Jmd0OyAxNik7IH0KJiM0MzsKIC8qIENvbXB1dGUgaW5mby0mZ3Q7e3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovCiBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCSAgIHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqaW5mbykKIHsKIAlzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSBjczsKLQl1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKTsKLQl1OCBjb2RlID0gQlBGX09QKGluc24tJmd0O2NvZGUpOwotCXU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLSZndDtjb2RlKTsKLQl1MTYgc3JjID0gQklUKGluc24tJmd0O3NyY19yZWcpOwotCXUxNiBkc3QgPSBCSVQoaW5zbi0mZ3Q7ZHN0X3JlZyk7Ci0JdTE2IHIwICA9IEJJVCgwKTsKLQl1MTYgZGVmID0gMDsKLQl1MTYgdXNlID0gMHhmZmZmOwomIzQzOwljb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKTsKJiM0MzsJY29uc3QgdTggY29kZSA9IEJQRl9PUChpbnNuLSZndDtjb2RlKTsKJiM0MzsJY29uc3QgdTggbW9kZSA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpOwomIzQzOwljb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWNvbnN0IHUzMiBzcmMgPSByZWc2NF9tYXNrKGluc24tJmd0O3NyY19yZWcpOwomIzQzOwljb25zdCB1MzIgZHN0ID0gcmVnNjRfbWFzayhpbnNuLSZndDtkc3RfcmVnKTsKJiM0MzsJY29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpOwomIzQzOwljb25zdCB1MzIgZHN0MzIgPSBtYXNrX2xvKGRzdCk7CiYjNDM7CWNvbnN0IHUzMiByMCAgPSByZWc2NF9tYXNrKDApOwomIzQzOwl1MzIgZGVmID0gMDsKJiM0MzsJdTMyIHVzZSA9IFUzMl9NQVg7CiAKIAlzd2l0Y2ggKGNsYXNzKSB7CiAJY2FzZSBCUEZfTEQ6CkBAIC0yMDgzLDggJiM0MzsyMDg5LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCXVzZSA9IDA7CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBCUEZfTEQgfCBCUEZfQUJTOgotCQljYXNlIEJQRl9MRCB8IEJQRl9JTkQ6CiYjNDM7CQljYXNlIEJQRl9BQlM6CiYjNDM7CQljYXNlIEJQRl9JTkQ6CiAJCQkvKiBzdGljayB3aXRoIGRlZmF1bHRzICovCiAJCQlicmVhazsKIAkJfQpAQCAtMjA5Miw3ICYjNDM7MjA5OCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJY2FzZSBCUEZfTERYOgogCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBCUEZfTUVNOgomIzQzOwkJCS8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqLwomIzQzOwkJCWRlZiA9IGRzdDsKJiM0MzsJCQl1c2UgPSBzcmM7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgQlBGX01FTVNYOgomIzQzOwkJCS8qCiYjNDM7CQkJICogc2lnbiBleHRlbnNpb24gZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXI7CiYjNDM7CQkJICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuCiYjNDM7CQkJICovCiAJCQlkZWYgPSBkc3Q7CiAJCQl1c2UgPSBzcmM7CiAJCQlicmVhazsKQEAgLTIxMTAsMTIgJiM0MzsyMTI0LDE5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgQlBGX01FTToKIAkJCWRlZiA9IDA7Ci0JCQl1c2UgPSBkc3QgfCBzcmM7CiYjNDM7CQkJdXNlID0gZHN0IHwgKHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FUT01JQzoKJiM0MzsJCWNhc2UgQlBGX0FUT01JQzogewomIzQzOwkJCS8qCiYjNDM7CQkJICogZHN0IGhvbGRzIGEgcG9pbnRlciBhbmQgaXMgYWx3YXlzIHVzZWQgYXMgNjQtYml0OwomIzQzOwkJCSAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuCiYjNDM7CQkJICovCiYjNDM7CQkJdTMyIHNyY3YgPSBzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyOwomIzQzOwkJCXUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApOwomIzQzOwogCQkJc3dpdGNoIChpbnNuLSZndDtpbW0pIHsKIAkJCWNhc2UgQlBGX0NNUFhDSEc6Ci0JCQkJdXNlID0gcjAgfCBkc3QgfCBzcmM7CiYjNDM7CQkJCXVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7CiAJCQkJZGVmID0gcjA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEJQRl9MT0FEX0FDUToKQEAgLTIxMjQsMTAgJiM0MzsyMTQ1LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQlicmVhazsKIAkJCWNhc2UgQlBGX1NUT1JFX1JFTDoKIAkJCQlkZWYgPSAwOwotCQkJCXVzZSA9IGRzdCB8IHNyYzsKJiM0MzsJCQkJdXNlID0gZHN0IHwgc3JjdjsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSBkc3QgfCBzcmN2OwogCQkJCWlmIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKQogCQkJCQlkZWYgPSBzcmM7CiAJCQkJZWxzZQpAQCAtMjEzNSw2ICYjNDM7MjE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiYjNDM7CQl9CiAJCWJyZWFrOwogCWNhc2UgQlBGX0FMVToKIAljYXNlIEJQRl9BTFU2NDoKQEAgLTIxNDgsMTQgJiM0MzsyMTcwLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCWlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9LKQogCQkJCXVzZSA9IDA7CiAJCQllbHNlCi0JCQkJdXNlID0gc3JjOwomIzQzOwkJCQl1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBzcmMgOiBzcmMzMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGVmID0gZHN0OwogCQkJaWYgKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0spCi0JCQkJdXNlID0gZHN0OwomIzQzOwkJCQl1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBkc3QgOiBkc3QzMjsKIAkJCWVsc2UKLQkJCQl1c2UgPSBkc3QgfCBzcmM7CiYjNDM7CQkJCXVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IChkc3QgfCBzcmMpIDogKGRzdDMyIHwgc3JjMzIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlBGX0pNUDoKQEAgLTIxODEsMTMgJiM0MzsyMjAzLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCXVzZSA9IGRlZiAmYW1wOyB+QklUKEJQRl9SRUdfMCk7CiAJCQlpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCAmYW1wO2NzKSkKIAkJCQl1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTsKJiM0MzsJCQlkZWYgPSBtYXNrX3dpZGVuKGRlZik7CiYjNDM7CQkJdXNlID0gbWFza193aWRlbih1c2UpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkZWYgPSAwOwotCQkJaWYgKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0spCi0JCQkJdXNlID0gZHN0OwotCQkJZWxzZQotCQkJCXVzZSA9IGRzdCB8IHNyYzsKJiM0MzsJCQl1c2UgPSBjbGFzcyA9PSBCUEZfSk1QID8gZHN0IDogZHN0MzI7CiYjNDM7CQkJaWYgKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1gpCiYjNDM7CQkJCXVzZSB8PSBjbGFzcyA9PSBCUEZfSk1QID8gc3JjIDogc3JjMzI7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMjIwOSw2ICYjNDM7MjIzMiw3IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlOwogCWludCBpbnNuX2NudCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwomIzQzOwl1NjQgcG9zLCBpbnNuX3BvczsKIAlpbnQgZXJyID0gMCwgaSwgajsKIAlib29sIGNoYW5nZWQ7CiAKQEAgLTIyNTIsOCAmIzQzOzIyNzYsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWludCBpbnNuX2lkeCA9IGVudi0mZ3Q7Y2ZnLmluc25fcG9zdG9yZGVyW2ldOwogCQkJc3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gJmFtcDtzdGF0ZVtpbnNuX2lkeF07CiAJCQlzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYzsKLQkJCXUxNiBuZXdfb3V0ID0gMDsKLQkJCXUxNiBuZXdfaW4gPSAwOwomIzQzOwkJCXUzMiBuZXdfb3V0ID0gMDsKJiM0MzsJCQl1MzIgbmV3X2luID0gMDsKIAogCQkJc3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7CiAJCQlmb3IgKGludCBzID0gMDsgcyAmbHQ7IHN1Y2MtJmd0O2NudDsgJiM0MzsmIzQzO3MpCkBAIC0yMjY3LDggJiM0MzsyMjkxLDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyAmIzQzOyYjNDM7aSkKLQkJaW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5zbl9jbnQ7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlpbnQgZGVmMzIgPSBicGZfaW5zbl9kZWYzMigmYW1wO2luc25zW2ldKTsKJiM0MzsJCXUzMiBvdXQgPSBzdGF0ZVtpXS5vdXQ7CiYjNDM7CQl1MzIgaW4gPSBzdGF0ZVtpXS5pbjsKJiM0MzsKJiM0MzsJCWluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlcwomIzQzOwkJICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb24KJiM0MzsJCSAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZQomIzQzOwkJICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJaW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiAmZ3Q7PSAwICZhbXA7JmFtcDsgKG1hc2tfaGkob3V0KSAmYW1wOyBCSVQoZGVmMzIpKTsKJiM0MzsJfQogCiAJaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwyKSB7CiAJCXZlcmJvc2UoZW52LCAmIzM0O0xpdmUgcmVncyBiZWZvcmUgaW5zbjpcbiYjMzQ7KTsKQEAgLTIyODQsNyAmIzQzOzIzMjAsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJZWxzZQogCQkJCQl2ZXJib3NlKGVudiwgJiMzNDsuJiMzNDspOwogCQkJdmVyYm9zZShlbnYsICYjMzQ7ICYjMzQ7KTsKJiM0MzsJCQlwb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaV0pOwomIzQzOwkJCWluc25fcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKJiM0MzsJCQlpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpCiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyUqYzsgemV4dCYjMzQ7LCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAmIzM5OyAmIzM5Oyk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQlpZiAoYnBmX2lzX2xkaW1tNjQoJmFtcDtpbnNuc1tpXSkpCiAJCQkJaSYjNDM7JiM0Mzs7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNmYzNWY0ZTcxNWI2Li40NWQ0YzBhMDBhNWRiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMTI5LDEyICYjNDM7MjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovCiB2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewotCXMzMiBzdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwotCiAJbWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTsKIAlyZWctJmd0O3R5cGUgPSBTQ0FMQVJfVkFMVUU7CiAJcmVnLSZndDt2YXJfb2ZmID0gdG51bV91bmtub3duOwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7CiAJX19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTsKIH0KIApAQCAtMjIxMCw3ICYjNDM7MjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogfQogCi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHCSgwKQogc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpCiB7CkBAIC0yMjE5LDcgJiM0MzsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHsKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW2ldKTsKLQkJcmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJfQogCiAJLyogZnJhbWUgcG9pbnRlciAqLwpAQCAtMzAzMiwxMjAgJiM0MzszMDI3LDE0IEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCW1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkgLSBpKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvbgotICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcwotICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgotICovCi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sCi0JICAgICAgdTMyIHJlZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdCkKLXsKLQl1OCBjb2RlLCBjbGFzcywgb3A7Ci0KLQljb2RlID0gaW5zbi0mZ3Q7Y29kZTsKLQljbGFzcyA9IEJQRl9DTEFTUyhjb2RlKTsKLQlvcCA9IEJQRl9PUChjb2RlKTsKLQlpZiAoY2xhc3MgPT0gQlBGX0pNUCkgewotCQkvKiBCUEZfRVhJVCBmb3IgJiMzNDttYWluJiMzNDsgd2lsbCByZWFjaCBoZXJlLiBSZXR1cm4gVFJVRQotCQkgKiBjb25zZXJ2YXRpdmVseS4KLQkJICovCi0JCWlmIChvcCA9PSBCUEZfRVhJVCkKLQkJCXJldHVybiB0cnVlOwotCQlpZiAob3AgPT0gQlBGX0NBTEwpIHsKLQkJCS8qIEJQRiB0byBCUEYgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBtYXJraW5nCi0JCQkgKiBjYWxsZXIgc2F2ZWQgY2xvYmJlciB3aXRoIERTVF9PUF9OT19NQVJLIGZvciB3aGljaCB3ZQotCQkJICogZG9uJiMzOTt0IGNhcmUgdGhlIHJlZ2lzdGVyIGRlZiBiZWNhdXNlIHRoZXkgYXJlIGFueXdheQotCQkJICogbWFya2VkIGFzIE5PVF9JTklUIGFscmVhZHkuCi0JCQkgKi8KLQkJCWlmIChpbnNuLSZndDtzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZQotCQkJICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLgotCQkJICovCi0JCQlpZiAodCA9PSBTUkNfT1ApCi0JCQkJcmV0dXJuIHRydWU7Ci0KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCWlmIChjbGFzcyA9PSBCUEZfQUxVNjQgJmFtcDsmYW1wOyBvcCA9PSBCUEZfRU5EICZhbXA7JmFtcDsgKGluc24tJmd0O2ltbSA9PSAxNiB8fCBpbnNuLSZndDtpbW0gPT0gMzIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IHx8IGNsYXNzID09IEJQRl9KTVAgfHwKLQkgICAgKGNsYXNzID09IEJQRl9BTFUgJmFtcDsmYW1wOyBvcCA9PSBCUEZfRU5EICZhbXA7JmFtcDsgaW5zbi0mZ3Q7aW1tID09IDY0KSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX0FMVSB8fCBjbGFzcyA9PSBCUEZfSk1QMzIpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChjbGFzcyA9PSBCUEZfTERYKSB7Ci0JCWlmICh0ICE9IFNSQ19PUCkKLQkJCXJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYOwotCQkvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqLwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX1NUWCkgewotCQkvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlCi0JCSAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpcwotCQkgKiBhc2tpbmcgYWJvdXQgaXQuCi0JCSAqLwotCQlpZiAodCA9PSBTUkNfT1AgJmFtcDsmYW1wOyByZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFKQotCQkJcmV0dXJuIHRydWU7Ci0JCXJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7Ci0JfQotCi0JaWYgKGNsYXNzID09IEJQRl9MRCkgewotCQl1OCBtb2RlID0gQlBGX01PREUoY29kZSk7Ci0KLQkJLyogTERfSU1NNjQgKi8KLQkJaWYgKG1vZGUgPT0gQlBGX0lNTSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qIEJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqLwotCQlpZiAodCAhPSBTUkNfT1ApCi0JCQlyZXR1cm4gIGZhbHNlOwotCi0JCS8qIEltcGxpY2l0IGN0eCBwdHIuICovCi0JCWlmIChyZWdubyA9PSBCUEZfUkVHXzYpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQkvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqLwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX1NUKQotCQkvKiBUaGUgb25seSBzb3VyY2UgcmVnaXN0ZXIgZm9yIEJQRl9TVCBpcyBhIHB0ci4gKi8KLQkJcmV0dXJuIHRydWU7Ci0KLQkvKiBDb25zZXJ2YXRpdmVseSByZXR1cm4gdHJ1ZSBhdCBkZWZhdWx0LiAqLwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKLXsKLQlzMzIgZGVmX2lkeCA9IHJlZy0mZ3Q7c3VicmVnX2RlZjsKLQotCWlmIChkZWZfaWR4ID09IERFRl9OT1RfU1VCUkVHKQotCQlyZXR1cm47Ci0KLQllbnYtJmd0O2luc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTsKLQkvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJiMzOTt0IGJlIHN1Yi1yZWdpc3RlciBhbnltb3JlLiAqLwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwotfQotCiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLAogCQkJICAgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpCiB7Ci0Jc3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2kgJiM0MzsgZW52LSZndDtpbnNuX2lkeDsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWJvb2wgcnc2NDsKIAogCW1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTsKIAogCXJlZyA9ICZhbXA7cmVnc1tyZWdub107Ci0Jcnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTsKIAlpZiAodCA9PSBTUkNfT1ApIHsKIAkJLyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovCiAJCWlmIChyZWctJmd0O3R5cGUgPT0gTk9UX0lOSVQpIHsKQEAgLTMxNTYsOSAmIzQzOzMwNDUsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQlpZiAocmVnbm8gPT0gQlBGX1JFR19GUCkKIAkJCXJldHVybiAwOwogCi0JCWlmIChydzY0KQotCQkJbWFya19pbnNuX3pleHQoZW52LCByZWcpOwotCiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgcmVnaXN0ZXIgdXNlZCBhcyBkZXN0IG9wZXJhbmQgY2FuIGJlIHdyaXR0ZW4gdG8gKi8KQEAgLTMxNjYsNyAmIzQzOzMwNTIsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQkJdmVyYm9zZShlbnYsICYjMzQ7ZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9Ci0JCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJaWYgKHQgPT0gRFNUX09QKQogCQkJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTsKIAl9CkBAIC0zODIyLDExICYjNDM7MzcwNyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQkJaWYgKHNpemUgJmx0Oz0gc3BpbGxfc2l6ZSAmYW1wOyZhbXA7CiAJCQkgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkgewotCQkJCS8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGUKLQkJCQkgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LgotCQkJCSAqLwotCQkJCXMzMiBzdWJyZWdfZGVmID0gc3RhdGUtJmd0O3JlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmOwotCiAJCQkJaWYgKGVudi0mZ3Q7YnBmX2NhcGFibGUgJmFtcDsmYW1wOyBzaXplID09IDQgJmFtcDsmYW1wOyBzcGlsbF9zaXplID09IDQgJmFtcDsmYW1wOwogCQkJCSAgICBnZXRfcmVnX3dpZHRoKHJlZykgJmx0Oz0gMzIpCiAJCQkJCS8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uCkBAIC0zODM0LDcgJiM0MzszNzE0LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCQkgKi8KIAkJCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTsKIAkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dID0gKnJlZzsKLQkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmOwogCiAJCQkJLyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuCiAJCQkJICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLgpAQCAtNjI3MSwxMiAmIzQzOzYxNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYgogCQkJfSBlbHNlIHsKIAkJCQltYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywKIAkJCQkJCSAgICB2YWx1ZV9yZWdubyk7Ci0JCQkJLyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudAotCQkJCSAqIGFjdHVhbCBsb2FkIHNpemUgd2l0aCB0aGUgb25lIGVuY29kZWQgaW4gdGhlCi0JCQkJICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90Ci0JCQkJICogYSBzdWItcmVnaXN0ZXIuCi0JCQkJICovCi0JCQkJcmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCWlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkgewogCQkJCQlyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjsKIAkJCQkJcmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7CkBAIC03MzgwLDEwICYjNDM7NzI1Myw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0CiAJCQlpZiAoc3BpICZsdDsgMCkKIAkJCQlyZXR1cm4gc3BpOwogCi0JCQkvKgotCQkJICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnCi0JCQkgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLgotCQkJICovCiAJCQltYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7CiAKIAkJCXJlZyA9ICZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHI7CkBAIC05NDYzLDcgJiM0Mzs5MzMyLDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqLwogCQlpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHsKIAkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIEJQRl9SRUdfMCk7Ci0JCQljYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDgyLDkgJiM0MzsxMDM1MCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJfQogCWludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpOwogCi0JLyogaGVscGVyIGNhbGwgcmV0dXJucyA2NC1iaXQgdmFsdWUuICovCi0JcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKLQogCS8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovCiAJcmV0X3R5cGUgPSBmbi0mZ3Q7cmV0X3R5cGU7CiAJcmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpOwpAQCAtMTA3MjIsMzAgJiM0MzsxMDU4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoKSBpcyB1c2VkIHdoZW4gdGhlIHJlZyBzaXplIGlzIGRldGVybWluZWQgYnkKLSAqIHRoZSBCVEYgZnVuY19wcm90byYjMzk7cyByZXR1cm4gdmFsdWUgc2l6ZSBhbmQgYXJndW1lbnQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywKLQkJCQkgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKQotewotCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSAmYW1wO3JlZ3NbcmVnbm9dOwotCi0JaWYgKHJlZ25vID09IEJQRl9SRUdfMCkgewotCQkvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KLQkJcmVnLSZndDtzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgPwotCQkJREVGX05PVF9TVUJSRUcgOiBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7Ci0JfSBlbHNlIGlmIChyZWdfc2l6ZSA9PSBzaXplb2YodTY0KSkgewotCQkvKiBGdW5jdGlvbiBhcmd1bWVudCAqLwotCQltYXJrX2luc25femV4dChlbnYsIHJlZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubywKLQkJCQkgICBzaXplX3QgcmVnX3NpemUpCi17Ci0JcmV0dXJuIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIGN1cl9yZWdzKGVudiksIHJlZ25vLCByZWdfc2l6ZSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewogCXJldHVybiBtZXRhLSZndDtrZnVuY19mbGFncyAmYW1wOyBLRl9BQ1FVSVJFOwpAQCAtMTI5NzQsNyAmIzQzOzEyODE1LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4OwogCWludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7Ci0JY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnczsKIAl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwogCXN0cnVjdCBidGYgKmRlc2NfYnRmOwogCWludCBpZDsKQEAgLTEzMDE4LDcgJiM0MzsxMjg1OCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQl2ZXJib3NlKGVudiwgJiMzNDtmYWlsZWQgdG8gbWFyayBzMzIgcmFuZ2UgZm9yIHJldHZhbCBpbiBmb3JrZWQgc3RhdGUgZm9yIGxvY2tcbiYjMzQ7KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7CiAJfSBlbHNlIGlmICghaW5zbi0mZ3Q7b2ZmICZhbXA7JmFtcDsgaW5zbi0mZ3Q7aW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9fX2JwZl90cmFwXSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cbiYjMzQ7KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzE2OCw3ICYjNDM7MTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQl1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW3JlZ25vXSk7Ci0JCXJlZ3NbcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKIAl9CiAJaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7CiAKQEAgLTEzMTkwLDcgJiM0MzsxMzAyOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7Ci0JCW1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtJmd0O3NpemUpOwogCX0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7CiAJCXB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtJmd0O3R5cGUsICZhbXA7cHRyX3R5cGVfaWQpOwogCQllcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgJmFtcDttZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTsKQEAgLTEzMjgxLDcgJiM0MzsxMzExOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovCiAJCQlyZWdzW0JQRl9SRUdfMF0uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAJCX0KLQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpOwogCQlpZiAoaXNfa2Z1bmNfYWNxdWlyZSgmYW1wO21ldGEpKSB7CiAJCQlpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApOwogCQkJaWYgKGlkICZsdDsgMCkKQEAgLTEzMzE4LDE4ICYjNDM7MTMxNTQsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJY2FsbGVyX2luZm8tJmd0O3N0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250OwogCX0KIAotCWFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLmZ1bmNfcHJvdG8gJiM0MzsgMSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgbmFyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiByZWdubyA9IGkgJiM0MzsgMTsKLQotCQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7Ci0JCWlmIChidGZfdHlwZV9pc19wdHIodCkpCi0JCQltYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTsKLQkJZWxzZQotCQkJLyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqLwotCQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LSZndDtzaXplKTsKLQl9Ci0KIAlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpKSB7CiAJCWVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgJmFtcDttZXRhKTsKIAkJaWYgKGVycikKQEAgLTE0ODIzLDE0ICYjNDM7MTQ2NDcsMTQgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQlpZiAoZHN0X3JlZy0mZ3Q7dHlwZSAhPSBQVFJfVE9fQVJFTkEpCiAJCQkqZHN0X3JlZyA9ICpzcmNfcmVnOwogCi0JCWRzdF9yZWctJmd0O3N1YnJlZ19kZWYgPSBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7Ci0KLQkJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfQUxVNjQpCiYjNDM7CQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9BTFU2NCkgewogCQkJLyoKIAkJCSAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LgogCQkJICogNjQtYml0IG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gMzIuCiAJCQkgKi8KIAkJCWF1eC0mZ3Q7bmVlZHNfemV4dCA9IHRydWU7CiYjNDM7CQkJYXV4LSZndDt6ZXh0X2RzdCA9IHRydWU7CiYjNDM7CQl9CiAKIAkJLyogQW55IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvbiBhcmVuYSBwb2ludGVycyAqLwogCQlyZXR1cm4gMDsKQEAgLTE0OTY5LDYgJiM0MzsxNDc5Myw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIC8qIGNoZWNrIHZhbGlkaXR5IG9mIDMyLWJpdCBhbmQgNjQtYml0IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAqLwogc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogewomIzQzOwlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCA9IGN1cl9hdXgoZW52KTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7CiAJdTggb3Bjb2RlID0gQlBGX09QKGluc24tJmd0O2NvZGUpOwogCWludCBlcnI7CkBAIC0xNTAyNiwxOCAmIzQzOzE0ODUxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQlpZiAoaW5zbi0mZ3Q7aW1tKSB7CiAJCQkJCS8qIG9mZiA9PSBCUEZfQUREUl9TUEFDRV9DQVNUICovCiAJCQkJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLSZndDtkc3RfcmVnKTsKLQkJCQkJaWYgKGluc24tJmd0O2ltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqLwomIzQzOwkJCQkJaWYgKGluc24tJmd0O2ltbSA9PSAxKSAvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCkgKi8KIAkJCQkJCWRzdF9yZWctJmd0O3R5cGUgPSBQVFJfVE9fQVJFTkE7Ci0JCQkJCQkvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovCi0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwotCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChpbnNuLSZndDtvZmYgPT0gMCkgewogCQkJCQkvKiBjYXNlOiBSMSA9IFIyCiAJCQkJCSAqIGNvcHkgcmVnaXN0ZXIgc3RhdGUgdG8gZGVzdCByZWcKIAkJCQkJICovCiAJCQkJCWFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHNyY19yZWcpOwogCQkJCQkqZHN0X3JlZyA9ICpzcmNfcmVnOwotCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi8KIAkJCQkJaWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLSZndDtzcmNfcmVnKSkgewpAQCAtMTUwNTUsNyAmIzQzOzE0ODc2LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQkJaWYgKCFub19zZXh0KQogCQkJCQkJCWNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTsKIAkJCQkJCWNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLSZndDtvZmYgJmd0OyZndDsgMyk7Ci0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCQkJCX0KQEAgLTE1MDgwLDcgJiM0MzsxNDkwMCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQkJCSAqLwogCQkJCQkJaWYgKCFpc19zcmNfcmVnX3UzMikKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7Ci0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCQkJCQl9IGVsc2UgewogCQkJCQkJLyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqLwogCQkJCQkJYm9vbCBub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgJmx0OyAoMVVMTCAmbHQ7Jmx0OyAoaW5zbi0mZ3Q7b2ZmIC0gMSkpOwpAQCAtMTUwOTAsNyAmIzQzOzE0OTA5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKIAkJCQkJCWlmICghbm9fc2V4dCkKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7Ci0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCQkJCQkJY29lcmNlX3N1YnJlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tJmd0O29mZiAmZ3Q7Jmd0OyAzKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CkBAIC0xNTk1OSwxMiAmIzQzOzE1Nzc3LDggQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3MKIAkJCWNvbnRpbnVlOwogCQlpZiAoKCEocmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSAmYW1wOyZhbXA7ICEoa25vd25fcmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSkgfHwKIAkJICAgIHJlZy0mZ3Q7ZGVsdGEgPT0ga25vd25fcmVnLSZndDtkZWx0YSkgewotCQkJczMyIHNhdmVkX3N1YnJlZ19kZWYgPSByZWctJmd0O3N1YnJlZ19kZWY7Ci0KIAkJCSpyZWcgPSAqa25vd25fcmVnOwotCQkJcmVnLSZndDtzdWJyZWdfZGVmID0gc2F2ZWRfc3VicmVnX2RlZjsKIAkJfSBlbHNlIHsKLQkJCXMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwogCQkJczMyIHNhdmVkX29mZiA9IHJlZy0mZ3Q7ZGVsdGE7CiAJCQl1MzIgc2F2ZWRfaWQgPSByZWctJmd0O2lkOwogCkBAIC0xNTk3NCwxMiAmIzQzOzE1Nzg4LDExIEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zCiAJCQkvKiByZWcgPSBrbm93bl9yZWc7IHJlZyAmIzQzOz0gZGVsdGEgKi8KIAkJCSpyZWcgPSAqa25vd25fcmVnOwogCQkJLyoKLQkJCSAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgc3VicmVnX2RlZiBmbGFnLAotCQkJICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LgomIzQzOwkJCSAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpCiYjNDM7CQkJICogd2lsbCBiZSBpbmNvcnJlY3QuCiAJCQkgKi8KIAkJCXJlZy0mZ3Q7ZGVsdGEgPSBzYXZlZF9vZmY7CiAJCQlyZWctJmd0O2lkID0gc2F2ZWRfaWQ7Ci0JCQlyZWctJmd0O3N1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmOwogCiAJCQlzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsICZhbXA7ZmFrZV9yZWcpOwogCQkJc2NhbGFyX21pbl9tYXhfYWRkKHJlZywgJmFtcDtmYWtlX3JlZyk7CkBAIC0xNjQxNCw4ICYjNDM7MTYyMjcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJICogQWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZS4KIAkgKi8KIAltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTsKLQkvKiBsZF9hYnMgbG9hZCB1cCB0byAzMi1iaXQgc2tiIGRhdGEuICovCi0JcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7CiAJLyoKIAkgKiBTZWUgYnBmX2dlbl9sZF9hYnMoKSB3aGljaCBlbWl0cyBhIGhpZGRlbiBCUEZfRVhJVCB3aXRoIHIwPTAKIAkgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy4KQEAgLTE2NzMwLDcgJiM0MzsxNjU0MSw2IEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLAogCWludCBpOwogCiAJaWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkgewotCiAJCWlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtJmd0O2ltbSwgJmFtcDtmbikgJmx0OyAwKQogCQkJLyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi8KIAkJCXJldHVybiBmYWxzZTsKQEAgLTE3NDc1LDYgJiM0MzsxNzI4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWVudi0mZ3Q7cHJldl9sb2dfcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKIAkJCXZlcmJvc2UoZW52LCAmIzM0OyVkOiAmIzM0OywgZW52LSZndDtpbnNuX2lkeCk7CiAJCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQllbnYtJmd0O3ByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gZW52LSZndDtwcmV2X2xvZ19wb3M7CiAJCQllbnYtJmd0O3ByZXZfbG9nX3BvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3M7CiAJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYwppbmRleCA1ZTdjYjhiMzZmZWYyLi41NTc5MTczYTYxZTNiIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jCkBAIC0xMDcsMTQgJiM0MzsxMDcsNyBAQCBwcmludF9pbnNuX2Zvcl9ncmFwaCh2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCiAJcCA9IGJ1ZjsKIAl3aGlsZSAoKnAgIT0gJiMzOTtcMCYjMzk7KSB7Ci0JCWlmICgqcCA9PSAmIzM5O1xuJiMzOTspIHsKLQkJCW1lbW1vdmUocCAmIzQzOyAzLCBwLCBzdHJsZW4oYnVmKSAmIzQzOyAxIC0gKHAgLSBidWYpKTsKLQkJCS8qIEFsaWduIGVhY2ggaW5zdHJ1Y3Rpb24gZHVtcCByb3cgbGVmdC4gKi8KLQkJCSpwJiM0MzsmIzQzOyA9ICYjMzk7XFwmIzM5OzsKLQkJCSpwJiM0MzsmIzQzOyA9ICYjMzk7bCYjMzk7OwotCQkJLyogT3V0cHV0IG11bHRpbGluZSBjb25jYXRlbmF0aW9uLiAqLwotCQkJKnAmIzQzOyYjNDM7ID0gJiMzOTtcXCYjMzk7OwotCQl9IGVsc2UgaWYgKCpwID09ICYjMzk7Jmx0OyYjMzk7IHx8ICpwID09ICYjMzk7Jmd0OyYjMzk7IHx8ICpwID09ICYjMzk7fCYjMzk7IHx8ICpwID09ICYjMzk7JmFtcDsmIzM5OykgewomIzQzOwkJaWYgKCpwID09ICYjMzk7Jmx0OyYjMzk7IHx8ICpwID09ICYjMzk7Jmd0OyYjMzk7IHx8ICpwID09ICYjMzk7fCYjMzk7IHx8ICpwID09ICYjMzk7JmFtcDsmIzM5OykgewogCQkJbWVtbW92ZShwICYjNDM7IDEsIHAsIHN0cmxlbihidWYpICYjNDM7IDEgLSAocCAtIGJ1ZikpOwogCQkJLyogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyLiAqLwogCQkJKnAmIzQzOyYjNDM7ID0gJiMzOTtcXCYjMzk7OwpAQCAtMTI5LDE2ICYjNDM7MTIyLDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiBzdGF0aWMgdm9pZCBfX3ByaW50ZigyLCAzKQogcHJpbnRfaW5zbl9qc29uKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JdW5zaWduZWQgaW50IGwgPSBzdHJsZW4oZm10KTsKLQljaGFyIGNob21wZWRfZm10W2xdOwogCXZhX2xpc3QgYXJnczsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JaWYgKGwgJmd0OyAwKSB7Ci0JCXN0cm5jcHkoY2hvbXBlZF9mbXQsIGZtdCwgbCAtIDEpOwotCQljaG9tcGVkX2ZtdFtsIC0gMV0gPSAmIzM5O1wwJiMzOTs7Ci0JfQotCWpzb253X3ZwcmludGZfZW5xdW90ZShqc29uX3d0ciwgY2hvbXBlZF9mbXQsIGFyZ3MpOwomIzQzOwlqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogfQogCkBAIC0zNTEsNiAmIzQzOzMzOCw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKIAogCQlwcmludGYoJiMzNDslNHU6ICYjMzQ7LCBpKTsKIAkJcHJpbnRfYnBmX2luc24oJmFtcDtjYnMsIGluc24gJiM0MzsgaSwgdHJ1ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcbiYjMzQ7KTsKIAogCQlpZiAob3Bjb2RlcykgewogCQkJcHJpbnRmKCYjMzQ7ICAgICAgICYjMzQ7KTsKQEAgLTQxNyw2ICYjNDM7NDA1LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9mb3JfZ3JhcGgoc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1Zl9zdGFydCwgdm9pZCAqYnVmX2VuZCwKIAogCQlwcmludGYoJiMzNDsldTogJiMzNDssIGluc25fb2ZmKTsKIAkJcHJpbnRfYnBmX2luc24oJmFtcDtjYnMsIGN1ciwgdHJ1ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcXGxcXFxuJiMzNDspOwogCiAJCWlmIChvcGNvZGVzKSB7CiAJCQlwcmludGYoJiMzNDtcXCBcXCBcXCBcXCAmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jCmluZGV4IGY1MjlmMWM4YzE3MWQuLjMwMjIxMzUyNTY4ZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jCkBAIC01NSwxMCAmIzQzOzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeikKIAkgKiBmb3IgZWFjaCBpbnN0cnVjdGlvbiAoRkYgc3RhbmRzIGZvciBpbnN0cnVjdGlvbiBgY29kZWAgYnl0ZSkuCiAJICogUmVtb3ZlIHRoZSBwcmVmaXggaW5wbGFjZSwgYW5kIGFsc28gc2ltcGxpZnkgY2FsbCBpbnN0cnVjdGlvbnMuCiAJICogRS5nLjogJiMzNDsoODUpIGNhbGwgZm9vIzEwJiMzNDsgLSZndDsgJiMzNDtjYWxsIGZvbyYjMzQ7LgotCSAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICYjMzk7bWF4KHN0cmxlbihidWYpIC0gMSwgMCkmIzM5OyB0aGluZykuCiAJICovCiAJcGZ4X2VuZCA9IGJ1ZiAmIzQzOyA1OwotCXNmeF9zdGFydCA9IGJ1ZiAmIzQzOyBtYXgoKGludClzdHJsZW4oYnVmKSAtIDEsIDApOwomIzQzOwlzZnhfc3RhcnQgPSBidWYgJiM0MzsgKGludClzdHJsZW4oYnVmKTsKIAlpZiAoc3RybmNtcChwZnhfZW5kLCAmIzM0O2NhbGwgJiMzNDssIDUpID09IDAgJmFtcDsmYW1wOyAodG1wID0gc3RycmNocihidWYsICYjMzk7IyYjMzk7KSkpCiAJCXNmeF9zdGFydCA9IHRtcDsKIAlsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKaW5kZXggYmU5N2Y2ODg3ZjBlNy4uZmJhNTYyYzgxOTY5MSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCkBAIC0xMjQsNiAmIzQzOzEyNCw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aXJxLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3pleHQuc2tlbC5oJiMzNDsKIAogI2RlZmluZSBNQVhfRU5UUklFUyAxMQogCkBAIC0yNzcsNiAmIzQzOzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZCkJCQkgICAgICB7IFJVTihpcnEpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbXR1KHZvaWQpCQkgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfaml0X2lubGluZSh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2ppdF9pbmxpbmUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfQogCiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMmRkM2VhNjYxYjc3OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMKQEAgLTAsMCAmIzQzOzEsMzg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9jb3JlX3JlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztleHRlcm4gbG9uZyBicGZfa2Z1bmNfY2FsbF90ZXN0NChzaWduZWQgY2hhciBhLCBzaG9ydCBiLCBpbnQgYywgbG9uZyBkKSBfX2tzeW07CiYjNDM7CiYjNDM7LyogdG8gcmV0YWluIGRlYnVnIGluZm8gZm9yIEJURiBnZW5lcmF0aW9uICovCiYjNDM7dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTsKJiM0MzsJYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKDAsIDAsIDAsIDAsIDApOwomIzQzOwlicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfUk5EX0hJMzIpCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbG9zdF9hY3Jvc3NfY2hlY2twb2ludCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9rdGltZV9nZXRfbnNdOwkJCQkJCQlcCiYjNDM7CXI4ID0gcjA7CQkJCQkJCQkJXAomIzQzOwlyNiA9IDB4ZGVhZGJlZWZjYWZlYmFiZSBsbDsJLyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2JiMzOTtzIHVwcGVyIGhhbGYgKi8JXAomIzQzOwlpZiByOCAhPSAwIGdvdG8gMWY7CQkvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovCVwKJiM0MzsJcjYgPSAzMjsJCQkvKiBmdWxsIDY0LWJpdCBkZWYgKi8JCQkJXAomIzQzOwlnb3RvIDJmOwkJCQkJCQkJCVwKJiM0MzsxOgl3NiA9IDMyOwkJCS8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovCQlcCiYjNDM7MjoJcjAgPSByNjsJCQkvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFwKJiM0MzsJCQkJCS8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqLwlcCiYjNDM7CXIwICZndDsmZ3Q7PSAzMjsJCQkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2t0aW1lX2dldF9ucykKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzEgPSB3MHt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXcxID0gdzA7CQkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIG9ubHkgYXMgMzItYml0IC0mZ3Q7IG5vIHpleHQgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX25vdF9tc2coJiMzNDs7IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgbm9femV4dF9hbHUzMl9oaV91bnVzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCS8qIE1PViAqLwkJXAomIzQzOwl3MiA9IHcxOwkJCQkJXAomIzQzOwl3MiAmIzQzOz0gdzE7CQkvKiBBTFUzMiwgQlBGX1ggKi8JXAomIzQzOwl3MiAmIzQzOz0gMTsJCS8qIEFMVTMyLCBCUEZfSyAqLwlcCiYjNDM7CXcyID0gdzI7CQkvKiBrZWVwIHcyIGFsaXZlIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbiAqLyBcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7cjEgPSByMHt7Lip9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBub196ZXh0X21vdjY0KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMDsJCQkJXAomIzQzOwlyMSA9ICoodTMyICopKHIxMCAtIDgpOwkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogMzItYml0IGF0b21pYyBmZXRjaCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtmZXRjaF9hZGQzMl07CQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsCiYjNDM7CQkgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyAmIzQzO319OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MCA9IDA7CQkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtjbXB4Y2hnMzJdOwkJCQlcCiYjNDM7CXIyID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9pbnNuKGNtcHhjaGczMiwKJiM0MzsJCSAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0NNUFhDSEcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzYgPSAzMnt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXc2ID0gMzI7CQkJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsxOglyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcjEmIzM5O3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAmIzM5O3cxID0gMSYjMzk7IG11c3QgTk9UIGJlIG1hcmtlZCBmb3IgemVybyBleHRlbnNpb24uICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7dzEgPSAxe3suKn19OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCVwKJiM0MzsJcjYgJmx0OyZsdDs9IDMyOwkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNiA9IHIxOwkJCQkJXAomIzQzOwlyMCA9ICoodTggKilza2JbMF07CQkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJcjAgPSByNzsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O3cyID0gMXt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSByMTA7CQkJCQlcCiYjNDM7CXIxICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJdzIgPSAxOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl90cmFjZV9wcmludGtdOwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl90cmFjZV9wcmludGspCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJY2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDsJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIGtmdW5jIHBhcmFtZXRlcnMgYXJlIHplcm8gZXh0ZW5kZWQgKi8KJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzEgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dzIgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dzMgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dzQgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBrZnVuY19wYXJhbV9yZWFkX3Blcl9idGYodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJdzEgPSAxOwkJCQkJCVwKJiM0MzsJdzIgPSAxOwkJCQkJCVwKJiM0MzsJdzMgPSAxOwkJCQkJCVwKJiM0MzsJdzQgPSAxOwkJCQkJCVwKJiM0MzsJY2FsbCBicGZfa2Z1bmNfY2FsbF90ZXN0NDsJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGFsdTMyX2FuZF8zMmJpdF9jb25kaXRpb25hbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwl3MSA9IHcwOwkJCQkJXAomIzQzOwlpZiB3MSAmZ3Q7IDQyIGdvdG8gMWY7CQkvKiBCUEZfSyAqLwlcCiYjNDM7CXcyID0gMjg7CQkJCQlcCiYjNDM7CWlmIHcyICZndDsgdzEgZ290byAxZjsJCS8qIEJQRl9YICovCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsxOglleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBhbHUzMl9hbmRfNjRiaXRfY29uZGl0aW9uYWwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJaWYgcjEgJmd0OyA0MiBnb3RvIDFmOwkJLyogQlBGX0sgKi8JXAomIzQzOwlyMiA9IDI4OwkJCQkJXAomIzQzOwlpZiByMiAmZ3Q7IHIxIGdvdG8gMWY7CQkvKiBCUEZfWCAqLwlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7MToJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbm90X21zZygmIzM0OzsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBhbHU2NF9hbmRfY29uZGl0aW9uYWxzKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CWlmIHcxICZndDsgNDIgZ290byAxZjsJCS8qIEJQRl9LICovCVwKJiM0MzsJaWYgcjEgJmd0OyA0MiBnb3RvIDFmOwkJLyogQlBGX0sgKi8JXAomIzQzOwlyMiA9IDI4OwkJCQkJXAomIzQzOwlpZiB3MiAmZ3Q7IHcxIGdvdG8gMWY7CQkvKiBCUEZfWCAqLwlcCiYjNDM7CWlmIHIyICZndDsgcjEgZ290byAxZjsJCS8qIEJQRl9YICovCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsxOglleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUCiYjNDM7CiYjNDM7U0VDKCYjMzQ7P2ZlbnRyeS5zLyYjMzQ7IFNZU19QUkVGSVggJiMzNDtzeXNfZ2V0cGdpZCYjMzQ7KQomIzQzO19fYXJjaF9zMzkweAomIzQzO19feGxhdGVkKCYjMzQ7NzogdzEgPSB3MCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7ODogdzEgPSB3MSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7OTogdzEgJiM0Mzs9IDgmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OzEwOiB3MSA9IHcxJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGFyZW5hX3B0cih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMSA9ICVbYXJlbmFdIGxsOwkJCQlcCiYjNDM7CXIyID0gMDsJCQkJCQlcCiYjNDM7CXIzID0gMTsJCQkJCQlcCiYjNDM7CXI0ID0gMDsJCQkJCQlcCiYjNDM7CXI1ID0gMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdOwkJCVwKJiM0MzsJcjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpOwkvKiBuZWVkcyB6ZXh0ICovXAomIzQzOwlyMSAmIzQzOz0gODsJCQkvKiBuZWVkcyB6ZXh0ICovXAomIzQzOwkqKHU2NCAqKShyMSAmIzQzOzApID0gNDI7CQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9hcmVuYV9hbGxvY19wYWdlcyksCiYjNDM7CSAgX19pbW1fYWRkcihhcmVuYSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyogQ2hlY2sgaWYgcHJvYmUgbWVtIGxvYWRzIGtlZXAgdGhlaXIgemVybyBleHRlbnNpb24uICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19hcmNoX3MzOTB4CiYjNDM7X194bGF0ZWQoJiMzNDszOiByMSA9ICoodTY0ICopKHIwICYjNDM7MCkmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OzQ6IHIyID0gKih1MzIgKikocjAgJiM0MzswKSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7NTogdzIgPSB3MiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7NjogcjMgPSAqKHUxNiAqKShyMCAmIzQzOzApJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDs3OiB3MyA9IHczJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDs4OiByNCA9ICoodTggKikocjAgJiM0MzswKSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7OTogdzQgPSB3NCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwcm9iZV9tZW0odm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJcjIgPSAwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9yZG9ubHlfY2FzdF07CQkJXAomIzQzOwlyMSA9ICoodTY0ICopKHIwICYjNDM7IDApOwkvKiBCUEZfUFJPQkVfTUVNICovCVwKJiM0MzsJcjIgPSAqKHUzMiAqKShyMCAmIzQzOyAwKTsJLyogQlBGX1BST0JFX01FTSAqLwlcCiYjNDM7CXIzID0gKih1MTYgKikocjAgJiM0MzsgMCk7CS8qIEJQRl9QUk9CRV9NRU0gKi8JXAomIzQzOwlyNCA9ICoodTggKikocjAgJiM0MzsgMCk7CS8qIEJQRl9QUk9CRV9NRU0gKi8JXAomIzQzOwlyMCA9IHIxOwkJLyogbWFrZSB0aGUgcmVnaXN0ZXJzIHVzZWQgKi8gXAomIzQzOwlyMCAmIzQzOz0gcjI7CQkJCQlcCiYjNDM7CXIwICYjNDM7PSByMzsJCQkJCVwKJiM0MzsJcjAgJiM0Mzs9IHI0OwkJCQkJXAomIzQzOzE6CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfcmRvbmx5X2Nhc3QpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5ODgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBzZXJpZXMgdGhhdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYW5kIHRyYWNrcyAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucywgb3IgYHpleHRgLiBUaGV5JiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHN0b3JpbmcgYHN1YnJlZ19kZWZgIHdpdGhpbiB0aGUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdC4gSW5zdGVhZCwgdGhleSYjMzk7cmUgY2FsY3VsYXRpbmcgYHpleHRfZHN0YCBkeW5hbWljYWxseSB1c2luZyBsaXZlbmVzcyBhbmFseXNpcyB0aHJvdWdoIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3Vic3RhbnRpYWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UuIEkgY2FuIHNlZSB0aGlzIGltcGFjdGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSB2ZXJpZmllZCwgYW5kIHN1YnNlcXVlbnRseSwgaG93IHRoZXkmIzM5O3JlIEpJVGVkLCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG9uJiMzOTt0IGF1dG9tYXRpY2FsbHkgemVyby1leHRlbmQgdG8gNjQtYml0OyBhcmNoaXRlY3R1cmVzIGxpa2UgczM5MHguCgpJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuIEkgc2VlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIHRoZXkmIzM5O3ZlIG1vdmVkIGFuZCBtb2RpZmllZCBgYnBmX2lzX3JlZzY0YC4gQ3J1Y2lhbGx5LCBib3RoIGBjb21wdXRlX2luc25fbGl2ZV9yZWdzYCBhbmQgYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCB3aXRoaW4gYGtlcm5lbC9icGYvbGl2ZW5lc3MuY2AgaGF2ZSBiZWVuIG1vZGlmaWVkLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgYXNwZWN0LiAgVGhleSYjMzk7dmUgYWxzbyB0b3VjaGVkIGBjaGVja19hbHVfb3BgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19tZW1fYWNjZXNzYCwgYW5kIGBzeW5jX2xpbmtlZF9yZWdzYCB3aXRoaW4gdGhlIHZlcmlmaWVyIGl0c2VsZiAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApLiBUaGlzIGNoYW5nZSBsaXN0IGdpdmVzIG1lIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhpcyBpcyBxdWl0ZSBhIGNvbXBsZXggY2hhbmdlIHRoYXQgaXMgbGlrZWx5IHRvIGJlIGV4cG9zZWQgdG8gZnV6aW5nIGF0dGFja3MuCgpUaGlzIGhhcyBmdXp6aW5nIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIEdpdmVuIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZXMgdG8gdGhlIGNvcmUgdmVyaWZpZXIgbG9naWMsIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gVGhlIGZ1bmN0aW9ucyBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbiBmdXp6aW5nIGFyZSBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgLCBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AsIGFuZCBgYnBmX2luc25fZGVmMzJgLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGJwZl9pc19yZWc2NGAuIEFoLCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3Mgc3RhdGljIG5vdyB3aXRoaW4gYGZpeHVwcy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gYGJwZl9pbnNuX2RlZjMyYCBpcyAqbm90KiBzdGF0aWMsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gRnJvbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllcjsgdGhhdCYjMzk7cyBgYnBmX2NoZWNrYC4gYGJwZl9pbnNuX2RlZjMyYCBhbmQgYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCBhcmUgZGVmaW5pdGVseSBteSBmb2N1cy4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIGNvcnJlY3QuIEkgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRpbWUgdG8gdXNlIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZ2V0IHRoZSBmdW5jdGlvbiBuYW1lcyBleGFjdGx5IHJpZ2h0LiBUaGlzIHdpbGwgYmUgYW4gZXh0ZW5zaXZlIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sKVxccyYjNDM7YnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNTY4PWJvb2wgYnBmX3N0YWNrX3Nsb3RfYWxpdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZyYW1lbm8sIHUzMiBzcGkpO1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNTY5OmludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTU3MC1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA2Nj1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIyMjgtICovXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjIyOTppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMjMwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgYnBmX2luc25fZGVmMzJgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYnBmX2luc25fZGVmMzJgLiBXZSYjMzk7dmUgY292ZXJlZCBhIGxvdCBvZiBncm91bmQgYWxyZWFkeSwgYW5kIEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBkcmlsbCBkb3duIG9uIHRoZSBzcGVjaWZpY3MuIEkmIzM5O20gc3RhcnRpbmcgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBwcm9wZXIgdW5kZXJzdGFuZGluZyBkZW1hbmRzIGEgZGVlcCBkaXZlIGludG8gdGhlc2UgaW5kaXZpZHVhbCBjb21wb25lbnRzLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgdGhpcyBpcyBtb3N0IGxpa2VseSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBhIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb24uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBkZWZpbmluZyBob3cgdGhlIGluc3RydWN0aW9uIGlzIGVuY29kZWQgb3IgZGVjb2RlZCwgcGVyaGFwcyBhbG9uZ3NpZGUgb3RoZXIgc3RydWN0dXJlcyBmb3IgZGlmZmVyZW50IGluc3RydWN0aW9uIGxlbmd0aHMuIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSBmaWVsZHMgd2l0aGluIGFuZCBob3cgdGhleSBtYXAgdG8gdGhlIG9wY29kZXMsIHNvdXJjZS9kZXN0aW5hdGlvbiByZWdpc3RlcnMsIGFuZCBpbW1lZGlhdGUgdmFsdWVzIHdlJiMzOTtyZSBmYW1pbGlhciB3aXRoIGluIEJQRi4gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIG9yIHBlcmhhcHMgdW5pb25zIGludm9sdmVkIGluIGRlZmluaW5nIHRoZSBpbnN0cnVjdGlvbiYjMzk7cyBjb25zdGl0dWVudCBwYXJ0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoaXMgd2lsbCB1bmxvY2sgaG93IHRoZSBwcm9ncmFtIGFjdHVhbGx5ICpkb2VzKiB0aGUgam9iLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludFxccyYjNDM7YnBmX2luc25fZGVmMzImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjUxPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NTI6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NTMtXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz01Mj1zdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtOTMtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjk0OmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBhIHByZXR0eSBmdW5kYW1lbnRhbCBhcmVhOiB0aGUgQlBGIHZlcmlmaWVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcywgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyAoemV4dHMpLiBUaGF0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoZSB2ZXJpZmllciBlbnN1cmVzIEJQRiBwcm9ncmFtcyBhcmUgc2FmZSBhbmQgYWxzbyBob3cgdGhleSBnZXQgdHJhbnNsYXRlZCBpbnRvIG9wdGltaXplZCBtYWNoaW5lIGNvZGUgYnkgdGhlIEpJVC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgcHJpbWUgZnV6emluZyBtYXRlcmlhbC4gQW55IGNoYW5nZSB0aGF0IHRvdWNoZXMgdGhlIHZlcmlmaWVyJiMzOTtzIGNvcmUgbG9naWMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSBjYW4gYXQgdGhpcyB0byBleHBvc2UgYW55IHN1YnRsZSBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AgZnVuY3Rpb24sIGFzIHRoYXTigJlzIHRoZSBoZWFydCBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuIFRoZSBgYnBmX2luc25fZGVmMzJgIGZ1bmN0aW9uIHdpbGwgYmUgYW5vdGhlciBrZXkgc3ltYm9sIHRvIHJldmlldywgc2luY2UgdGhpcyBpcyBjbGVhcmx5IGNvbm5lY3RlZCB3aXRoIGhvdyB0aGUgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIHRyYWNrZWQuCgpJIHNlZSBpdCB0b3VjaGVzIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZyBvcHRpb24sIHdoaWNoIG1lYW5zIHdlIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IG91ciBidWlsZCBjb25maWd1cmF0aW9ucyB0byB0ZXN0IHRoaXMgZWZmZWN0aXZlbHkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgZXhhbWluZSB0aGUgZGVwZW5kZW5jeSBsYW5kc2NhcGUgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjY1CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipDb25zaWRlcmluZyB0aGUgRUJQRiBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgaW50ZWdyYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCBzZWVtcyBsaWtlIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggaGVyZSB3b3VsZCBiZSB0byBsZXZlcmFnZSBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBnby10byBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBzeXN0ZW0gY2FsbCBpbnRlcmNlcHRpb24uIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzIHdpdGggb3RoZXIgYXBwcm9hY2hlcyBpZiB0aGlzIGZpdHMgdGhlIGJpbGwuIE5vdywgdGhpbmtpbmcgcHJhY3RpY2FsbHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZSwgd291bGQgYmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdoYXRldmVyIGlzIGNvbGxlY3RlZCBnZXRzIHJldHVybmVkIGNvcnJlY3RseSwgc28gdGhhdCBgc2V0LXJlc3VsdHNgIGlzIHRoZSBuZXh0IG1ham9yIG1ldGhvZCB0aGF0IGlzIHVzZWQuIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgZGF0YSBjb2xsZWN0aW9uIGFuZCBwcm9jZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZlcmlmaWNhdGlvbiBieXBhc3NlcyBvciBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzJiMzNDssCiAgICAmIzM0O2JwZl9pbnNuX2RlZjMyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcyB0byB0cmFjayAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyBkeW5hbWljYWxseSwgcmVtb3ZpbmcgdGhlIGBzdWJyZWdfZGVmYCBmaWVsZCBmcm9tIGBicGZfcmVnX3N0YXRlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzIG9yIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MToyOS43ODQzMTUxNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgxODE0MjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzXCIsXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgaW5zdHJ1Y3Rpb24gZml4dXBzIHRvIHRyYWNrIDMyLWJpdCBzdWJyZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgemVyby1leHRlbnNpb25zIGR5bmFtaWNhbGx5LCByZW1vdmluZyB0aGUgYHN1YnJlZ19kZWZgIGZpZWxkIGZyb20gYGJwZl9yZWdfc3RhdGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHZlcmlmaWNhdGlvbiBieXBhc3NlcyBvciBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MToyOS43ODQzMjMwNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MzkwMjMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3N2ZlMjFhZDhlZWY3Njc4ZjhhNWVhYzA3MDQwY2NkOGRkM2I0YmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAwMDo1MToyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDY4MmMyY2QzYjg0NDMuLjM5YjBkYjJhNGYxN2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTYyLDExICsxNjIsNiBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuIFxcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxcbiBcXHQgKi9cXG4gXFx0dTMyIGZyYW1lbm87XFxuLVxcdC8qIFRyYWNrcyBzdWJyZWcgZGVmaW5pdGlvbi4gVGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgaW5zbl9pZHggb2YgdGhlXFxuLVxcdCAqIHdyaXRpbmcgaW5zbi4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc3VicmVnX2RlZiBpcyB1c2VkIGJlZm9yZSBhbnkgaW5zblxcbi1cXHQgKiBwYXRjaGluZyB3aGljaCBvbmx5IGhhcHBlbnMgYWZ0ZXIgbWFpbiB2ZXJpZmljYXRpb24gZmluaXNoZWQuXFxuLVxcdCAqL1xcbi1cXHRzMzIgc3VicmVnX2RlZjtcXG4gXFx0LyogaWYgKCFwcmVjaXNlIFxcdTAwMjZcXHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbid0IGFmZmVjdCBzYWZldHkgKi9cXG4gXFx0Ym9vbCBwcmVjaXNlO1xcbiB9O1xcbkBAIC0xNjMxLDcgKzE2MjYsNiBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcXG4gfTtcXG4gXFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pO1xcbiB2b2lkIGJwZl9tYXJrX3N1YnByb2dfZXhjX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKTtcXG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbkBAIC0xNjU1LDUgKzE2NDksNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9CUEZfVkVSSUZJRVJfSCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IDJlNGFlMGVmMDg2MDkuLjdjNDU5OWU2NWVjZWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic3RhY2s9JXMgYmVmb3JlIFxcXCIsIGVudi1cXHUwMDNldG1wX3N0cl9idWYpO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlcmUgaXMgYSBoaXN0b3J5IHJlY29yZCB0aGF0IHNvbWUgcmVnaXN0ZXJzIGdhaW5lZCByYW5nZSBhdCB0aGlzIGluc24sXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2VuZF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcXG4gXFx0XFx0XFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbi1cXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSAlcyVkIHIlZFxcXFxuXFxcIixcXG4rXFx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gJXMlZCByJWRcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9UT19CRSA/IFxcXCJiZVxcXCIgOiBcXFwibGVcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2Jzd2FwX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLFxcbiBcXHRcXHRcXHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuLVxcdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXFxcXG5cXFwiLFxcbitcXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcXCIsXFxuIFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIH1cXG5AQCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cHJpbnRfYnBmX2VuZF9pbnNuKHZlcmJvc2UsIGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgPSAtJWMlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlYyVkID0gLSVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19hZGRyX3NwYWNlX2Nhc3QoaW5zbikpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhZGRyX3NwYWNlX2Nhc3QociVkLCAldSwgJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnLCAoKHUzMilpbnNuLVxcdTAwM2VpbW0pIFxcdTAwM2VcXHUwMDNlIDE2LCAodTE2KWluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XVxcbkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgJXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDRdXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0pXFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0IChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FERCB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FORCB8fFxcbiBcXHRcXHRcXHQgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfT1IgfHwgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9YT1IpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBsb2NrICooJXMgKikociVkICUrZCkgJXMgciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsXFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxcbiBcXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWltbSkgXFx1MDAzZVxcdTAwM2UgNF0sXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuQEAgLTI2Miw0NCArMjYyLDQ0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xcbiBcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICooJXMgKikociVkICUrZCkgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBub3NwZWNcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIG5vc3BlY1xcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGR4XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX2xkeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcXFxcblxcXCIsXFxuK1xcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcbiBcXHRcXHRcXHRcXHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdIDpcXG5AQCAtMzA3LDEyICszMDcsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgcjAgPSAqKCVzICopc2tiWyVkXVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0pO1xcbiBcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuQEAgLTMzMiwxMiArMzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRpZiAoaXNfcHRyIFxcdTAwMjZcXHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXFxuIFxcdFxcdFxcdFxcdGltbSA9IDA7XFxuIFxcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4gXFx0XFx0XFx0XFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXFxuXFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xcbkBAIC0zNDcsMzUgKzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0Y2hhciB0bXBbNjRdO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgY2FsbCBwYyVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgcGMlc1xcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIFxcdFxcdFxcdFxcdFxcdF9fZnVuY19nZXRfbmFtZShjYnMsIGluc24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0c3RyY3B5KHRtcCwgXFxcInVua25vd25cXFwiKTtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBjYWxsICVzIyVkXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgJXMjJWRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSxcXG4gXFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290byBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvIHBjJStkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBIHwgQlBGX1gpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290b3ggciVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGdvdG94IHIlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2VvZmYpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAzMiB8IEJQRl9KQSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG5AQCAtMzgzLDE0ICszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG4gXFx0XFx0XFx0XFx0KHUzMilpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGJwZl9jbGFzc19zdHJpbmdbY2xhc3NdKTtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggYTBiZGRhZGE3OTY0ZS4uN2IzNTEwZDQ2YjM3NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC00NCwxNSArNDQsNjEgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdH1cXG4gfVxcbiBcXG4tLyogUmV0dXJuIFRSVUUgaWYgSU5TTiBoYXMgZGVmaW5lZCBhbnkgMzItYml0IHZhbHVlIGV4cGxpY2l0bHkuICovXFxuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4rLypcXG4rICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcXHUwMDNlPSAwLlxcbisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzIG9uIDY0LWJpdCxcXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cXG4rICovXFxuK3N0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIHtcXG4tXFx0aW50IGRzdF9yZWcgPSBpbnNuX2RlZl9yZWdubyhpbnNuKTtcXG4rXFx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0dTggc2l6ZSA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHR1OCBvcCA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Ym9vbCBtb2RlX21lbTtcXG4rXFxuK1xcdC8qIHN1YnJlZ2lzdGVyIGVuZGluZXNzIHN3YXAgKi9cXG4rXFx0aWYgKChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9BTFU2NCkgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX0VORCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gIT0gNjQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIHcwICs9IDEgKi9cXG4rXFx0aWYgKGNsYXNzID09IEJQRl9BTFUgXFx1MDAyNlxcdTAwMjYgb3AgIT0gQlBGX0VORClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApLCBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXFxuK1xcdGlmIChpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnNuLVxcdTAwM2VvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Lyogbm9uIDY0LWJpdCwgbm9uIHNpZ25lZCBleHRlbmRlZCBsb2FkcyAqL1xcbitcXHRtb2RlX21lbSA9IG1vZGUgPT0gQlBGX01FTSB8fCBtb2RlID09IEJQRl9QUk9CRV9NRU0gfHwgbW9kZSA9PSBCUEZfUFJPQkVfTUVNMzI7XFxuK1xcdGlmIChjbGFzcyA9PSBCUEZfTERYIFxcdTAwMjZcXHUwMDI2IG1vZGVfbWVtIFxcdTAwMjZcXHUwMDI2IHNpemUgIT0gQlBGX0RXKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBhdG9taWNzLCBzZWUgaW5zbl9kZWZfcmVnbm8oKSAqL1xcbitcXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNiBzaXplICE9IEJQRl9EVylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKGRzdF9yZWcgPT0gLTEpXFxuK1xcdC8qIGJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqL1xcbitcXHRpZiAoY2xhc3MgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2IChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cmV0dXJuICFicGZfaXNfcmVnNjQoaW5zbiwgZHN0X3JlZywgTlVMTCwgRFNUX09QKTtcXG4rXFx0LyogQ29uc2VydmF0aXZlbHkgcmV0dXJuIHRydWUgYXQgZGVmYXVsdC4gKi9cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHVybiB0aGUgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluZWQgYnkgSU5TTiwgb3IgLTEgaWYgSU5TTiBkb2VzIG5vdFxcbisgKiBleHBsaWNpdGx5IGRlZmluZSBhIDMyLWJpdCB2YWx1ZS5cXG4rICovXFxuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuK3tcXG4rXFx0aW50IGRzdF9yZWcgPSBpbnNuX2RlZl9yZWdubyhpbnNuKTtcXG4rXFxuK1xcdGlmIChkc3RfcmVnIFxcdTAwM2MgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBkc3RfcmVnO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5AQCAtMTY5LDcgKzIxNSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqIChjbnQgPT0gMSkgaXMgdGFrZW4gb3Igbm90LiBUaGVyZSBpcyBubyBndWFyYW50ZWUgSU5TTiBhdCBPRkYgaXMgdGhlXFxuIFxcdCAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuXFxuIFxcdCAqL1xcbi1cXHRkYXRhW29mZl0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSk7XFxuK1xcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKSBcXHUwMDNlPSAwO1xcbiBcXG4gXFx0aWYgKGNudCA9PSAxKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE4MSw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRmb3IgKGkgPSBvZmY7IGkgXFx1MDAzYyBvZmYgKyBjbnQgLSAxOyBpKyspIHtcXG4gXFx0XFx0LyogRXhwYW5kIGluc25pW29mZl0ncyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqL1xcbiBcXHRcXHRkYXRhW2ldLnNlZW4gPSBvbGRfc2VlbjtcXG4tXFx0XFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBpKTtcXG4rXFx0XFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBpKSBcXHUwMDNlPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC02MTYsMTEgKzY2Miw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0aWYgKGxvYWRfcmVnID09IC0xKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdC8qIE5PVEU6IGFyZyBcXFwicmVnXFxcIiAodGhlIGZvdXJ0aCBvbmUpIGlzIG9ubHkgdXNlZCBmb3JcXG4tXFx0XFx0XFx0ICogICAgICAgQlBGX1NUWCArIFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTExcXG4tXFx0XFx0XFx0ICogICAgICAgaGVyZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChicGZfaXNfcmVnNjQoXFx1MDAyNmluc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7XFxuK1xcdFxcdFxcdGlmIChicGZfaXNfcmVnNjQoXFx1MDAyNmluc24pKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChjbGFzcyA9PSBCUEZfTEQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgIEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTU0pXFxuIFxcdFxcdFxcdFxcdFxcdGkrKztcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuaW5kZXggMGFhZGZiYWUwYWNjNS4uNzgzNTFlNGE2ZjI1ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG5AQCAtNDk3LDcgKzQ5Nyw2IEBAIHN0YXRpYyB2b2lkIHByaW50X2luc3RhbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBmdW5jX2luc3RhbmNlICppXFxuIFxcdFxcdHBvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJTNkOiBcXFwiLCBpbnNuX2lkeCk7XFxuIFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBcXHUwMDI2aW5zbnNbaW5zbl9pZHhdKTtcXG4tXFx0XFx0YnBmX3Zsb2dfcmVzZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7IC8qIHJlbW92ZSBcXFxcbiAqL1xcbiBcXHRcXHRpbnNuX3BvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJSpjO1xcXCIsIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICcgJyk7XFxuIFxcdFxcdHBvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuQEAgLTEwNDMsNyArMTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXFxuIFxcdFxcdGlmICghcHJpbnRlZCkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbi1cXHRcXHRcXHRicGZfdmxvZ19yZXNldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcXG4gXFx0XFx0XFx0cHJpbnRlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdHIlZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2ldKTtcXG5AQCAtMTA1OCw3ICsxMDU2LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcXG4gXFx0XFx0aWYgKCFwcmludGVkKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJTNkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxuLVxcdFxcdFxcdGJwZl92bG9nX3Jlc2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgZW52LVxcdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xcbiBcXHRcXHRcXHRwcmludGVkID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFx0c2ElZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2FpXSk7XFxuQEAgLTEwNzAsNyArMTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXFxuIFxcdFxcdGlmICghcHJpbnRlZCkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbi1cXHRcXHRcXHRicGZfdmxvZ19yZXNldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcXG4gXFx0XFx0XFx0cHJpbnRlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdGZwJStkOiBcXFwiLCAtKGkgKyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9zdGFja19pbltpXSk7XFxuQEAgLTE1NDUsNiArMTU0MSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxuIFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBcXHUwMDI2aW5zbnNbaWR4XSk7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdC8qIENvbGxlY3Qgd2hhdCBuZWVkcyBwcmludGluZyAqL1xcbiBcXHRcXHRpZiAoaXNfbGR4X3N0eF9jYWxsIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTIwNTAsMjkgKzIwNDcsMzggQEAgaW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gLyogRWFjaCBmaWVsZCBpcyBhIHJlZ2lzdGVyIGJpdG1hc2sgKi9cXG4gc3RydWN0IGluc25fbGl2ZV9yZWdzIHtcXG4tXFx0dTE2IHVzZTtcXHQvKiByZWdpc3RlcnMgcmVhZCBieSBpbnN0cnVjdGlvbiAqL1xcbi1cXHR1MTYgZGVmO1xcdC8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovXFxuLVxcdHUxNiBpbjtcXHRcXHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXFxuLVxcdHUxNiBvdXQ7XFx0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXFxuK1xcdHUzMiB1c2U7XFx0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cXG4rXFx0dTMyIGRlZjtcXHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xcbitcXHR1MzIgaW47XFx0XFx0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGJlZm9yZSBpbnN0cnVjdGlvbiAqL1xcbitcXHR1MzIgb3V0O1xcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xcbiB9O1xcbiBcXG4gLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEFMTF9DQUxMRVJfU0FWRURfUkVHUyAoKDF1IFxcdTAwM2NcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTKSAtIDEpXFxuIFxcbitzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgcmVnNjRfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pIHwgQklUKG4gKyAxNik7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtIFxcdTAwM2NcXHUwMDNjIDE2KTsgfVxcbitzdGF0aWMgaW5saW5lIHUxNiBtYXNrX2xvKHUzMiBtKSB7IHJldHVybiAodTE2KW07IH1cXG4rc3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSBcXHUwMDNlXFx1MDAzZSAxNik7IH1cXG4rXFxuIC8qIENvbXB1dGUgaW5mby1cXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXFxuIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgY3M7XFxuLVxcdHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpO1xcbi1cXHR1OCBjb2RlID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbi1cXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSk7XFxuLVxcdHUxNiBzcmMgPSBCSVQoaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuLVxcdHUxNiBkc3QgPSBCSVQoaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuLVxcdHUxNiByMCAgPSBCSVQoMCk7XFxuLVxcdHUxNiBkZWYgPSAwO1xcbi1cXHR1MTYgdXNlID0gMHhmZmZmO1xcbitcXHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Y29uc3QgdTggY29kZSA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Y29uc3QgdTggbW9kZSA9IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdGNvbnN0IHUzMiBzcmMgPSByZWc2NF9tYXNrKGluc24tXFx1MDAzZXNyY19yZWcpO1xcbitcXHRjb25zdCB1MzIgZHN0ID0gcmVnNjRfbWFzayhpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4rXFx0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xcbitcXHRjb25zdCB1MzIgZHN0MzIgPSBtYXNrX2xvKGRzdCk7XFxuK1xcdGNvbnN0IHUzMiByMCAgPSByZWc2NF9tYXNrKDApO1xcbitcXHR1MzIgZGVmID0gMDtcXG4rXFx0dTMyIHVzZSA9IFUzMl9NQVg7XFxuIFxcbiBcXHRzd2l0Y2ggKGNsYXNzKSB7XFxuIFxcdGNhc2UgQlBGX0xEOlxcbkBAIC0yMDgzLDggKzIwODksOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdHVzZSA9IDA7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgQlBGX0xEIHwgQlBGX0FCUzpcXG4tXFx0XFx0Y2FzZSBCUEZfTEQgfCBCUEZfSU5EOlxcbitcXHRcXHRjYXNlIEJQRl9BQlM6XFxuK1xcdFxcdGNhc2UgQlBGX0lORDpcXG4gXFx0XFx0XFx0Lyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqL1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0yMDkyLDcgKzIwOTgsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRjYXNlIEJQRl9MRFg6XFxuIFxcdFxcdHN3aXRjaCAobW9kZSkge1xcbiBcXHRcXHRjYXNlIEJQRl9NRU06XFxuK1xcdFxcdFxcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xcbitcXHRcXHRcXHRkZWYgPSBkc3Q7XFxuK1xcdFxcdFxcdHVzZSA9IHNyYztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgQlBGX01FTVNYOlxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcXG4rXFx0XFx0XFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRkZWYgPSBkc3Q7XFxuIFxcdFxcdFxcdHVzZSA9IHNyYztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIxMTAsMTIgKzIxMjQsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4gXFx0XFx0Y2FzZSBCUEZfTUVNOlxcbiBcXHRcXHRcXHRkZWYgPSAwO1xcbi1cXHRcXHRcXHR1c2UgPSBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdHVzZSA9IGRzdCB8IChzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgQlBGX0FUT01JQzpcXG4rXFx0XFx0Y2FzZSBCUEZfQVRPTUlDOiB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGRzdCBob2xkcyBhIHBvaW50ZXIgYW5kIGlzIGFsd2F5cyB1c2VkIGFzIDY0LWJpdDtcXG4rXFx0XFx0XFx0ICogdGhlIHZhbHVlIG9wZXJhbmQgYW5kIHIwIGFyZSByZWFkIGFzIDMyLWJpdCBmb3IgQlBGX1cgYXRvbWljcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHUzMiBzcmN2ID0gc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMjtcXG4rXFx0XFx0XFx0dTMyIHIwdiAgPSBzaXplID09IEJQRl9EVyA/IHIwIDogbWFza19sbyhyMCk7XFxuK1xcbiBcXHRcXHRcXHRzd2l0Y2ggKGluc24tXFx1MDAzZWltbSkge1xcbiBcXHRcXHRcXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbi1cXHRcXHRcXHRcXHR1c2UgPSByMCB8IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gcjB2IHwgZHN0IHwgc3JjdjtcXG4gXFx0XFx0XFx0XFx0ZGVmID0gcjA7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG5AQCAtMjEyNCwxMCArMjE0NSwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuIFxcdFxcdFxcdFxcdGRlZiA9IDA7XFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjdjtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjdjtcXG4gXFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSBcXHUwMDI2IEJQRl9GRVRDSClcXG4gXFx0XFx0XFx0XFx0XFx0ZGVmID0gc3JjO1xcbiBcXHRcXHRcXHRcXHRlbHNlXFxuQEAgLTIxMzUsNiArMjE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9BTFU6XFxuIFxcdGNhc2UgQlBGX0FMVTY0OlxcbkBAIC0yMTQ4LDE0ICsyMTcwLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0spXFxuIFxcdFxcdFxcdFxcdHVzZSA9IDA7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0dXNlID0gc3JjO1xcbitcXHRcXHRcXHRcXHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBzcmMgOiBzcmMzMjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGRlZiA9IGRzdDtcXG4gXFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0spXFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdDtcXG4rXFx0XFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gZHN0IDogZHN0MzI7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjO1xcbitcXHRcXHRcXHRcXHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfSk1QOlxcbkBAIC0yMTgxLDEzICsyMjAzLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0dXNlID0gZGVmIFxcdTAwMjYgfkJJVChCUEZfUkVHXzApO1xcbiBcXHRcXHRcXHRpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCBcXHUwMDI2Y3MpKVxcbiBcXHRcXHRcXHRcXHR1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTtcXG4rXFx0XFx0XFx0ZGVmID0gbWFza193aWRlbihkZWYpO1xcbitcXHRcXHRcXHR1c2UgPSBtYXNrX3dpZGVuKHVzZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRkZWYgPSAwO1xcbi1cXHRcXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSylcXG4tXFx0XFx0XFx0XFx0dXNlID0gZHN0O1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0pNUCA/IGRzdCA6IGRzdDMyO1xcbitcXHRcXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWClcXG4rXFx0XFx0XFx0XFx0dXNlIHw9IGNsYXNzID09IEJQRl9KTVAgPyBzcmMgOiBzcmMzMjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0yMjA5LDYgKzIyMzIsNyBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlO1xcbiBcXHRpbnQgaW5zbl9jbnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4rXFx0dTY0IHBvcywgaW5zbl9wb3M7XFxuIFxcdGludCBlcnIgPSAwLCBpLCBqO1xcbiBcXHRib29sIGNoYW5nZWQ7XFxuIFxcbkBAIC0yMjUyLDggKzIyNzYsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW50IGluc25faWR4ID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbaV07XFxuIFxcdFxcdFxcdHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqbGl2ZSA9IFxcdTAwMjZzdGF0ZVtpbnNuX2lkeF07XFxuIFxcdFxcdFxcdHN0cnVjdCBicGZfaWFycmF5ICpzdWNjO1xcbi1cXHRcXHRcXHR1MTYgbmV3X291dCA9IDA7XFxuLVxcdFxcdFxcdHUxNiBuZXdfaW4gPSAwO1xcbitcXHRcXHRcXHR1MzIgbmV3X291dCA9IDA7XFxuK1xcdFxcdFxcdHUzMiBuZXdfaW4gPSAwO1xcbiBcXG4gXFx0XFx0XFx0c3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7XFxuIFxcdFxcdFxcdGZvciAoaW50IHMgPSAwOyBzIFxcdTAwM2Mgc3VjYy1cXHUwMDNlY250OyArK3MpXFxuQEAgLTIyNjcsOCArMjI5MSwyMCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7ICsraSlcXG4tXFx0XFx0aW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7ICsraSkge1xcbitcXHRcXHRpbnQgZGVmMzIgPSBicGZfaW5zbl9kZWYzMihcXHUwMDI2aW5zbnNbaV0pO1xcbitcXHRcXHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xcbitcXHRcXHR1MzIgaW4gPSBzdGF0ZVtpXS5pbjtcXG4rXFxuK1xcdFxcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIDMyLWJpdCBvcGVyYXRpb25zIGRvIG5vdCByZXNldCB1cHBlciBoYWx2ZXNcXG4rXFx0XFx0ICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb25cXG4rXFx0XFx0ICogcmVnaXN0ZXIgaWYgYW4gaW5zdHJ1Y3Rpb24gZGVmaW5lcyBhIDMyLWJpdCBzdWJyZWdpc3RlciBhbmQgdGhlXFxuK1xcdFxcdCAqIHVwcGVyIGhhbGYgb2YgdGhhdCByZWdpc3RlciBpcyBhbGl2ZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbnNuX2F1eFtpXS56ZXh0X2RzdCA9IGRlZjMyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgKG1hc2tfaGkob3V0KSBcXHUwMDI2IEJJVChkZWYzMikpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkxpdmUgcmVncyBiZWZvcmUgaW5zbjpcXFxcblxcXCIpO1xcbkBAIC0yMjg0LDcgKzIzMjAsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIuXFxcIik7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIFxcXCIpO1xcbitcXHRcXHRcXHRwb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2ldKTtcXG4rXFx0XFx0XFx0aW5zbl9wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbitcXHRcXHRcXHRpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpXFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJSpjOyB6ZXh0XFxcIiwgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJyAnKTtcXG4rXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRpZiAoYnBmX2lzX2xkaW1tNjQoXFx1MDAyNmluc25zW2ldKSlcXG4gXFx0XFx0XFx0XFx0aSsrO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGU2ZjM1ZjRlNzE1YjYuLjQ1ZDRjMGEwMGE1ZGIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTIxMjksMTIgKzIxMjksOSBAQCBzdGF0aWMgaW50IHJlZ19ib3VuZHNfc2FuaXR5X2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXFxuIHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIHtcXG4tXFx0czMyIHN1YnJlZ19kZWYgPSByZWctXFx1MDAzZXN1YnJlZ19kZWY7XFxuLVxcbiBcXHRtZW1zZXQocmVnLCAwLCBzaXplb2YoKnJlZykpO1xcbiBcXHRyZWctXFx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuIFxcdHJlZy1cXHUwMDNldmFyX29mZiA9IHRudW1fdW5rbm93bjtcXG4tXFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gc3VicmVnX2RlZjtcXG4gXFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcXG4gfVxcbiBcXG5AQCAtMjIxMCw3ICsyMjA3LDYgQEAgc3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0fVxcbiB9XFxuIFxcbi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHXFx0KDApXFxuIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXFxuIHtcXG5AQCAtMjIxOSw3ICsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfQlBGX1JFRzsgaSsrKSB7XFxuIFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW2ldKTtcXG4tXFx0XFx0cmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGZyYW1lIHBvaW50ZXIgKi9cXG5AQCAtMzAzMiwxMjAgKzMwMjcsMTQgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xcbiB9XFxuIFxcbi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYnkgdGhlIGZvbGxvd2luZyAzMi1iaXQgb3B0aW1pemF0aW9uXFxuLSAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXNcXG4tICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxcbi0gKi9cXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi1cXHQgICAgICB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbi17XFxuLVxcdHU4IGNvZGUsIGNsYXNzLCBvcDtcXG4tXFxuLVxcdGNvZGUgPSBpbnNuLVxcdTAwM2Vjb2RlO1xcbi1cXHRjbGFzcyA9IEJQRl9DTEFTUyhjb2RlKTtcXG4tXFx0b3AgPSBCUEZfT1AoY29kZSk7XFxuLVxcdGlmIChjbGFzcyA9PSBCUEZfSk1QKSB7XFxuLVxcdFxcdC8qIEJQRl9FWElUIGZvciBcXFwibWFpblxcXCIgd2lsbCByZWFjaCBoZXJlLiBSZXR1cm4gVFJVRVxcbi1cXHRcXHQgKiBjb25zZXJ2YXRpdmVseS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChvcCA9PSBCUEZfRVhJVClcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdGlmIChvcCA9PSBCUEZfQ0FMTCkge1xcbi1cXHRcXHRcXHQvKiBCUEYgdG8gQlBGIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgbWFya2luZ1xcbi1cXHRcXHRcXHQgKiBjYWxsZXIgc2F2ZWQgY2xvYmJlciB3aXRoIERTVF9PUF9OT19NQVJLIGZvciB3aGljaCB3ZVxcbi1cXHRcXHRcXHQgKiBkb24ndCBjYXJlIHRoZSByZWdpc3RlciBkZWYgYmVjYXVzZSB0aGV5IGFyZSBhbnl3YXlcXG4tXFx0XFx0XFx0ICogbWFya2VkIGFzIE5PVF9JTklUIGFscmVhZHkuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcXG4tXFx0XFx0XFx0ICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHQgPT0gU1JDX09QKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IFxcdTAwMjZcXHUwMDI2IG9wID09IEJQRl9FTkQgXFx1MDAyNlxcdTAwMjYgKGluc24tXFx1MDAzZWltbSA9PSAxNiB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gMzIpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IHx8IGNsYXNzID09IEJQRl9KTVAgfHxcXG4tXFx0ICAgIChjbGFzcyA9PSBCUEZfQUxVIFxcdTAwMjZcXHUwMDI2IG9wID09IEJQRl9FTkQgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tID09IDY0KSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0FMVSB8fCBjbGFzcyA9PSBCUEZfSk1QMzIpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdGlmIChjbGFzcyA9PSBCUEZfTERYKSB7XFxuLVxcdFxcdGlmICh0ICE9IFNSQ19PUClcXG4tXFx0XFx0XFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XFxuLVxcdFxcdC8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xcbi1cXHRcXHQvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlXFxuLVxcdFxcdCAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpc1xcbi1cXHRcXHQgKiBhc2tpbmcgYWJvdXQgaXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodCA9PSBTUkNfT1AgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcXG4tXFx0XFx0dTggbW9kZSA9IEJQRl9NT0RFKGNvZGUpO1xcbi1cXG4tXFx0XFx0LyogTERfSU1NNjQgKi9cXG4tXFx0XFx0aWYgKG1vZGUgPT0gQlBGX0lNTSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRcXHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cXG4tXFx0XFx0aWYgKHQgIT0gU1JDX09QKVxcbi1cXHRcXHRcXHRyZXR1cm4gIGZhbHNlO1xcbi1cXG4tXFx0XFx0LyogSW1wbGljaXQgY3R4IHB0ci4gKi9cXG4tXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfNilcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRcXHQvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGNsYXNzID09IEJQRl9TVClcXG4tXFx0XFx0LyogVGhlIG9ubHkgc291cmNlIHJlZ2lzdGVyIGZvciBCUEZfU1QgaXMgYSBwdHIuICovXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4tXFx0LyogQ29uc2VydmF0aXZlbHkgcmV0dXJuIHRydWUgYXQgZGVmYXVsdC4gKi9cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLXtcXG4tXFx0czMyIGRlZl9pZHggPSByZWctXFx1MDAzZXN1YnJlZ19kZWY7XFxuLVxcbi1cXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XFxuLVxcdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24ndCBiZSBzdWItcmVnaXN0ZXIgYW55bW9yZS4gKi9cXG4tXFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXFxuIFxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpICsgZW52LVxcdTAwM2VpbnNuX2lkeDtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4tXFx0Ym9vbCBydzY0O1xcbiBcXG4gXFx0bWFya19yZWdfc2NyYXRjaGVkKGVudiwgcmVnbm8pO1xcbiBcXG4gXFx0cmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXHRydzY0ID0gYnBmX2lzX3JlZzY0KGluc24sIHJlZ25vLCByZWcsIHQpO1xcbiBcXHRpZiAodCA9PSBTUkNfT1ApIHtcXG4gXFx0XFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovXFxuIFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpIHtcXG5AQCAtMzE1Niw5ICszMDQ1LDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcXG4gXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0XFx0aWYgKHJ3NjQpXFxuLVxcdFxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXFxuQEAgLTMxNjYsNyArMzA1Miw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0aWYgKHQgPT0gRFNUX09QKVxcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbiBcXHR9XFxuQEAgLTM4MjIsMTEgKzM3MDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzcGlsbF9zaXplIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XFxuLVxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG4tXFx0XFx0XFx0XFx0ICogc3VicmVnX2RlZiBmb3IgdGhpcyBpbnNuLiAgU2F2ZSBpdCBmaXJzdC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHMzMiBzdWJyZWdfZGVmID0gc3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlYnBmX2NhcGFibGUgXFx1MDAyNlxcdTAwMjYgc2l6ZSA9PSA0IFxcdTAwMjZcXHUwMDI2IHNwaWxsX3NpemUgPT0gNCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IDMyKVxcbiBcXHRcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxcbkBAIC0zODM0LDcgKzM3MTQsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpO1xcbiBcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKnJlZztcXG4tXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmID0gc3VicmVnX2RlZjtcXG4gXFxuIFxcdFxcdFxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLlxcbiBcXHRcXHRcXHRcXHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXFxuQEAgLTYyNzEsMTIgKzYxNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZhbHVlX3JlZ25vKTtcXG4tXFx0XFx0XFx0XFx0LyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudFxcbi1cXHRcXHRcXHRcXHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBpbnNuLiBXaGVuIHRoZSBkc3QgaXMgUFRSLCBpdCBpcyBmb3Igc3VyZSBub3RcXG4tXFx0XFx0XFx0XFx0ICogYSBzdWItcmVnaXN0ZXIuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdFxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xcbiBcXHRcXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjtcXG4gXFx0XFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7XFxuQEAgLTczODAsMTAgKzcyNTMsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxcbiBcXHRcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHNwaTtcXG4gXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbi1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi1cXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0bWFya19zdGFja19zbG90c19zY3JhdGNoZWQoZW52LCBzcGksIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xcbiBcXG4gXFx0XFx0XFx0cmVnID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbkBAIC05NDYzLDcgKzkzMzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXFxuIFxcdFxcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzLCBCUEZfUkVHXzApO1xcbi1cXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xcbkBAIC0xMDQ4Miw5ICsxMDM1MCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbi1cXHQvKiBoZWxwZXIgY2FsbCByZXR1cm5zIDY0LWJpdCB2YWx1ZS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcXG4tXFxuIFxcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXFxuIFxcdHJldF90eXBlID0gZm4tXFx1MDAzZXJldF90eXBlO1xcbiBcXHRyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7XFxuQEAgLTEwNzIyLDMwICsxMDU4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XFxuLSAqIHRoZSBCVEYgZnVuY19wcm90bydzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cXG4tICovXFxuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgcmVnbm8sIHNpemVfdCByZWdfc2l6ZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXG4tXFx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xcbi1cXHRcXHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cXG4tXFx0XFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xcbi1cXHRcXHRcXHRERUZfTk9UX1NVQlJFRyA6IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXHR9IGVsc2UgaWYgKHJlZ19zaXplID09IHNpemVvZih1NjQpKSB7XFxuLVxcdFxcdC8qIEZ1bmN0aW9uIGFyZ3VtZW50ICovXFxuLVxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFx0fVxcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG4tXFx0XFx0XFx0XFx0ICAgc2l6ZV90IHJlZ19zaXplKVxcbi17XFxuLVxcdHJldHVybiBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBjdXJfcmVncyhlbnYpLCByZWdubywgcmVnX3NpemUpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbiBcXHRyZXR1cm4gbWV0YS1cXHUwMDNla2Z1bmNfZmxhZ3MgXFx1MDAyNiBLRl9BQ1FVSVJFO1xcbkBAIC0xMjk3NCw3ICsxMjgxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4O1xcbiBcXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xcbiBcXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbkBAIC0xMzAxOCw3ICsxMjg1OCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZmFpbGVkIHRvIG1hcmsgczMyIHJhbmdlIGZvciByZXR2YWwgaW4gZm9ya2VkIHN0YXRlIGZvciBsb2NrXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdzLCBCUEZfUkVHXzAsIHNpemVvZih1MzIpKTtcXG4gXFx0fSBlbHNlIGlmICghaW5zbi1cXHUwMDNlb2ZmIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtMTMxNjgsNyArMTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XFxuIFxcbiBcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tyZWdub10pO1xcbi1cXHRcXHRyZWdzW3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbkBAIC0xMzE5MCw3ICsxMzAyOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcXHUwMDI2XFx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG4gXFx0XFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxcbiBcXHRcXHRcXHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcXG4tXFx0XFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cXHUwMDNlc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuIFxcdFxcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZwdHJfdHlwZV9pZCk7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuQEAgLTEzMjgxLDcgKzEzMTE4LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0LyogRm9yIG1hcmtfcHRyX29yX251bGxfcmVnLCBzZWUgOTNjMjMwZTNmNWJkNiAqL1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXFx1MDAyNm1ldGEpKSB7XFxuIFxcdFxcdFxcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XFxuIFxcdFxcdFxcdGlmIChpZCBcXHUwMDNjIDApXFxuQEAgLTEzMzE4LDE4ICsxMzE1NCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdGNhbGxlcl9pbmZvLVxcdTAwM2VzdGFja19hcmdfY250ID0gc3RhY2tfYXJnX2NudDtcXG4gXFx0fVxcbiBcXG4tXFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byArIDEpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBuYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XFxuLVxcdFxcdHUzMiByZWdubyA9IGkgKyAxO1xcbi1cXG4tXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbi1cXHRcXHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKVxcbi1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXFxuLVxcdFxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cXHUwMDNlc2l6ZSk7XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbiBcXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMTQ4MjMsMTQgKzE0NjQ3LDE0IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0aWYgKGRzdF9yZWctXFx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BKVxcbiBcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbiBcXG4tXFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXG4tXFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpXFxuK1xcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxcbiBcXHRcXHRcXHQgKiA2NC1iaXQgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byAzMi5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGF1eC1cXHUwMDNlbmVlZHNfemV4dCA9IHRydWU7XFxuK1xcdFxcdFxcdGF1eC1cXHUwMDNlemV4dF9kc3QgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBBbnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIG9uIGFyZW5hIHBvaW50ZXJzICovXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNDk2OSw2ICsxNDc5Myw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gLyogY2hlY2sgdmFsaWRpdHkgb2YgMzItYml0IGFuZCA2NC1iaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zICovXFxuIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCA9IGN1cl9hdXgoZW52KTtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xcbiBcXHR1OCBvcGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE1MDI2LDE4ICsxNDg1MSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0pIHtcXG4gXFx0XFx0XFx0XFx0XFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cXG4gXFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbi1cXHRcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXFxuK1xcdFxcdFxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gPT0gMSkgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fQVJFTkE7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApIHtcXG4gXFx0XFx0XFx0XFx0XFx0LyogY2FzZTogUjEgPSBSMlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBjb3B5IHJlZ2lzdGVyIHN0YXRlIHRvIGRlc3QgcmVnXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4tXFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpKSB7XFxuQEAgLTE1MDU1LDcgKzE0ODc2LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG5AQCAtMTUwODAsNyArMTQ5MDAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRib29sIG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcXHUwMDNjICgxVUxMIFxcdTAwM2NcXHUwMDNjIChpbnNuLVxcdTAwM2VvZmYgLSAxKSk7XFxuQEAgLTE1MDkwLDcgKzE0OTA5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmIFxcdTAwM2VcXHUwMDNlIDMpO1xcbiBcXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE1OTU5LDEyICsxNTc3Nyw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoKCEocmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpIFxcdTAwMjZcXHUwMDI2ICEoa25vd25fcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxcbiBcXHRcXHQgICAgcmVnLVxcdTAwM2VkZWx0YSA9PSBrbm93bl9yZWctXFx1MDAzZWRlbHRhKSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0KnJlZyA9ICprbm93bl9yZWc7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbiBcXHRcXHRcXHRzMzIgc2F2ZWRfb2ZmID0gcmVnLVxcdTAwM2VkZWx0YTtcXG4gXFx0XFx0XFx0dTMyIHNhdmVkX2lkID0gcmVnLVxcdTAwM2VpZDtcXG4gXFxuQEAgLTE1OTc0LDEyICsxNTc4OCwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xcbiBcXHRcXHRcXHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyArPSBkZWx0YSAqL1xcbiBcXHRcXHRcXHQqcmVnID0gKmtub3duX3JlZztcXG4gXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXFxuLVxcdFxcdFxcdCAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cXG4rXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYgYW5kIGlkLCBvdGhlcndpc2UgYW5vdGhlciBzeW5jX2xpbmtlZF9yZWdzKClcXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWlkID0gc2F2ZWRfaWQ7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcbiBcXHRcXHRcXHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuIFxcdFxcdFxcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuQEAgLTE2NDE0LDggKzE2MjI3LDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxcbiBcXHQgKi9cXG4gXFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxuLVxcdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0LypcXG4gXFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXFxuIFxcdCAqIHdoaWNoIG11c3QgYmUgZXhwbG9yZWQgYnkgdGhlIHZlcmlmaWVyIHdoZW4gaW4gYSBzdWJwcm9nLlxcbkBAIC0xNjczMCw3ICsxNjU0MSw2IEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmIChicGZfaGVscGVyX2NhbGwoY2FsbCkpIHtcXG4tXFxuIFxcdFxcdGlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtXFx1MDAzZWltbSwgXFx1MDAyNmZuKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdC8qIGVycm9yIHdvdWxkIGJlIHJlcG9ydGVkIGxhdGVyICovXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtMTc0NzUsNiArMTcyODUsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlZDogXFxcIiwgZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxuIFxcdFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG4rXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRlbnYtXFx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gZW52LVxcdTAwM2VwcmV2X2xvZ19wb3M7XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcXG5pbmRleCA1ZTdjYjhiMzZmZWYyLi41NTc5MTczYTYxZTNiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xcbkBAIC0xMDcsMTQgKzEwNyw3IEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIFxcbiBcXHRwID0gYnVmO1xcbiBcXHR3aGlsZSAoKnAgIT0gJ1xcXFwwJykge1xcbi1cXHRcXHRpZiAoKnAgPT0gJ1xcXFxuJykge1xcbi1cXHRcXHRcXHRtZW1tb3ZlKHAgKyAzLCBwLCBzdHJsZW4oYnVmKSArIDEgLSAocCAtIGJ1ZikpO1xcbi1cXHRcXHRcXHQvKiBBbGlnbiBlYWNoIGluc3RydWN0aW9uIGR1bXAgcm93IGxlZnQuICovXFxuLVxcdFxcdFxcdCpwKysgPSAnXFxcXFxcXFwnO1xcbi1cXHRcXHRcXHQqcCsrID0gJ2wnO1xcbi1cXHRcXHRcXHQvKiBPdXRwdXQgbXVsdGlsaW5lIGNvbmNhdGVuYXRpb24uICovXFxuLVxcdFxcdFxcdCpwKysgPSAnXFxcXFxcXFwnO1xcbi1cXHRcXHR9IGVsc2UgaWYgKCpwID09ICdcXHUwMDNjJyB8fCAqcCA9PSAnXFx1MDAzZScgfHwgKnAgPT0gJ3wnIHx8ICpwID09ICdcXHUwMDI2Jykge1xcbitcXHRcXHRpZiAoKnAgPT0gJ1xcdTAwM2MnIHx8ICpwID09ICdcXHUwMDNlJyB8fCAqcCA9PSAnfCcgfHwgKnAgPT0gJ1xcdTAwMjYnKSB7XFxuIFxcdFxcdFxcdG1lbW1vdmUocCArIDEsIHAsIHN0cmxlbihidWYpICsgMSAtIChwIC0gYnVmKSk7XFxuIFxcdFxcdFxcdC8qIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3Rlci4gKi9cXG4gXFx0XFx0XFx0KnArKyA9ICdcXFxcXFxcXCc7XFxuQEAgLTEyOSwxNiArMTIyLDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIHN0YXRpYyB2b2lkIF9fcHJpbnRmKDIsIDMpXFxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XFxuLVxcdGNoYXIgY2hvbXBlZF9mbXRbbF07XFxuIFxcdHZhX2xpc3QgYXJncztcXG4gXFxuIFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdGlmIChsIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTtcXG4tXFx0XFx0Y2hvbXBlZF9mbXRbbCAtIDFdID0gJ1xcXFwwJztcXG4tXFx0fVxcbi1cXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcXG4rXFx0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xcbiBcXHR2YV9lbmQoYXJncyk7XFxuIH1cXG4gXFxuQEAgLTM1MSw2ICszMzgsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX3BsYWluKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sXFxuIFxcbiBcXHRcXHRwcmludGYoXFxcIiU0dTogXFxcIiwgaSk7XFxuIFxcdFxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24gKyBpLCB0cnVlKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKG9wY29kZXMpIHtcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCIgICAgICAgXFxcIik7XFxuQEAgLTQxNyw2ICs0MDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxcbiBcXG4gXFx0XFx0cHJpbnRmKFxcXCIldTogXFxcIiwgaW5zbl9vZmYpO1xcbiBcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxcXFxcbFxcXFxcXFxcXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChvcGNvZGVzKSB7XFxuIFxcdFxcdFxcdHByaW50ZihcXFwiXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcIik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5AQCAtNTUsMTAgKzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcXG4gXFx0ICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLlxcbiBcXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cXG4gXFx0ICogRS5nLjogXFxcIig4NSkgY2FsbCBmb28jMTBcXFwiIC1cXHUwMDNlIFxcXCJjYWxsIGZvb1xcXCIuXFxuLVxcdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICdtYXgoc3RybGVuKGJ1ZikgLSAxLCAwKScgdGhpbmcpLlxcbiBcXHQgKi9cXG4gXFx0cGZ4X2VuZCA9IGJ1ZiArIDU7XFxuLVxcdHNmeF9zdGFydCA9IGJ1ZiArIG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XFxuK1xcdHNmeF9zdGFydCA9IGJ1ZiArIChpbnQpc3RybGVuKGJ1Zik7XFxuIFxcdGlmIChzdHJuY21wKHBmeF9lbmQsIFxcXCJjYWxsIFxcXCIsIDUpID09IDAgXFx1MDAyNlxcdTAwMjYgKHRtcCA9IHN0cnJjaHIoYnVmLCAnIycpKSlcXG4gXFx0XFx0c2Z4X3N0YXJ0ID0gdG1wO1xcbiBcXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtMTI0LDYgKzEyNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlycS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZlcmlmaWVyX3pleHQuc2tlbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVhfRU5UUklFUyAxMVxcbiBcXG5AQCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcXHRcXHRcXHQgICAgICB7IFJVTihpcnEpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcXHRcXHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cXG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XFxuIFxcbiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGQzZWE2NjFiNzc4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcXG5AQCAtMCwwICsxLDM4OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcXG4rXFxuKy8qIHRvIHJldGFpbiBkZWJ1ZyBpbmZvIGZvciBCVEYgZ2VuZXJhdGlvbiAqL1xcbit2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcXG4re1xcbitcXHRicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcXG4rXFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKDAsIDAsIDAsIDAsIDApO1xcbitcXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19mbGFnKEJQRl9GX1RFU1RfUk5EX0hJMzIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XFx0LyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2J3MgdXBwZXIgaGFsZiAqL1xcdFxcXFxcXG4rXFx0aWYgcjggIT0gMCBnb3RvIDFmO1xcdFxcdC8qIGZhbGwtdGhyb3VnaCBjYWNoZWQgZmlyc3QsIGJyYW5jaCBwcnVuZWQgKi9cXHRcXFxcXFxuK1xcdHI2ID0gMzI7XFx0XFx0XFx0LyogZnVsbCA2NC1iaXQgZGVmICovXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIDJmO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHR3NiA9IDMyO1xcdFxcdFxcdC8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovXFx0XFx0XFxcXFxcbisyOlxcdHIwID0gcjY7XFx0XFx0XFx0LyogYnVnZ3kgdmVyaWZpZXIgYmVsaWV2ZWQgdXBwZXIgMzIgYml0cyBhcmUgMCAqLyBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1xcdFxcXFxcXG4rXFx0cjAgXFx1MDAzZVxcdTAwM2U9IDMyO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2t0aW1lX2dldF9ucylcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwidzEgPSB3MHt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2FsdTMyX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXFx1MDAzZSBubyB6ZXh0ICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbm90X21zZyhcXFwiOyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IHcwO1xcdFxcdC8qIE1PViAqL1xcdFxcdFxcXFxcXG4rXFx0dzIgPSB3MTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcyICs9IHcxO1xcdFxcdC8qIEFMVTMyLCBCUEZfWCAqL1xcdFxcXFxcXG4rXFx0dzIgKz0gMTtcXHRcXHQvKiBBTFUzMiwgQlBGX0sgKi9cXHRcXFxcXFxuK1xcdHcyID0gdzI7XFx0XFx0Lyoga2VlcCB3MiBhbGl2ZSBmb3IgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gKi8gXFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbm90X21zZyhcXFwicjEgPSByMHt7Lip9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBub196ZXh0X21vdjY0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByMTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIE5hcnJvdyBsb2FkIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXFx1MDAzZSB6ZXh0ICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJyMSA9ICoodTMyICopKHIxMCAtOCl7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9uYXJyb3dfbG9hZF9oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAqKHUzMiAqKShyMTAgLSA4KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IGF0b21pYyBmZXRjaCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfYXRvbWljX2ZldGNoMzJfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC44Ynl0ZSAlW2ZldGNoX2FkZDMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9pbnNuKGZldGNoX2FkZDMyLFxcbitcXHRcXHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9jbXB4Y2hnMzJfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC44Ynl0ZSAlW2NtcHhjaGczMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2luc24oY21weGNoZzMyLFxcbitcXHRcXHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9DTVBYQ0hHLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IGRlZiBiZWZvcmUgYSBicmFuY2gsIHVwcGVyIGhhbGYgdXNlZCBvbiBvbmUgYnJhbmNoIC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInc2ID0gMzJ7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3NiA9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjAgPT0gMCBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIHIxJ3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAndzEgPSAxJyBtdXN0IE5PVCBiZSBtYXJrZWQgZm9yIHplcm8gZXh0ZW5zaW9uLiAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX25vdF9tc2coXFxcIncxID0gMXt7Lip9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBub196ZXh0X290aGVyX3JlZ19oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgXFx1MDAzY1xcdTAwM2M9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzEgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIExEX0FCUyBkZWZpbmVzIHIwOyB3aGVuIHIwIGlzIHJlYWQgYXMgNjQtYml0IGl0IG11c3QgYmUgemVybyBleHRlbmRlZCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjAgPSAqKHU4ICopc2tiWzBde3suKn19OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfbGRfYWJzX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2ID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTggKilza2JbMF07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNyA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByNztcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIncyID0gMXt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBoZWxwZXJfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcyID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfdHJhY2VfcHJpbnRrXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl90cmFjZV9wcmludGspXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogc3VicHJvZ3JhbSBwYXJhbWV0ZXJzIGFyZSBjb25zZXJ2YXRpdmVseSByZWFkIGFzIDY0LWJpdCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwidzEgPSB3MHt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsIHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0O1xcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgemVybyBleHRlbmRlZCAqL1xcbitTRUMoXFxcInRjXFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJ3MSA9IDF7eyArfX07IHpleHRcXFwiKVxcbitfX21zZyhcXFwidzIgPSAxe3sgK319OyB6ZXh0XFxcIilcXG4rX19tc2coXFxcInczID0gMXt7ICt9fTsgemV4dFxcXCIpXFxuK19fbXNnKFxcXCJ3NCA9IDF7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQga2Z1bmNfcGFyYW1fcmVhZF9wZXJfYnRmKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MiA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MyA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3NCA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsIGJwZl9rZnVuY19jYWxsX3Rlc3Q0O1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbm90X21zZyhcXFwiOyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIGFsdTMyX2FuZF8zMmJpdF9jb25kaXRpb25hbCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0dzEgPSB3MDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHcxIFxcdTAwM2UgNDIgZ290byAxZjtcXHRcXHQvKiBCUEZfSyAqL1xcdFxcXFxcXG4rXFx0dzIgPSAyODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHcyIFxcdTAwM2UgdzEgZ290byAxZjtcXHRcXHQvKiBCUEZfWCAqL1xcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwidzEgPSB3MHt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBhbHUzMl9hbmRfNjRiaXRfY29uZGl0aW9uYWwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMSBcXHUwMDNlIDQyIGdvdG8gMWY7XFx0XFx0LyogQlBGX0sgKi9cXHRcXFxcXFxuK1xcdHIyID0gMjg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMiBcXHUwMDNlIHIxIGdvdG8gMWY7XFx0XFx0LyogQlBGX1ggKi9cXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19ub3RfbXNnKFxcXCI7IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgYWx1NjRfYW5kX2NvbmRpdGlvbmFscyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHcxIFxcdTAwM2UgNDIgZ290byAxZjtcXHRcXHQvKiBCUEZfSyAqL1xcdFxcXFxcXG4rXFx0aWYgcjEgXFx1MDAzZSA0MiBnb3RvIDFmO1xcdFxcdC8qIEJQRl9LICovXFx0XFxcXFxcbitcXHRyMiA9IDI4O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgdzIgXFx1MDAzZSB3MSBnb3RvIDFmO1xcdFxcdC8qIEJQRl9YICovXFx0XFxcXFxcbitcXHRpZiByMiBcXHUwMDNlIHIxIGdvdG8gMWY7XFx0XFx0LyogQlBGX1ggKi9cXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rI2lmZGVmIF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUXFxuK1xcbitTRUMoXFxcIj9mZW50cnkucy9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4rX19hcmNoX3MzOTB4XFxuK19feGxhdGVkKFxcXCI3OiB3MSA9IHcwXFxcIilcXG4rX194bGF0ZWQoXFxcIjg6IHcxID0gdzFcXFwiKVxcbitfX3hsYXRlZChcXFwiOTogdzEgKz0gOFxcXCIpXFxuK19feGxhdGVkKFxcXCIxMDogdzEgPSB3MVxcXCIpXFxuK19fbmFrZWQgdm9pZCBhcmVuYV9wdHIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVthcmVuYV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMyA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNSA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gYWRkcl9zcGFjZV9jYXN0KHIwLCAwLCAxKTtcXHQvKiBuZWVkcyB6ZXh0ICovXFxcXFxcbitcXHRyMSArPSA4O1xcdFxcdFxcdC8qIG5lZWRzIHpleHQgKi9cXFxcXFxuK1xcdCoodTY0ICopKHIxICswKSA9IDQyO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKSxcXG4rXFx0ICBfX2ltbV9hZGRyKGFyZW5hKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKy8qIENoZWNrIGlmIHByb2JlIG1lbSBsb2FkcyBrZWVwIHRoZWlyIHplcm8gZXh0ZW5zaW9uLiAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX2FyY2hfczM5MHhcXG4rX194bGF0ZWQoXFxcIjM6IHIxID0gKih1NjQgKikocjAgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIjQ6IHIyID0gKih1MzIgKikocjAgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIjU6IHcyID0gdzJcXFwiKVxcbitfX3hsYXRlZChcXFwiNjogcjMgPSAqKHUxNiAqKShyMCArMClcXFwiKVxcbitfX3hsYXRlZChcXFwiNzogdzMgPSB3M1xcXCIpXFxuK19feGxhdGVkKFxcXCI4OiByNCA9ICoodTggKikocjAgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIjk6IHc0ID0gdzRcXFwiKVxcbitfX25ha2VkIHZvaWQgcHJvYmVfbWVtKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gKih1NjQgKikocjAgKyAwKTtcXHQvKiBCUEZfUFJPQkVfTUVNICovXFx0XFxcXFxcbitcXHRyMiA9ICoodTMyICopKHIwICsgMCk7XFx0LyogQlBGX1BST0JFX01FTSAqL1xcdFxcXFxcXG4rXFx0cjMgPSAqKHUxNiAqKShyMCArIDApO1xcdC8qIEJQRl9QUk9CRV9NRU0gKi9cXHRcXFxcXFxuK1xcdHI0ID0gKih1OCAqKShyMCArIDApO1xcdC8qIEJQRl9QUk9CRV9NRU0gKi9cXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0LyogbWFrZSB0aGUgcmVnaXN0ZXJzIHVzZWQgKi8gXFxcXFxcbitcXHRyMCArPSByMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwICs9IHIzO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgKz0gcjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdClcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjUxOjMwLjEyOTI4MjQ3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3NDczMTY3MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNcIixcbiAgICBcImJwZl9pbnNuX2RlZjMyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzIG9yIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3N2ZlMjFhZDhlZWY3Njc4ZjhhNWVhYzA3MDQwY2NkOGRkM2I0YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDAwOjUxOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMuLjM5YjBkYjJhNGYxN2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTYyLDExICsxNjIsNiBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiBcdCAqL1xuIFx0dTMyIGZyYW1lbm87XG4tXHQvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZVxuLVx0ICogd3JpdGluZyBpbnNuLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBzdWJyZWdfZGVmIGlzIHVzZWQgYmVmb3JlIGFueSBpbnNuXG4tXHQgKiBwYXRjaGluZyB3aGljaCBvbmx5IGhhcHBlbnMgYWZ0ZXIgbWFpbiB2ZXJpZmljYXRpb24gZmluaXNoZWQuXG4tXHQgKi9cbi1cdHMzMiBzdWJyZWdfZGVmO1xuIFx0LyogaWYgKCFwcmVjaXNlIFx1MDAyNlx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xNjMxLDcgKzE2MjYsNiBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcbiB9O1xuIFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpO1xuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKTtcbiB2b2lkIGJwZl9tYXJrX3N1YnByb2dfZXhjX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKTtcbiBib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5AQCAtMTY1NSw1ICsxNjQ5LDYgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIFxuICNlbmRpZiAvKiBfTElOVVhfQlBGX1ZFUklGSUVSX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOS4uN2M0NTk5ZTY1ZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiBcdFx0dmVyYm9zZShlbnYsIFwic3RhY2s9JXMgYmVmb3JlIFwiLCBlbnYtXHUwMDNldG1wX3N0cl9idWYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCIlZDogXCIsIGlkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbitcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlcmUgaXMgYSBoaXN0b3J5IHJlY29yZCB0aGF0IHNvbWUgcmVnaXN0ZXJzIGdhaW5lZCByYW5nZSBhdCB0aGlzIGluc24sXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNhc20uYyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbmluZGV4IDAzOTFiM2JjMDA3MzQuLjUwYjNjYTUxNDlhMGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jXG4rKysgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXG5AQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9lbmRfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAlcyVkIHIlZFxcblwiLFxuK1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzJWQgciVkXCIsXG4gXHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1RPX0JFID8gXCJiZVwiIDogXCJsZVwiLFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2Jzd2FwX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLFxuIFx0XHRcdCAgICAgICB2b2lkICpwcml2YXRlX2RhdGEsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4tXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYnN3YXAlZCByJWRcXG5cIixcbitcdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFwiLFxuIFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0aW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gfVxuQEAgLTE5NywxOSArMTk3LDE5IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHByaW50X2JwZl9lbmRfaW5zbih2ZXJib3NlLCBjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTkVHKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkID0gLSVjJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVjJWQgPSAtJWMlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChpc19hZGRyX3NwYWNlX2Nhc3QoaW5zbikpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCAoKHUzMilpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDE2LCAodTE2KWluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVjJWQgJXMgJXMlYyVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRcdGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aXNfc2Rpdl9zbW9kKGluc24pID8gYnBmX2FsdV9zaWduX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF1cbkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKVxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0ZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0FERCB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfQU5EIHx8XG4gXHRcdFx0ICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfT1IgfHwgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1hPUikpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGxvY2sgKiglcyAqKShyJWQgJStkKSAlcyByJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGxvY2sgKiglcyAqKShyJWQgJStkKSAlcyByJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsXG5AQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlK2QpLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcIjY0XCIgOiBcIlwiLFxuIFx0XHRcdFx0YnBmX2F0b21pY19hbHVfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9IGF0b21pYyVzX2NtcHhjaGcoKCVzICopKHIlZCAlK2QpLCByMCwgciVkKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJStkKSwgcjAsIHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXCI2NFwiIDogXCJcIixcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbkBAIC0yNjIsNDQgKzI2Miw0NCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9YQ0hHKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJStkKSwgciVkKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUrZCksIHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcIjY0XCIgOiBcIlwiLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlK2QpKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9TVE9SRV9SRUwpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJStkKSwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHXyUwMnhcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHXyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1QpIHtcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9ICVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIG5vc3BlY1xcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbm9zcGVjXCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19zdF8lMDJ4XFxuXCIsIGluc24tXHUwMDNlY29kZSk7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19zdF8lMDJ4XCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGR4XyUwMnhcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHX2xkeF8lMDJ4XCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcblwiLFxuK1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcIixcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG5AQCAtMzA3LDEyICszMDcsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlaW1tKTtcbkBAIC0zMzIsMTIgKzMzMiwxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRpZiAoaXNfcHRyIFx1MDAyNlx1MDAyNiAhYWxsb3dfcHRyX2xlYWtzKVxuIFx0XHRcdFx0aW1tID0gMDtcbiBcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAlc1wiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRfX2Z1bmNfaW1tX25hbWUoY2JzLCBpbnNuLCBpbW0sXG4gXHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSkpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGRfJTAyeFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGRfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xuQEAgLTM0NywzNSArMzQ3LDM1IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGNoYXIgdG1wWzY0XTtcbiBcbiBcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkge1xuLVx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsIHBjJXNcXG5cIixcbitcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgY2FsbCBwYyVzXCIsXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0c3RyY3B5KHRtcCwgXCJ1bmtub3duXCIpO1xuLVx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsICVzIyVkXFxuXCIsIGluc24tXHUwMDNlY29kZSxcbitcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgY2FsbCAlcyMlZFwiLCBpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRcdF9fZnVuY19nZXRfbmFtZShjYnMsIGluc24sXG4gXHRcdFx0XHRcdFx0XHR0bXAsIHNpemVvZih0bXApKSxcbiBcdFx0XHRcdFx0aW5zbi1cdTAwM2VpbW0pO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RvIHBjJStkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RvIHBjJStkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG94IHIlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b3ggciVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pDT05EKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBtYXlfZ290byBwYyUrZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUDMyIHwgQlBGX0pBKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b2wgcGMlK2RcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG9sIHBjJStkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGV4aXRcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGV4aXRcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcIiglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUrZFxcblwiLFxuK1x0XHRcdFx0XCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0YnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTM4MywxNCArMzgzLDE0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLFxuLVx0XHRcdFx0XCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXG5cIixcbitcdFx0XHRcdFwiKCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJStkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICd3JyA6ICdyJyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XSxcbiBcdFx0XHRcdCh1MzIpaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlc1xcblwiLFxuK1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVzXCIsXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBicGZfY2xhc3Nfc3RyaW5nW2NsYXNzXSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi43YjM1MTBkNDZiMzc3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTQ0LDE1ICs0NCw2MSBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdH1cbiB9XG4gXG4tLyogUmV0dXJuIFRSVUUgaWYgSU5TTiBoYXMgZGVmaW5lZCBhbnkgMzItYml0IHZhbHVlIGV4cGxpY2l0bHkuICovXG4tc3RhdGljIGJvb2wgaW5zbl9oYXNfZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuKy8qXG4rICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcdTAwM2U9IDAuXG4rICogUmV0dXJucyBUUlVFIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcyBvbiA2NC1iaXQsXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cbisgKi9cbitzdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdGludCBkc3RfcmVnID0gaW5zbl9kZWZfcmVnbm8oaW5zbik7XG4rXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuK1x0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG4rXHR1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4rXHRib29sIG1vZGVfbWVtO1xuK1xuK1x0Lyogc3VicmVnaXN0ZXIgZW5kaW5lc3Mgc3dhcCAqL1xuK1x0aWYgKChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9BTFU2NCkgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9FTkQgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tICE9IDY0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiB3MCArPSAxICovXG4rXHRpZiAoY2xhc3MgPT0gQlBGX0FMVSBcdTAwMjZcdTAwMjYgb3AgIT0gQlBGX0VORClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApLCBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXG4rXHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGluc24tXHUwMDNlb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IDEpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIG5vbiA2NC1iaXQsIG5vbiBzaWduZWQgZXh0ZW5kZWQgbG9hZHMgKi9cbitcdG1vZGVfbWVtID0gbW9kZSA9PSBCUEZfTUVNIHx8IG1vZGUgPT0gQlBGX1BST0JFX01FTSB8fCBtb2RlID09IEJQRl9QUk9CRV9NRU0zMjtcbitcdGlmIChjbGFzcyA9PSBCUEZfTERYIFx1MDAyNlx1MDAyNiBtb2RlX21lbSBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIGF0b21pY3MsIHNlZSBpbnNuX2RlZl9yZWdubygpICovXG4rXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChkc3RfcmVnID09IC0xKVxuK1x0LyogYm90aCBMRF9JTkQgYW5kIExEX0FCUyByZXR1cm4gMzItYml0IGRhdGEuICovXG4rXHRpZiAoY2xhc3MgPT0gQlBGX0xEIFx1MDAyNlx1MDAyNiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiAhYnBmX2lzX3JlZzY0KGluc24sIGRzdF9yZWcsIE5VTEwsIERTVF9PUCk7XG4rXHQvKiBDb25zZXJ2YXRpdmVseSByZXR1cm4gdHJ1ZSBhdCBkZWZhdWx0LiAqL1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90XG4rICogZXhwbGljaXRseSBkZWZpbmUgYSAzMi1iaXQgdmFsdWUuXG4rICovXG4raW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuK1xuK1x0aWYgKGRzdF9yZWcgXHUwMDNjIDAgfHwgYnBmX2lzX3JlZzY0KGluc24pKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gZHN0X3JlZztcbiB9XG4gXG4gc3RhdGljIGludCBrZnVuY19kZXNjX2NtcF9ieV9pbW1fb2ZmKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5AQCAtMTY5LDcgKzIxNSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZVxuIFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cbiBcdCAqL1xuLVx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpO1xuK1x0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpIFx1MDAzZT0gMDtcbiBcbiBcdGlmIChjbnQgPT0gMSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE4MSw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpID0gb2ZmOyBpIFx1MDAzYyBvZmYgKyBjbnQgLSAxOyBpKyspIHtcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0ncyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqL1xuIFx0XHRkYXRhW2ldLnNlZW4gPSBvbGRfc2Vlbjtcbi1cdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBpKTtcbitcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBpKSBcdTAwM2U9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTYxNiwxMSArNjYyLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGlmIChsb2FkX3JlZyA9PSAtMSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qIE5PVEU6IGFyZyBcInJlZ1wiICh0aGUgZm91cnRoIG9uZSkgaXMgb25seSB1c2VkIGZvclxuLVx0XHRcdCAqICAgICAgIEJQRl9TVFggKyBTUkNfT1AsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyBOVUxMXG4tXHRcdFx0ICogICAgICAgaGVyZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoYnBmX2lzX3JlZzY0KFx1MDAyNmluc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7XG4rXHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpKys7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5pbmRleCAwYWFkZmJhZTBhY2M1Li43ODM1MWU0YTZmMjVmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXG4rKysgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbkBAIC00OTcsNyArNDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCIlM2Q6IFwiLCBpbnNuX2lkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpbnNuX2lkeF0pO1xuLVx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTsgLyogcmVtb3ZlIFxcbiAqL1xuIFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0dmVyYm9zZShlbnYsIFwiJSpjO1wiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICsxMDQyLDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiJTNkOiBcIiwgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwiXFx0ciVkOiBcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5baV0pO1xuQEAgLTEwNTgsNyArMTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdHNhJWQ6IFwiLCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pblthaV0pO1xuQEAgLTEwNzAsNyArMTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdGZwJStkOiBcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXSk7XG5AQCAtMTU0NSw2ICsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpZHhdKTtcbitcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFxuIFx0XHQvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi9cbiBcdFx0aWYgKGlzX2xkeF9zdHhfY2FsbCBcdTAwMjZcdTAwMjZcbkBAIC0yMDUwLDI5ICsyMDQ3LDM4IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4rXHR1MzIgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbitcdHUzMiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuK1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4rXHR1MzIgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4gfTtcbiBcbiAvKiBCaXRtYXNrIHdpdGggMXMgZm9yIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSBcdTAwM2NcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1MpIC0gMSlcbiBcbitzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH1cbitzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiArIDE2KTsgfVxuK3N0YXRpYyBpbmxpbmUgdTMyIG1hc2tfd2lkZW4odTMyIG0pIHsgcmV0dXJuIG0gfCAobSBcdTAwM2NcdTAwM2MgMTYpOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSBcdTAwM2VcdTAwM2UgMTYpOyB9XG4rXG4gLyogQ29tcHV0ZSBpbmZvLVx1MDAzZXt1c2UsZGVmfSBmaWVsZHMgZm9yIHRoZSBpbnN0cnVjdGlvbiAqL1xuIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdCAgIHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSBjcztcbi1cdHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSk7XG4tXHR1OCBjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4tXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHUxNiBzcmMgPSBCSVQoaW5zbi1cdTAwM2VzcmNfcmVnKTtcbi1cdHUxNiBkc3QgPSBCSVQoaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbi1cdHUxNiByMCAgPSBCSVQoMCk7XG4tXHR1MTYgZGVmID0gMDtcbi1cdHUxNiB1c2UgPSAweGZmZmY7XG4rXHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuK1x0Y29uc3QgdTggY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuK1x0Y29uc3QgdTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG4rXHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdGNvbnN0IHUzMiBzcmMgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlc3JjX3JlZyk7XG4rXHRjb25zdCB1MzIgZHN0ID0gcmVnNjRfbWFzayhpbnNuLVx1MDAzZWRzdF9yZWcpO1xuK1x0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xuK1x0Y29uc3QgdTMyIGRzdDMyID0gbWFza19sbyhkc3QpO1xuK1x0Y29uc3QgdTMyIHIwICA9IHJlZzY0X21hc2soMCk7XG4rXHR1MzIgZGVmID0gMDtcbitcdHUzMiB1c2UgPSBVMzJfTUFYO1xuIFxuIFx0c3dpdGNoIChjbGFzcykge1xuIFx0Y2FzZSBCUEZfTEQ6XG5AQCAtMjA4Myw4ICsyMDg5LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0dXNlID0gMDtcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0xEIHwgQlBGX0FCUzpcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfSU5EOlxuK1x0XHRjYXNlIEJQRl9BQlM6XG4rXHRcdGNhc2UgQlBGX0lORDpcbiBcdFx0XHQvKiBzdGljayB3aXRoIGRlZmF1bHRzICovXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yMDkyLDcgKzIwOTgsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Y2FzZSBCUEZfTERYOlxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuK1x0XHRcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xuK1x0XHRcdGRlZiA9IGRzdDtcbitcdFx0XHR1c2UgPSBzcmM7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX01FTVNYOlxuK1x0XHRcdC8qXG4rXHRcdFx0ICogc2lnbiBleHRlbnNpb24gZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXI7XG4rXHRcdFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXG4rXHRcdFx0ICovXG4gXHRcdFx0ZGVmID0gZHN0O1xuIFx0XHRcdHVzZSA9IHNyYztcbiBcdFx0XHRicmVhaztcbkBAIC0yMTEwLDEyICsyMTI0LDE5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0c3dpdGNoIChtb2RlKSB7XG4gXHRcdGNhc2UgQlBGX01FTTpcbiBcdFx0XHRkZWYgPSAwO1xuLVx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbitcdFx0XHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0FUT01JQzpcbitcdFx0Y2FzZSBCUEZfQVRPTUlDOiB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XG4rXHRcdFx0ICogdGhlIHZhbHVlIG9wZXJhbmQgYW5kIHIwIGFyZSByZWFkIGFzIDMyLWJpdCBmb3IgQlBGX1cgYXRvbWljcy5cbitcdFx0XHQgKi9cbitcdFx0XHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XG4rXHRcdFx0dTMyIHIwdiAgPSBzaXplID09IEJQRl9EVyA/IHIwIDogbWFza19sbyhyMCk7XG4rXG4gXHRcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWltbSkge1xuIFx0XHRcdGNhc2UgQlBGX0NNUFhDSEc6XG4tXHRcdFx0XHR1c2UgPSByMCB8IGRzdCB8IHNyYztcbitcdFx0XHRcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRkZWYgPSByMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX0xPQURfQUNROlxuQEAgLTIxMjQsMTAgKzIxNDUsMTAgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBCUEZfU1RPUkVfUkVMOlxuIFx0XHRcdFx0ZGVmID0gMDtcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbitcdFx0XHRcdHVzZSA9IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRkZWZhdWx0OlxuLVx0XHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuK1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuIFx0XHRcdFx0XHRkZWYgPSBzcmM7XG4gXHRcdFx0XHRlbHNlXG5AQCAtMjEzNSw2ICsyMTU2LDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfQUxVOlxuIFx0Y2FzZSBCUEZfQUxVNjQ6XG5AQCAtMjE0OCwxNCArMjE3MCwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IDA7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gc3JjO1xuK1x0XHRcdFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gc3JjIDogc3JjMzI7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0ZGVmID0gZHN0O1xuIFx0XHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0spXG4tXHRcdFx0XHR1c2UgPSBkc3Q7XG4rXHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBkc3QgOiBkc3QzMjtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0pNUDpcbkBAIC0yMTgxLDEzICsyMjAzLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHR1c2UgPSBkZWYgXHUwMDI2IH5CSVQoQlBGX1JFR18wKTtcbiBcdFx0XHRpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCBcdTAwMjZjcykpXG4gXHRcdFx0XHR1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTtcbitcdFx0XHRkZWYgPSBtYXNrX3dpZGVuKGRlZik7XG4rXHRcdFx0dXNlID0gbWFza193aWRlbih1c2UpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbi1cdFx0XHRcdHVzZSA9IGRzdDtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0dXNlID0gY2xhc3MgPT0gQlBGX0pNUCA/IGRzdCA6IGRzdDMyO1xuK1x0XHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpXG4rXHRcdFx0XHR1c2UgfD0gY2xhc3MgPT0gQlBGX0pNUCA/IHNyYyA6IHNyYzMyO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTIyMDksNiArMjIzMiw3IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbiBcdHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqc3RhdGU7XG4gXHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4rXHR1NjQgcG9zLCBpbnNuX3BvcztcbiBcdGludCBlcnIgPSAwLCBpLCBqO1xuIFx0Ym9vbCBjaGFuZ2VkO1xuIFxuQEAgLTIyNTIsOCArMjI3Niw4IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGludCBpbnNuX2lkeCA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbaV07XG4gXHRcdFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gXHUwMDI2c3RhdGVbaW5zbl9pZHhdO1xuIFx0XHRcdHN0cnVjdCBicGZfaWFycmF5ICpzdWNjO1xuLVx0XHRcdHUxNiBuZXdfb3V0ID0gMDtcbi1cdFx0XHR1MTYgbmV3X2luID0gMDtcbitcdFx0XHR1MzIgbmV3X291dCA9IDA7XG4rXHRcdFx0dTMyIG5ld19pbiA9IDA7XG4gXG4gXHRcdFx0c3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7XG4gXHRcdFx0Zm9yIChpbnQgcyA9IDA7IHMgXHUwMDNjIHN1Y2MtXHUwMDNlY250OyArK3MpXG5AQCAtMjI2Nyw4ICsyMjkxLDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgKytpKVxuLVx0XHRpbnNuX2F1eFtpXS5saXZlX3JlZ3NfYmVmb3JlID0gc3RhdGVbaV0uaW47XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgKytpKSB7XG4rXHRcdGludCBkZWYzMiA9IGJwZl9pbnNuX2RlZjMyKFx1MDAyNmluc25zW2ldKTtcbitcdFx0dTMyIG91dCA9IHN0YXRlW2ldLm91dDtcbitcdFx0dTMyIGluID0gc3RhdGVbaV0uaW47XG4rXG4rXHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pO1xuK1x0XHQvKlxuK1x0XHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIDMyLWJpdCBvcGVyYXRpb25zIGRvIG5vdCByZXNldCB1cHBlciBoYWx2ZXNcbitcdFx0ICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb25cbitcdFx0ICogcmVnaXN0ZXIgaWYgYW4gaW5zdHJ1Y3Rpb24gZGVmaW5lcyBhIDMyLWJpdCBzdWJyZWdpc3RlciBhbmQgdGhlXG4rXHRcdCAqIHVwcGVyIGhhbGYgb2YgdGhhdCByZWdpc3RlciBpcyBhbGl2ZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuK1x0XHRpbnNuX2F1eFtpXS56ZXh0X2RzdCA9IGRlZjMyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgKG1hc2tfaGkob3V0KSBcdTAwMjYgQklUKGRlZjMyKSk7XG4rXHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTDIpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwiTGl2ZSByZWdzIGJlZm9yZSBpbnNuOlxcblwiKTtcbkBAIC0yMjg0LDcgKzIzMjAsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRlbHNlXG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIi5cIik7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiIFwiKTtcbitcdFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2ldKTtcbitcdFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbitcdFx0XHRpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpXG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlKmM7IHpleHRcIiwgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJyAnKTtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJcXG5cIik7XG4gXHRcdFx0aWYgKGJwZl9pc19sZGltbTY0KFx1MDAyNmluc25zW2ldKSlcbiBcdFx0XHRcdGkrKztcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTZmMzVmNGU3MTViNi4uNDVkNGMwYTAwYTVkYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjEyOSwxMiArMjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiAvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuIHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4ge1xuLVx0czMyIHN1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbi1cbiBcdG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSk7XG4gXHRyZWctXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcbiBcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV91bmtub3duO1xuLVx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbiB9XG4gXG5AQCAtMjIxMCw3ICsyMjA3LDYgQEAgc3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBERUZfTk9UX1NVQlJFR1x0KDApXG4gc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxuIHtcbkBAIC0yMjE5LDcgKzIyMTUsNiBAQCBzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9SRUc7IGkrKykge1xuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2ldKTtcbi1cdFx0cmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHR9XG4gXG4gXHQvKiBmcmFtZSBwb2ludGVyICovXG5AQCAtMzAzMiwxMjAgKzMwMjcsMTQgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xuIH1cbiBcbi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYnkgdGhlIGZvbGxvd2luZyAzMi1iaXQgb3B0aW1pemF0aW9uXG4tICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlc1xuLSAqIG9uIDY0LWJpdCwgb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cbi0gKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tXHQgICAgICB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuLXtcbi1cdHU4IGNvZGUsIGNsYXNzLCBvcDtcbi1cbi1cdGNvZGUgPSBpbnNuLVx1MDAzZWNvZGU7XG4tXHRjbGFzcyA9IEJQRl9DTEFTUyhjb2RlKTtcbi1cdG9wID0gQlBGX09QKGNvZGUpO1xuLVx0aWYgKGNsYXNzID09IEJQRl9KTVApIHtcbi1cdFx0LyogQlBGX0VYSVQgZm9yIFwibWFpblwiIHdpbGwgcmVhY2ggaGVyZS4gUmV0dXJuIFRSVUVcbi1cdFx0ICogY29uc2VydmF0aXZlbHkuXG4tXHRcdCAqL1xuLVx0XHRpZiAob3AgPT0gQlBGX0VYSVQpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChvcCA9PSBCUEZfQ0FMTCkge1xuLVx0XHRcdC8qIEJQRiB0byBCUEYgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBtYXJraW5nXG4tXHRcdFx0ICogY2FsbGVyIHNhdmVkIGNsb2JiZXIgd2l0aCBEU1RfT1BfTk9fTUFSSyBmb3Igd2hpY2ggd2Vcbi1cdFx0XHQgKiBkb24ndCBjYXJlIHRoZSByZWdpc3RlciBkZWYgYmVjYXVzZSB0aGV5IGFyZSBhbnl3YXlcbi1cdFx0XHQgKiBtYXJrZWQgYXMgTk9UX0lOSVQgYWxyZWFkeS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHQvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZVxuLVx0XHRcdCAqIGNoZWNrLCBjb25zZXJ2YXRpdmVseSByZXR1cm4gVFJVRS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAodCA9PSBTUkNfT1ApXG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9FTkQgXHUwMDI2XHUwMDI2IChpbnNuLVx1MDAzZWltbSA9PSAxNiB8fCBpbnNuLVx1MDAzZWltbSA9PSAzMikpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgfHwgY2xhc3MgPT0gQlBGX0pNUCB8fFxuLVx0ICAgIChjbGFzcyA9PSBCUEZfQUxVIFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfRU5EIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSA2NCkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9BTFUgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuLVx0XHRpZiAodCAhPSBTUkNfT1ApXG4tXHRcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XG4tXHRcdC8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9TVFgpIHtcbi1cdFx0LyogQlBGX1NUWCAoaW5jbHVkaW5nIGF0b21pYyB2YXJpYW50cykgaGFzIG9uZSBvciBtb3JlIHNvdXJjZVxuLVx0XHQgKiBvcGVyYW5kcywgb25lIG9mIHdoaWNoIGlzIGEgcHRyLiBDaGVjayB3aGV0aGVyIHRoZSBjYWxsZXIgaXNcbi1cdFx0ICogYXNraW5nIGFib3V0IGl0LlxuLVx0XHQgKi9cbi1cdFx0aWYgKHQgPT0gU1JDX09QIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7XG4tXHR9XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4tXHRcdHU4IG1vZGUgPSBCUEZfTU9ERShjb2RlKTtcbi1cbi1cdFx0LyogTERfSU1NNjQgKi9cbi1cdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdFx0LyogQm90aCBMRF9JTkQgYW5kIExEX0FCUyByZXR1cm4gMzItYml0IGRhdGEuICovXG4tXHRcdGlmICh0ICE9IFNSQ19PUClcbi1cdFx0XHRyZXR1cm4gIGZhbHNlO1xuLVxuLVx0XHQvKiBJbXBsaWNpdCBjdHggcHRyLiAqL1xuLVx0XHRpZiAocmVnbm8gPT0gQlBGX1JFR182KVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVxuLVx0XHQvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfU1QpXG4tXHRcdC8qIFRoZSBvbmx5IHNvdXJjZSByZWdpc3RlciBmb3IgQlBGX1NUIGlzIGEgcHRyLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdC8qIENvbnNlcnZhdGl2ZWx5IHJldHVybiB0cnVlIGF0IGRlZmF1bHQuICovXG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWFya19pbnNuX3pleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLXtcbi1cdHMzMiBkZWZfaWR4ID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4tXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTtcbi1cdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24ndCBiZSBzdWItcmVnaXN0ZXIgYW55bW9yZS4gKi9cbi1cdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4tfVxuLVxuIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXG4gXHRcdFx0ICAgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXG4ge1xuLVx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpICsgZW52LVx1MDAzZWluc25faWR4O1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbi1cdGJvb2wgcnc2NDtcbiBcbiBcdG1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTtcbiBcbiBcdHJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVx0cnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTtcbiBcdGlmICh0ID09IFNSQ19PUCkge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgc291cmNlIG9wZXJhbmQgY2FuIGJlIHJlYWQgKi9cbiBcdFx0aWYgKHJlZy1cdTAwM2V0eXBlID09IE5PVF9JTklUKSB7XG5AQCAtMzE1Niw5ICszMDQ1LDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcbiBcdFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdGlmIChydzY0KVxuLVx0XHRcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcbi1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXG5AQCAtMzE2Niw3ICszMDUyLDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJmcmFtZSBwb2ludGVyIGlzIHJlYWQgb25seVxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuLVx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHRcdGlmICh0ID09IERTVF9PUClcbiBcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xuIFx0fVxuQEAgLTM4MjIsMTEgKzM3MDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdFx0aWYgKHNpemUgXHUwMDNjPSBzcGlsbF9zaXplIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XG4tXHRcdFx0XHQvKiBUaGUgZWFybGllciBjaGVja19yZWdfYXJnKCkgaGFzIGRlY2lkZWQgdGhlXG4tXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzMzIgc3VicmVnX2RlZiA9IHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xuLVxuIFx0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNiBzcGlsbF9zaXplID09IDQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzYz0gMzIpXG4gXHRcdFx0XHRcdC8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uXG5AQCAtMzgzNCw3ICszNzE0LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0XHRcdHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSA9ICpyZWc7XG4tXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXG4gXHRcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgZmlsbC5cbiBcdFx0XHRcdCAqIGNvZXJjZV9yZWdfdG9fc2l6ZSB3aWxsIGFkanVzdCB0aGUgYm91bmRhcmllcy5cbkBAIC02MjcxLDEyICs2MTUwLDYgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsXG4gXHRcdFx0XHRcdFx0ICAgIHZhbHVlX3JlZ25vKTtcbi1cdFx0XHRcdC8qIEEgbG9hZCBvZiBjdHggZmllbGQgY291bGQgaGF2ZSBkaWZmZXJlbnRcbi1cdFx0XHRcdCAqIGFjdHVhbCBsb2FkIHNpemUgd2l0aCB0aGUgb25lIGVuY29kZWQgaW4gdGhlXG4tXHRcdFx0XHQgKiBpbnNuLiBXaGVuIHRoZSBkc3QgaXMgUFRSLCBpdCBpcyBmb3Igc3VyZSBub3Rcbi1cdFx0XHRcdCAqIGEgc3ViLXJlZ2lzdGVyLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdFx0XHRpZiAoYmFzZV90eXBlKGluZm8ucmVnX3R5cGUpID09IFBUUl9UT19CVEZfSUQpIHtcbiBcdFx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmID0gaW5mby5idGY7XG4gXHRcdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLmJ0Zl9pZCA9IGluZm8uYnRmX2lkO1xuQEAgLTczODAsMTAgKzcyNTMsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0XHRcdGlmIChzcGkgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gc3BpO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG4tXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi1cdFx0XHQgKi9cbiBcdFx0XHRtYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XG4gXG4gXHRcdFx0cmVnID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbkBAIC05NDYzLDcgKzkzMzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXG4gXHRcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgQlBGX1JFR18wKTtcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xuQEAgLTEwNDgyLDkgKzEwMzUwLDYgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdH1cbiBcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpO1xuIFxuLVx0LyogaGVscGVyIGNhbGwgcmV0dXJucyA2NC1iaXQgdmFsdWUuICovXG4tXHRyZWdzW0JQRl9SRUdfMF0uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuLVxuIFx0LyogdXBkYXRlIHJldHVybiByZWdpc3RlciAoYWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZSkgKi9cbiBcdHJldF90eXBlID0gZm4tXHUwMDNlcmV0X3R5cGU7XG4gXHRyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7XG5AQCAtMTA3MjIsMzAgKzEwNTg3LDYgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XG4tICogdGhlIEJURiBmdW5jX3Byb3RvJ3MgcmV0dXJuIHZhbHVlIHNpemUgYW5kIGFyZ3VtZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcbi1cdFx0XHRcdCAgICAgdTMyIHJlZ25vLCBzaXplX3QgcmVnX3NpemUpXG4te1xuLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVxuLVx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xuLVx0XHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSByZWdfc2l6ZSA9PSBzaXplb2YodTY0KSA/XG4tXHRcdFx0REVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuLVx0fSBlbHNlIGlmIChyZWdfc2l6ZSA9PSBzaXplb2YodTY0KSkge1xuLVx0XHQvKiBGdW5jdGlvbiBhcmd1bWVudCAqL1xuLVx0XHRtYXJrX2luc25femV4dChlbnYsIHJlZyk7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHJlZ25vLFxuLVx0XHRcdFx0ICAgc2l6ZV90IHJlZ19zaXplKVxuLXtcbi1cdHJldHVybiBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBjdXJfcmVncyhlbnYpLCByZWdubywgcmVnX3NpemUpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VrZnVuY19mbGFncyBcdTAwMjYgS0ZfQUNRVUlSRTtcbkBAIC0xMjk3NCw3ICsxMjgxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXg7XG4gXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xuLVx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcbiBcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQ7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbkBAIC0xMzAxOCw3ICsxMjg1OCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiZmFpbGVkIHRvIG1hcmsgczMyIHJhbmdlIGZvciByZXR2YWwgaW4gZm9ya2VkIHN0YXRlIGZvciBsb2NrXFxuXCIpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdFx0X19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7XG4gXHR9IGVsc2UgaWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX19fYnBmX3RyYXBdKSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcInVuZXhwZWN0ZWQgX19icGZfdHJhcCgpIGR1ZSB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlP1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtMTMxNjgsNyArMTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4gXG4gXHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbcmVnbm9dKTtcbi1cdFx0cmVnc1tyZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG5AQCAtMTMxOTAsNyArMTMwMjgsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAobWV0YS5idGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxuIFx0XHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXG4gXHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cdTAwM2VzaXplKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4gXHRcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cHRyX3R5cGVfaWQpO1xuIFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG5AQCAtMTMyODEsNyArMTMxMTgsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXHRcdH1cbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpO1xuIFx0XHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcdTAwMjZtZXRhKSkge1xuIFx0XHRcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XG4gXHRcdFx0aWYgKGlkIFx1MDAzYyAwKVxuQEAgLTEzMzE4LDE4ICsxMzE1NCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0Y2FsbGVyX2luZm8tXHUwMDNlc3RhY2tfYXJnX2NudCA9IHN0YWNrX2FyZ19jbnQ7XG4gXHR9XG4gXG4tXHRhcmdzID0gKGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKikobWV0YS5mdW5jX3Byb3RvICsgMSk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIG5hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcbi1cdFx0dTMyIHJlZ25vID0gaSArIDE7XG4tXG4tXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdC8qIHNjYWxhci4gZW5zdXJlZCBieSBjaGVja19rZnVuY19hcmdzKCkgKi9cbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXHUwMDNlc2l6ZSk7XG4tXHR9XG4tXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTE0ODIzLDE0ICsxNDY0NywxNCBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BKVxuIFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4gXG4tXHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4tXG4tXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpXG4rXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuIFx0XHRcdCAqIDY0LWJpdCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIDMyLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGF1eC1cdTAwM2VuZWVkc196ZXh0ID0gdHJ1ZTtcbitcdFx0XHRhdXgtXHUwMDNlemV4dF9kc3QgPSB0cnVlO1xuK1x0XHR9XG4gXG4gXHRcdC8qIEFueSBhcml0aG1ldGljIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb24gYXJlbmEgcG9pbnRlcnMgKi9cbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQ5NjksNiArMTQ3OTMsNyBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gLyogY2hlY2sgdmFsaWRpdHkgb2YgMzItYml0IGFuZCA2NC1iaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zICovXG4gc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbitcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4ID0gY3VyX2F1eChlbnYpO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuIFx0dTggb3Bjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4gXHRpbnQgZXJyO1xuQEAgLTE1MDI2LDE4ICsxNDg1MSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0pIHtcbiBcdFx0XHRcdFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cbiBcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4tXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xuK1x0XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gMSkgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4gXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xuLVx0XHRcdFx0XHRcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuLVx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDApIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSBSMlxuIFx0XHRcdFx0XHQgKiBjb3B5IHJlZ2lzdGVyIHN0YXRlIHRvIGRlc3QgcmVnXG4gXHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcbiBcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xuIFx0XHRcdFx0XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbkBAIC0xNTA1NSw3ICsxNDg3Niw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4gXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0XHRcdFx0fVxuQEAgLTE1MDgwLDcgKzE0OTAwLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRcdGlmICghaXNfc3JjX3JlZ191MzIpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHQvKiBjYXNlOiBXMSA9IChzOCwgczE2KVcyICovXG4gXHRcdFx0XHRcdFx0Ym9vbCBub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgXHUwMDNjICgxVUxMIFx1MDAzY1x1MDAzYyAoaW5zbi1cdTAwM2VvZmYgLSAxKSk7XG5AQCAtMTUwOTAsNyArMTQ5MDksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbiBcdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbiBcdFx0XHRcdFx0XHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE1OTU5LDEyICsxNTc3Nyw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICgoIShyZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiAhKGtub3duX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkpIHx8XG4gXHRcdCAgICByZWctXHUwMDNlZGVsdGEgPT0ga25vd25fcmVnLVx1MDAzZWRlbHRhKSB7XG4tXHRcdFx0czMyIHNhdmVkX3N1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbi1cbiBcdFx0XHQqcmVnID0gKmtub3duX3JlZztcbi1cdFx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0czMyIHNhdmVkX3N1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbiBcdFx0XHRzMzIgc2F2ZWRfb2ZmID0gcmVnLVx1MDAzZWRlbHRhO1xuIFx0XHRcdHUzMiBzYXZlZF9pZCA9IHJlZy1cdTAwM2VpZDtcbiBcbkBAIC0xNTk3NCwxMiArMTU3ODgsMTEgQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3NcbiBcdFx0XHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyArPSBkZWx0YSAqL1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXG4tXHRcdFx0ICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxuK1x0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpXG4rXHRcdFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXG4gXHRcdFx0ICovXG4gXHRcdFx0cmVnLVx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xuIFx0XHRcdHJlZy1cdTAwM2VpZCA9IHNhdmVkX2lkO1xuLVx0XHRcdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gc2F2ZWRfc3VicmVnX2RlZjtcbiBcbiBcdFx0XHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiBcdFx0XHRzY2FsYXJfbWluX21heF9hZGQocmVnLCBcdTAwMjZmYWtlX3JlZyk7XG5AQCAtMTY0MTQsOCArMTYyMjcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxuIFx0ICovXG4gXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi1cdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbiBcdC8qXG4gXHQgKiBTZWUgYnBmX2dlbl9sZF9hYnMoKSB3aGljaCBlbWl0cyBhIGhpZGRlbiBCUEZfRVhJVCB3aXRoIHIwPTBcbiBcdCAqIHdoaWNoIG11c3QgYmUgZXhwbG9yZWQgYnkgdGhlIHZlcmlmaWVyIHdoZW4gaW4gYSBzdWJwcm9nLlxuQEAgLTE2NzMwLDcgKzE2NTQxLDYgQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4gXHRpbnQgaTtcbiBcbiBcdGlmIChicGZfaGVscGVyX2NhbGwoY2FsbCkpIHtcbi1cbiBcdFx0aWYgKGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgY2FsbC1cdTAwM2VpbW0sIFx1MDAyNmZuKSBcdTAwM2MgMClcbiBcdFx0XHQvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNzQ3NSw2ICsxNzI4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiVkOiBcIiwgZW52LVx1MDAzZWluc25faWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2luc25fcHJpbnRfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gZW52LVx1MDAzZXByZXZfbG9nX3BvcztcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jIGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXG5pbmRleCA1ZTdjYjhiMzZmZWYyLi41NTc5MTczYTYxZTNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbkBAIC0xMDcsMTQgKzEwNyw3IEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gXG4gXHRwID0gYnVmO1xuIFx0d2hpbGUgKCpwICE9ICdcXDAnKSB7XG4tXHRcdGlmICgqcCA9PSAnXFxuJykge1xuLVx0XHRcdG1lbW1vdmUocCArIDMsIHAsIHN0cmxlbihidWYpICsgMSAtIChwIC0gYnVmKSk7XG4tXHRcdFx0LyogQWxpZ24gZWFjaCBpbnN0cnVjdGlvbiBkdW1wIHJvdyBsZWZ0LiAqL1xuLVx0XHRcdCpwKysgPSAnXFxcXCc7XG4tXHRcdFx0KnArKyA9ICdsJztcbi1cdFx0XHQvKiBPdXRwdXQgbXVsdGlsaW5lIGNvbmNhdGVuYXRpb24uICovXG4tXHRcdFx0KnArKyA9ICdcXFxcJztcbi1cdFx0fSBlbHNlIGlmICgqcCA9PSAnXHUwMDNjJyB8fCAqcCA9PSAnXHUwMDNlJyB8fCAqcCA9PSAnfCcgfHwgKnAgPT0gJ1x1MDAyNicpIHtcbitcdFx0aWYgKCpwID09ICdcdTAwM2MnIHx8ICpwID09ICdcdTAwM2UnIHx8ICpwID09ICd8JyB8fCAqcCA9PSAnXHUwMDI2Jykge1xuIFx0XHRcdG1lbW1vdmUocCArIDEsIHAsIHN0cmxlbihidWYpICsgMSAtIChwIC0gYnVmKSk7XG4gXHRcdFx0LyogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyLiAqL1xuIFx0XHRcdCpwKysgPSAnXFxcXCc7XG5AQCAtMTI5LDE2ICsxMjIsMTAgQEAgcHJpbnRfaW5zbl9mb3JfZ3JhcGgodm9pZCAqcHJpdmF0ZV9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBzdGF0aWMgdm9pZCBfX3ByaW50ZigyLCAzKVxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XG4tXHRjaGFyIGNob21wZWRfZm10W2xdO1xuIFx0dmFfbGlzdCBhcmdzO1xuIFxuIFx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdGlmIChsIFx1MDAzZSAwKSB7XG4tXHRcdHN0cm5jcHkoY2hvbXBlZF9mbXQsIGZtdCwgbCAtIDEpO1xuLVx0XHRjaG9tcGVkX2ZtdFtsIC0gMV0gPSAnXFwwJztcbi1cdH1cbi1cdGpzb253X3ZwcmludGZfZW5xdW90ZShqc29uX3d0ciwgY2hvbXBlZF9mbXQsIGFyZ3MpO1xuK1x0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xuIFx0dmFfZW5kKGFyZ3MpO1xuIH1cbiBcbkBAIC0zNTEsNiArMzM4LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9wbGFpbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxuIFxuIFx0XHRwcmludGYoXCIlNHU6IFwiLCBpKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICsgaSwgdHJ1ZSk7XG4rXHRcdHByaW50ZihcIlxcblwiKTtcbiBcbiBcdFx0aWYgKG9wY29kZXMpIHtcbiBcdFx0XHRwcmludGYoXCIgICAgICAgXCIpO1xuQEAgLTQxNyw2ICs0MDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxuIFxuIFx0XHRwcmludGYoXCIldTogXCIsIGluc25fb2ZmKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xuK1x0XHRwcmludGYoXCJcXFxcbFxcXFxcXG5cIik7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwiXFxcXCBcXFxcIFxcXFwgXFxcXCBcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuaW5kZXggZjUyOWYxYzhjMTcxZC4uMzAyMjEzNTI1NjhkNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuQEAgLTU1LDEwICs1NSw5IEBAIHN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4gXHQgKiBmb3IgZWFjaCBpbnN0cnVjdGlvbiAoRkYgc3RhbmRzIGZvciBpbnN0cnVjdGlvbiBgY29kZWAgYnl0ZSkuXG4gXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cbiBcdCAqIEUuZy46IFwiKDg1KSBjYWxsIGZvbyMxMFwiIC1cdTAwM2UgXCJjYWxsIGZvb1wiLlxuLVx0ICogQWxzbyByZW1vdmUgbmV3bGluZSBpbiB0aGUgZW5kICh0aGUgJ21heChzdHJsZW4oYnVmKSAtIDEsIDApJyB0aGluZykuXG4gXHQgKi9cbiBcdHBmeF9lbmQgPSBidWYgKyA1O1xuLVx0c2Z4X3N0YXJ0ID0gYnVmICsgbWF4KChpbnQpc3RybGVuKGJ1ZikgLSAxLCAwKTtcbitcdHNmeF9zdGFydCA9IGJ1ZiArIChpbnQpc3RybGVuKGJ1Zik7XG4gXHRpZiAoc3RybmNtcChwZnhfZW5kLCBcImNhbGwgXCIsIDUpID09IDAgXHUwMDI2XHUwMDI2ICh0bXAgPSBzdHJyY2hyKGJ1ZiwgJyMnKSkpXG4gXHRcdHNmeF9zdGFydCA9IHRtcDtcbiBcdGxlbiA9IHNmeF9zdGFydCAtIHBmeF9lbmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMTI0LDYgKzEyNCw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJpcnEuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2N0eF9wdHJfcGFyYW0uc2tlbC5oXCJcbisjaW5jbHVkZSBcInZlcmlmaWVyX3pleHQuc2tlbC5oXCJcbiBcbiAjZGVmaW5lIE1BWF9FTlRSSUVTIDExXG4gXG5AQCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcdFx0XHQgICAgICB7IFJVTihpcnEpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKVx0XHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jdHhfcHRyX3BhcmFtKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2N0eF9wdHJfcGFyYW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XG4gXG4gc3RhdGljIGludCBpbml0X3Rlc3RfdmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjaGFyICptYXBfbmFtZSlcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGQzZWE2NjFiNzc4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXG5AQCAtMCwwICsxLDM4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcbitcbisvKiB0byByZXRhaW4gZGVidWcgaW5mbyBmb3IgQlRGIGdlbmVyYXRpb24gKi9cbit2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcbit7XG4rXHRicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbitcdGJwZl9hcmVuYV9hbGxvY19wYWdlcygwLCAwLCAwLCAwLCAwKTtcbitcdGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjggPSByMDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XHQvKiBpbmplY3Qgc29tZSB2YWx1ZSBmb3IgcjYncyB1cHBlciBoYWxmICovXHRcXFxuK1x0aWYgcjggIT0gMCBnb3RvIDFmO1x0XHQvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovXHRcXFxuK1x0cjYgPSAzMjtcdFx0XHQvKiBmdWxsIDY0LWJpdCBkZWYgKi9cdFx0XHRcdFxcXG4rXHRnb3RvIDJmO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rMTpcdHc2ID0gMzI7XHRcdFx0LyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi9cdFx0XFxcbisyOlx0cjAgPSByNjtcdFx0XHQvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFxcXG4rXHRcdFx0XHRcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1x0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gdzB7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXHUwMDNlIG5vIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCI7IHpleHRcIilcbitfX25ha2VkIHZvaWQgbm9femV4dF9hbHUzMl9oaV91bnVzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHcxID0gdzA7XHRcdC8qIE1PViAqL1x0XHRcXFxuK1x0dzIgPSB3MTtcdFx0XHRcdFx0XFxcbitcdHcyICs9IHcxO1x0XHQvKiBBTFUzMiwgQlBGX1ggKi9cdFxcXG4rXHR3MiArPSAxO1x0XHQvKiBBTFUzMiwgQlBGX0sgKi9cdFxcXG4rXHR3MiA9IHcyO1x0XHQvKiBrZWVwIHcyIGFsaXZlIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbiAqLyBcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIDY0LWJpdCBkZWZpbml0aW9uIGlzIG5ldmVyIHplcm8gZXh0ZW5kZWQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCJyMSA9IHIwe3suKn19OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIG5vX3pleHRfbW92NjQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHIxID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJyMSA9ICoodTMyICopKHIxMCAtOCl7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9uYXJyb3dfbG9hZF9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1x0XHRcdFx0XFxcbitcdHIxID0gKih1MzIgKikocjEwIC0gOCk7XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgYXRvbWljIGZldGNoIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInIxID0gYXRvbWljX2ZldGNoX2FkZCgodTMyICopKHIxMCAtOCksIHIxKXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuK1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHQuOGJ5dGUgJVtmZXRjaF9hZGQzMl07XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9pbnNuKGZldGNoX2FkZDMyLFxuK1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogMzItYml0IGF0b21pYyBjbXB4Y2hnIHJlc3VsdCAocjApIHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwicjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9jbXB4Y2hnMzJfaGlfdXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4rXHR3MCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0LjhieXRlICVbY21weGNoZzMyXTtcdFx0XHRcdFxcXG4rXHRyMiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByMjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9pbnNuKGNtcHhjaGczMixcbitcdFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQ01QWENIRywgQlBGX1JFR18xMCwgQlBGX1JFR18xLCAtOCkpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLVx1MDAzZSB6ZXh0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3NiA9IDMye3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIHpleHRfY2ZnX2hpX3VzZWRfb25lX2JyYW5jaCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzYgPSAzMjtcdFx0XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogcjEncyB1cHBlciBoYWxmIGlzIGRlYWQsIHNvICd3MSA9IDEnIG11c3QgTk9UIGJlIG1hcmtlZCBmb3IgemVybyBleHRlbnNpb24uICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19ub3RfbXNnKFwidzEgPSAxe3suKn19OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyNiBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcXFxuK1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBMRF9BQlMgZGVmaW5lcyByMDsgd2hlbiByMCBpcyByZWFkIGFzIDY0LWJpdCBpdCBtdXN0IGJlIHplcm8gZXh0ZW5kZWQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInIwID0gKih1OCAqKXNrYlswXXt7Lip9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2xkX2Fic19oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjYgPSByMTtcdFx0XHRcdFx0XFxcbitcdHIwID0gKih1OCAqKXNrYlswXTtcdFx0XHRcdFxcXG4rXHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByNztcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncyID0gMXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBoZWxwZXJfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjEgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHR3MiA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfdHJhY2VfcHJpbnRrXTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX3RyYWNlX3ByaW50aylcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIHN1YnByb2dyYW0gcGFyYW1ldGVycyBhcmUgY29uc2VydmF0aXZlbHkgcmVhZCBhcyA2NC1iaXQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gdzB7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgc3VicHJvZ19wYXJhbV9yZWFkX2FzXzY0Yml0KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDtcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBrZnVuYyBwYXJhbWV0ZXJzIGFyZSB6ZXJvIGV4dGVuZGVkICovXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gMXt7ICt9fTsgemV4dFwiKVxuK19fbXNnKFwidzIgPSAxe3sgK319OyB6ZXh0XCIpXG4rX19tc2coXCJ3MyA9IDF7eyArfX07IHpleHRcIilcbitfX21zZyhcInc0ID0gMXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBrZnVuY19wYXJhbV9yZWFkX3Blcl9idGYodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdHcyID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0dzMgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHR3NCA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgYnBmX2tmdW5jX2NhbGxfdGVzdDQ7XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcIjsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBhbHUzMl9hbmRfMzJiaXRfY29uZGl0aW9uYWwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHcxID0gdzA7XHRcdFx0XHRcdFxcXG4rXHRpZiB3MSBcdTAwM2UgNDIgZ290byAxZjtcdFx0LyogQlBGX0sgKi9cdFxcXG4rXHR3MiA9IDI4O1x0XHRcdFx0XHRcXFxuK1x0aWYgdzIgXHUwMDNlIHcxIGdvdG8gMWY7XHRcdC8qIEJQRl9YICovXHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3MSA9IHcwe3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIGFsdTMyX2FuZF82NGJpdF9jb25kaXRpb25hbCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbitcdGlmIHIxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbitcdHIyID0gMjg7XHRcdFx0XHRcdFxcXG4rXHRpZiByMiBcdTAwM2UgcjEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCI7IHpleHRcIilcbitfX25ha2VkIHZvaWQgYWx1NjRfYW5kX2NvbmRpdGlvbmFscyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0cjEgPSByMDtcdFx0XHRcdFx0XFxcbitcdGlmIHcxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbitcdGlmIHIxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbitcdHIyID0gMjg7XHRcdFx0XHRcdFxcXG4rXHRpZiB3MiBcdTAwM2UgdzEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4rXHRpZiByMiBcdTAwM2UgcjEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1RcbitcbitTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4rX19hcmNoX3MzOTB4XG4rX194bGF0ZWQoXCI3OiB3MSA9IHcwXCIpXG4rX194bGF0ZWQoXCI4OiB3MSA9IHcxXCIpXG4rX194bGF0ZWQoXCI5OiB3MSArPSA4XCIpXG4rX194bGF0ZWQoXCIxMDogdzEgPSB3MVwiKVxuK19fbmFrZWQgdm9pZCBhcmVuYV9wdHIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVbYXJlbmFdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjMgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHI1ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9hcmVuYV9hbGxvY19wYWdlc107XHRcdFx0XFxcbitcdHIxID0gYWRkcl9zcGFjZV9jYXN0KHIwLCAwLCAxKTtcdC8qIG5lZWRzIHpleHQgKi9cXFxuK1x0cjEgKz0gODtcdFx0XHQvKiBuZWVkcyB6ZXh0ICovXFxcbitcdCoodTY0ICopKHIxICswKSA9IDQyO1x0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9hcmVuYV9hbGxvY19wYWdlcyksXG4rXHQgIF9faW1tX2FkZHIoYXJlbmEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisjZW5kaWZcbitcbisvKiBDaGVjayBpZiBwcm9iZSBtZW0gbG9hZHMga2VlcCB0aGVpciB6ZXJvIGV4dGVuc2lvbi4gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX2FyY2hfczM5MHhcbitfX3hsYXRlZChcIjM6IHIxID0gKih1NjQgKikocjAgKzApXCIpXG4rX194bGF0ZWQoXCI0OiByMiA9ICoodTMyICopKHIwICswKVwiKVxuK19feGxhdGVkKFwiNTogdzIgPSB3MlwiKVxuK19feGxhdGVkKFwiNjogcjMgPSAqKHUxNiAqKShyMCArMClcIilcbitfX3hsYXRlZChcIjc6IHczID0gdzNcIilcbitfX3hsYXRlZChcIjg6IHI0ID0gKih1OCAqKShyMCArMClcIilcbitfX3hsYXRlZChcIjk6IHc0ID0gdzRcIilcbitfX25ha2VkIHZvaWQgcHJvYmVfbWVtKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRyMiA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfcmRvbmx5X2Nhc3RdO1x0XHRcdFxcXG4rXHRyMSA9ICoodTY0ICopKHIwICsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuK1x0cjIgPSAqKHUzMiAqKShyMCArIDApO1x0LyogQlBGX1BST0JFX01FTSAqL1x0XFxcbitcdHIzID0gKih1MTYgKikocjAgKyAwKTtcdC8qIEJQRl9QUk9CRV9NRU0gKi9cdFxcXG4rXHRyNCA9ICoodTggKikocjAgKyAwKTtcdC8qIEJQRl9QUk9CRV9NRU0gKi9cdFxcXG4rXHRyMCA9IHIxO1x0XHQvKiBtYWtlIHRoZSByZWdpc3RlcnMgdXNlZCAqLyBcXFxuK1x0cjAgKz0gcjI7XHRcdFx0XHRcdFxcXG4rXHRyMCArPSByMztcdFx0XHRcdFx0XFxcbitcdHIwICs9IHI0O1x0XHRcdFx0XHRcXFxuKzE6XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX3Jkb25seV9jYXN0KVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTE6MzAuMTI5Mjg0NTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNzQ4MjkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGFuZCB0cmFja3MgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMsIG9yIGB6ZXh0YC4gVGhleSdyZSBtb3ZpbmcgYXdheSBmcm9tIHN0b3JpbmcgYHN1YnJlZ19kZWZgIHdpdGhpbiB0aGUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdC4gSW5zdGVhZCwgdGhleSdyZSBjYWxjdWxhdGluZyBgemV4dF9kc3RgIGR5bmFtaWNhbGx5IHVzaW5nIGxpdmVuZXNzIGFuYWx5c2lzIHRocm91Z2ggYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYC4gVGhhdCdzIGEgcHJldHR5IHN1YnN0YW50aWFsIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIGNhbiBzZWUgdGhpcyBpbXBhY3RpbmcgaG93IEJQRiBwcm9ncmFtcyBhcmUgdmVyaWZpZWQsIGFuZCBzdWJzZXF1ZW50bHksIGhvdyB0aGV5J3JlIEpJVGVkLCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG9uJ3QgYXV0b21hdGljYWxseSB6ZXJvLWV4dGVuZCB0byA2NC1iaXQ7IGFyY2hpdGVjdHVyZXMgbGlrZSBzMzkweC5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0LiBJIHNlZSB0aGV5J3ZlIGludHJvZHVjZWQgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIHRoZXkndmUgbW92ZWQgYW5kIG1vZGlmaWVkIGBicGZfaXNfcmVnNjRgLiBDcnVjaWFsbHksIGJvdGggYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgIGFuZCBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIHdpdGhpbiBga2VybmVsL2JwZi9saXZlbmVzcy5jYCBoYXZlIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBhc3BlY3QuICBUaGV5J3ZlIGFsc28gdG91Y2hlZCBgY2hlY2tfYWx1X29wYCwgYGNoZWNrX2hlbHBlcl9jYWxsYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGFuZCBgc3luY19saW5rZWRfcmVnc2Agd2l0aGluIHRoZSB2ZXJpZmllciBpdHNlbGYgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgKS4gVGhpcyBjaGFuZ2UgbGlzdCBnaXZlcyBtZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoaXMgaXMgcXVpdGUgYSBjb21wbGV4IGNoYW5nZSB0aGF0IGlzIGxpa2VseSB0byBiZSBleHBvc2VkIHRvIGZ1emluZyBhdHRhY2tzLlxuXG5UaGlzIGhhcyBmdXp6aW5nIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIEdpdmVuIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZXMgdG8gdGhlIGNvcmUgdmVyaWZpZXIgbG9naWMsIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gVGhlIGZ1bmN0aW9ucyBJJ20gbW9zdCBpbnRlcmVzdGVkIGluIGZ1enppbmcgYXJlIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AsIGBjb21wdXRlX2luc25fbGl2ZV9yZWdzYCwgYW5kIGBicGZfaW5zbl9kZWYzMmAuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGJwZl9pc19yZWc2NGAuIEFoLCBpdCBsb29rcyBsaWtlIHRoYXQncyBzdGF0aWMgbm93IHdpdGhpbiBgZml4dXBzLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBgYnBmX2luc25fZGVmMzJgIGlzICpub3QqIHN0YXRpYywgYW5kIHRoYXQncyBjcml0aWNhbC4gYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIEZyb20gbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSdtIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllcjsgdGhhdCdzIGBicGZfY2hlY2tgLiBgYnBmX2luc25fZGVmMzJgIGFuZCBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGFyZSBkZWZpbml0ZWx5IG15IGZvY3VzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBjb3JyZWN0LiBJIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaW1lIHRvIHVzZSB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgZnVuY3Rpb24gbmFtZXMgZXhhY3RseSByaWdodC4gVGhpcyB3aWxsIGJlIGFuIGV4dGVuc2l2ZSB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjUxOjQyLjMwNDExNzU4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgxNzY0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbClcXFxccyticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE1Njg9Ym9vbCBicGZfc3RhY2tfc2xvdF9hbGl2ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnJhbWVubywgdTMyIHNwaSk7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNTY5OmludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE1NzAtXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA2Nj1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyOC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjIyOTppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIzMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjUxOjQ0Ljg4NTg4NjUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMzQ2NzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfaW5zbl9kZWYzMmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgYnBmX2luc25fZGVmMzJgLiBXZSd2ZSBjb3ZlcmVkIGEgbG90IG9mIGdyb3VuZCBhbHJlYWR5LCBhbmQgSSB0aGluayBpdCdzIHRpbWUgdG8gZHJpbGwgZG93biBvbiB0aGUgc3BlY2lmaWNzLiBJJ20gc3RhcnRpbmcgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBwcm9wZXIgdW5kZXJzdGFuZGluZyBkZW1hbmRzIGEgZGVlcCBkaXZlIGludG8gdGhlc2UgaW5kaXZpZHVhbCBjb21wb25lbnRzLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgdGhpcyBpcyBtb3N0IGxpa2VseSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBhIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb24uIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGRlZmluaW5nIGhvdyB0aGUgaW5zdHJ1Y3Rpb24gaXMgZW5jb2RlZCBvciBkZWNvZGVkLCBwZXJoYXBzIGFsb25nc2lkZSBvdGhlciBzdHJ1Y3R1cmVzIGZvciBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb24gbGVuZ3Rocy4gSSdtIGtlZW4gdG8gZXhhbWluZSB0aGUgZmllbGRzIHdpdGhpbiBhbmQgaG93IHRoZXkgbWFwIHRvIHRoZSBvcGNvZGVzLCBzb3VyY2UvZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBhbmQgaW1tZWRpYXRlIHZhbHVlcyB3ZSdyZSBmYW1pbGlhciB3aXRoIGluIEJQRi4gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIG9yIHBlcmhhcHMgdW5pb25zIGludm9sdmVkIGluIGRlZmluaW5nIHRoZSBpbnN0cnVjdGlvbidzIGNvbnN0aXR1ZW50IHBhcnRzPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgdW5sb2NrIGhvdyB0aGUgcHJvZ3JhbSBhY3R1YWxseSAqZG9lcyogdGhlIGpvYi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjcyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTE6NDkuNTE5MzU3MTM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODgzOTU0ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludFxcXFxzK2JwZl9pbnNuX2RlZjMyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTY1MT1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY1MjppbnQgYnBmX2luc25fZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NTMtXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTUyPXN0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkzLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTQ6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTE6NTEuOTA3NzU4MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM2Mzc0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYSBwcmV0dHkgZnVuZGFtZW50YWwgYXJlYTogdGhlIEJQRiB2ZXJpZmllci4gU3BlY2lmaWNhbGx5LCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcywgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyAoemV4dHMpLiBUaGF0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgQlBGIHByb2dyYW1zIGFyZSBzYWZlIGFuZCBhbHNvIGhvdyB0aGV5IGdldCB0cmFuc2xhdGVkIGludG8gb3B0aW1pemVkIG1hY2hpbmUgY29kZSBieSB0aGUgSklULiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLiBBbnkgY2hhbmdlIHRoYXQgdG91Y2hlcyB0aGUgdmVyaWZpZXIncyBjb3JlIGxvZ2ljIGlzIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBXZSBuZWVkIHRvIHRocm93IGV2ZXJ5dGhpbmcgd2UgY2FuIGF0IHRoaXMgdG8gZXhwb3NlIGFueSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCBmdW5jdGlvbiwgYXMgdGhhdOKAmXMgdGhlIGhlYXJ0IG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIGBicGZfaW5zbl9kZWYzMmAgZnVuY3Rpb24gd2lsbCBiZSBhbm90aGVyIGtleSBzeW1ib2wgdG8gcmV2aWV3LCBzaW5jZSB0aGlzIGlzIGNsZWFybHkgY29ubmVjdGVkIHdpdGggaG93IHRoZSBzdWJyZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgdHJhY2tlZC5cblxuSSBzZWUgaXQgdG91Y2hlcyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgb3B0aW9uLCB3aGljaCBtZWFucyB3ZSBtaWdodCBuZWVkIHRvIGFkanVzdCBvdXIgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8gdGVzdCB0aGlzIGVmZmVjdGl2ZWx5LiBMZXQncyBtYWtlIHN1cmUgd2UgZXhhbWluZSB0aGUgZGVwZW5kZW5jeSBsYW5kc2NhcGUgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE2NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MjowMC44NDQxMzY2NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTE0NzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MjowMi4zODMyODg5NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ4MzUxNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQ29uc2lkZXJpbmcgdGhlIEVCUEYgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0IHNlZW1zIGxpa2UgdGhlIGNsZWFuZXN0IGFuZCBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBoZXJlIHdvdWxkIGJlIHRvIGxldmVyYWdlIGBCUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgZ28tdG8gZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgc3lzdGVtIGNhbGwgaW50ZXJjZXB0aW9uLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncyB3aXRoIG90aGVyIGFwcHJvYWNoZXMgaWYgdGhpcyBmaXRzIHRoZSBiaWxsLiBOb3csIHRoaW5raW5nIHByYWN0aWNhbGx5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUsIHdvdWxkIGJlIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBpcyBjb2xsZWN0ZWQgZ2V0cyByZXR1cm5lZCBjb3JyZWN0bHksIHNvIHRoYXQgYHNldC1yZXN1bHRzYCBpcyB0aGUgbmV4dCBtYWpvciBtZXRob2QgdGhhdCBpcyB1c2VkLiBUaGF0IHNob3VsZCBoYW5kbGUgdGhlIGRhdGEgY29sbGVjdGlvbiBhbmQgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NjUsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTI6MDcuNTMxNjQ0MzgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MDI1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNcIixcbiAgICBcImJwZl9pbnNuX2RlZjMyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzIG9yIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcyB0byB0cmFjayAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyBkeW5hbWljYWxseSwgcmVtb3ZpbmcgdGhlIGBzdWJyZWdfZGVmYCBmaWVsZCBmcm9tIGBicGZfcmVnX3N0YXRlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB2ZXJpZmljYXRpb24gYnlwYXNzZXMgb3IgaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow6pc9c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 00:50:29 +0000 UTC FinishedAt: 2026-08-03 00:52:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a18aa255-06fc-44b6-849d-2e8e20e2263d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_compute_live_registers", "bpf_insn_def32" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMmIzM0OywKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgaW5zdHJ1Y3Rpb24gZml4dXBzIHRvIHRyYWNrIDMyLWJpdCBzdWJyZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgemVyby1leHRlbnNpb25zIGR5bmFtaWNhbGx5LCByZW1vdmluZyB0aGUgYHN1YnJlZ19kZWZgIGZpZWxkIGZyb20gYGJwZl9yZWdfc3RhdGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSB2ZXJpZmljYXRpb24gYnlwYXNzZXMgb3IgaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc3N2ZlMjFhZDhlZWY3Njc4ZjhhNWVhYzA3MDQwY2NkOGRkM2I0YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDAwOjUxOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzLi4zOWIwZGIyYTRmMTdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbiBcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxuIFx0ICovXG4gXHR1MzIgZnJhbWVubztcbi1cdC8qIFRyYWNrcyBzdWJyZWcgZGVmaW5pdGlvbi4gVGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgaW5zbl9pZHggb2YgdGhlXG4tXHQgKiB3cml0aW5nIGluc24uIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHN1YnJlZ19kZWYgaXMgdXNlZCBiZWZvcmUgYW55IGluc25cbi1cdCAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC5cbi1cdCAqL1xuLVx0czMyIHN1YnJlZ19kZWY7XG4gXHQvKiBpZiAoIXByZWNpc2UgXHUwMDI2XHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbiYjMzk7dCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xNjMxLDcgJiM0MzsxNjI2LDYgQEAgc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiB7XG4gfTtcbiBcbiAvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IGZpeHVwcy5jICovXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcbiB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbik7XG4gdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7XG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuQEAgLTE2NTUsNSAmIzQzOzE2NDksNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4mIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIFxuICNlbmRpZiAvKiBfTElOVVhfQlBGX1ZFUklGSUVSX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOS4uN2M0NTk5ZTY1ZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtzdGFjaz0lcyBiZWZvcmUgXCYjMzQ7LCBlbnYtXHUwMDNldG1wX3N0cl9idWYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9lbmRfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gJXMlZCByJWRcXG5cJiMzNDssXG4mIzQzO1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlcyVkIHIlZFwmIzM0OyxcbiBcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fQkUgPyBcJiMzNDtiZVwmIzM0OyA6IFwmIzM0O2xlXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9ic3dhcF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuLVx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcblwmIzM0OyxcbiYjNDM7XHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXCYjMzQ7LFxuIFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0aW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gfVxuQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbik7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCA9IC0lYyVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgKCh1MzIpaW5zbi1cdTAwM2VpbW0pIFx1MDAzZVx1MDAzZSAxNiwgKHUxNilpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gXHUwMDI2KHZvaWQgX19wZXJjcHUgKikociVkKVwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVjJWQgJXMgJXMlYyVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIxOCw3ICYjNDM7MjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0FMVSA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKVxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQUREIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9BTkQgfHxcbiBcdFx0XHQgIGluc24tXHUwMDNlaW1tID09IEJQRl9PUiB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWE9SKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGxvY2sgKiglcyAqKShyJWQgJSYjNDM7ZCkgJXMgciVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsXG5AQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4gXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2F0b21pY19hbHVfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcJiMzNDs2NFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbkBAIC0yNjIsNDQgJiM0MzsyNjIsNDQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyA/IFwmIzM0OzY0XCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJSYjNDM7ZCkpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfU1RPUkVfUkVMKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZClcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHXyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUKSB7XG4gXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9ICVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG5vc3BlY1xcblwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZHhfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcXG5cJiMzNDssXG4mIzQzO1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG5AQCAtMzA3LDEyICYjNDM7MzA3LDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWltbSk7XG5AQCAtMzMyLDEyICYjNDM7MzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGlmIChpc19wdHIgXHUwMDI2XHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXG4gXHRcdFx0XHRpbW0gPSAwO1xuIFxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAlc1wmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxuIFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xuQEAgLTM0NywzNSAmIzQzOzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRjaGFyIHRtcFs2NF07XG4gXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHtcbi1cdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGNhbGwgcGMlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsIHBjJXNcJiMzNDssXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0c3RyY3B5KHRtcCwgXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tXHRcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBjYWxsICVzIyVkXFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUsXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgY2FsbCAlcyMlZFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0XHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxuIFx0XHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSksXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIGdvdG94IHIlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b3ggciVkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9NQVlfR09UTykge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkXCYjMzQ7LFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgZ290b2wgcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XFxuXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSBleGl0XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSxcbi1cdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7KCUwMngpIGlmICVjJWQgJXMgJWMlZCBnb3RvIHBjJSYjNDM7ZFwmIzM0OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XSxcbkBAIC0zODMsMTQgJiM0MzszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcJiMzNDsoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlJiM0MztkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0OyglMDJ4KSBpZiAlYyVkICVzIDB4JXggZ290byBwYyUmIzQzO2RcJiMzNDssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF0sXG4gXHRcdFx0XHQodTMyKWluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgJXNcJiMzNDssXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBicGZfY2xhc3Nfc3RyaW5nW2NsYXNzXSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi43YjM1MTBkNDZiMzc3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTQ0LDE1ICYjNDM7NDQsNjEgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHR9XG4gfVxuIFxuLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqL1xuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7LypcbiYjNDM7ICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcdTAwM2U9IDAuXG4mIzQzOyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LFxuJiM0MzsgKiBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4tXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuJiM0MztcdHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0dTggc2l6ZSA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0dTggb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRib29sIG1vZGVfbWVtO1xuJiM0MztcbiYjNDM7XHQvKiBzdWJyZWdpc3RlciBlbmRpbmVzcyBzd2FwICovXG4mIzQzO1x0aWYgKChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9BTFU2NCkgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9FTkQgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tICE9IDY0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiB3MCAmIzQzOz0gMSAqL1xuJiM0MztcdGlmIChjbGFzcyA9PSBCUEZfQUxVIFx1MDAyNlx1MDAyNiBvcCAhPSBCUEZfRU5EKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCksIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbiYjNDM7XHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9TUEFDRV9DQVNUIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAxKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBub24gNjQtYml0LCBub24gc2lnbmVkIGV4dGVuZGVkIGxvYWRzICovXG4mIzQzO1x0bW9kZV9tZW0gPSBtb2RlID09IEJQRl9NRU0gfHwgbW9kZSA9PSBCUEZfUFJPQkVfTUVNIHx8IG1vZGUgPT0gQlBGX1BST0JFX01FTTMyO1xuJiM0MztcdGlmIChjbGFzcyA9PSBCUEZfTERYIFx1MDAyNlx1MDAyNiBtb2RlX21lbSBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIGF0b21pY3MsIHNlZSBpbnNuX2RlZl9yZWdubygpICovXG4mIzQzO1x0aWYgKGNsYXNzID09IEJQRl9TVFggXHUwMDI2XHUwMDI2IHNpemUgIT0gQlBGX0RXKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGRzdF9yZWcgPT0gLTEpXG4mIzQzO1x0LyogYm90aCBMRF9JTkQgYW5kIExEX0FCUyByZXR1cm4gMzItYml0IGRhdGEuICovXG4mIzQzO1x0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gIWJwZl9pc19yZWc2NChpbnNuLCBkc3RfcmVnLCBOVUxMLCBEU1RfT1ApO1xuJiM0MztcdC8qIENvbnNlcnZhdGl2ZWx5IHJldHVybiB0cnVlIGF0IGRlZmF1bHQuICovXG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluZWQgYnkgSU5TTiwgb3IgLTEgaWYgSU5TTiBkb2VzIG5vdFxuJiM0MzsgKiBleHBsaWNpdGx5IGRlZmluZSBhIDMyLWJpdCB2YWx1ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuJiM0MztcbiYjNDM7XHRpZiAoZHN0X3JlZyBcdTAwM2MgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkc3RfcmVnO1xuIH1cbiBcbiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbkBAIC0xNjksNyAmIzQzOzIxNSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZVxuIFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cbiBcdCAqL1xuLVx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4mIzQzO1x0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSkgXHUwMDNlPSAwO1xuIFxuIFx0aWYgKGNudCA9PSAxKVxuIFx0XHRyZXR1cm47XG5AQCAtMTgxLDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpID0gb2ZmOyBpIFx1MDAzYyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4tXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpO1xuJiM0MztcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgXHUwMDNlPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC02MTYsMTEgJiM0Mzs2NjIsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKGxvYWRfcmVnID09IC0xKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0LyogTk9URTogYXJnIFwmIzM0O3JlZ1wmIzM0OyAodGhlIGZvdXJ0aCBvbmUpIGlzIG9ubHkgdXNlZCBmb3Jcbi1cdFx0XHQgKiAgICAgICBCUEZfU1RYICYjNDM7IFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTExcbi1cdFx0XHQgKiAgICAgICBoZXJlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChicGZfaXNfcmVnNjQoXHUwMDI2aW5zbiwgbG9hZF9yZWcsIE5VTEwsIERTVF9PUCkpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbmluZGV4IDBhYWRmYmFlMGFjYzUuLjc4MzUxZTRhNmYyNWYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuQEAgLTQ5Nyw3ICYjNDM7NDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JTNkOiBcJiMzNDssIGluc25faWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2luc25faWR4XSk7XG4tXHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpOyAvKiByZW1vdmUgXFxuICovXG4gXHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JSpjO1wmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICYjNDM7MTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHIlZDogXCYjMzQ7LCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pbltpXSk7XG5AQCAtMTA1OCw3ICYjNDM7MTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdHNhJWQ6IFwmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5bYWldKTtcbkBAIC0xMDcwLDcgJiM0MzsxMDY3LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUzZDogXCYjMzQ7LCBpZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbi1cdFx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcbiBcdFx0XHRwcmludGVkID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0ZnAlJiM0MztkOiBcJiMzNDssIC0oaSAmIzQzOyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X3N0YWNrX2luW2ldKTtcbkBAIC0xNTQ1LDYgJiM0MzsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbiBcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2lkeF0pO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXG4gXHRcdC8qIENvbGxlY3Qgd2hhdCBuZWVkcyBwcmludGluZyAqL1xuIFx0XHRpZiAoaXNfbGR4X3N0eF9jYWxsIFx1MDAyNlx1MDAyNlxuQEAgLTIwNTAsMjkgJiM0MzsyMDQ3LDM4IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIHVzZTtcdC8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGRlZjtcdC8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4mIzQzO1x0dTMyIG91dDtcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xuIH07XG4gXG4gLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUxMX0NBTExFUl9TQVZFRF9SRUdTICgoMXUgXHUwMDNjXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTKSAtIDEpXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHJlZzMyX21hc2sodTMyIG4pIHsgcmV0dXJuIEJJVChuKTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiAmIzQzOyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtIFx1MDAzY1x1MDAzYyAxNik7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2IG1hc2tfaGkodTMyIG0pIHsgcmV0dXJuICh1MTYpKG0gXHUwMDNlXHUwMDNlIDE2KTsgfVxuJiM0MztcbiAvKiBDb21wdXRlIGluZm8tXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXG4gc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgc3RydWN0IGluc25fbGl2ZV9yZWdzICppbmZvKVxuIHtcbiBcdHN0cnVjdCBicGZfY2FsbF9zdW1tYXJ5IGNzO1xuLVx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpO1xuLVx0dTE2IHNyYyA9IEJJVChpbnNuLVx1MDAzZXNyY19yZWcpO1xuLVx0dTE2IGRzdCA9IEJJVChpbnNuLVx1MDAzZWRzdF9yZWcpO1xuLVx0dTE2IHIwICA9IEJJVCgwKTtcbi1cdHUxNiBkZWYgPSAwO1xuLVx0dTE2IHVzZSA9IDB4ZmZmZjtcbiYjNDM7XHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdGNvbnN0IHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRjb25zdCB1MzIgc3JjID0gcmVnNjRfbWFzayhpbnNuLVx1MDAzZXNyY19yZWcpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlZHN0X3JlZyk7XG4mIzQzO1x0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xuJiM0MztcdGNvbnN0IHUzMiBkc3QzMiA9IG1hc2tfbG8oZHN0KTtcbiYjNDM7XHRjb25zdCB1MzIgcjAgID0gcmVnNjRfbWFzaygwKTtcbiYjNDM7XHR1MzIgZGVmID0gMDtcbiYjNDM7XHR1MzIgdXNlID0gVTMyX01BWDtcbiBcbiBcdHN3aXRjaCAoY2xhc3MpIHtcbiBcdGNhc2UgQlBGX0xEOlxuQEAgLTIwODMsOCAmIzQzOzIwODksOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR1c2UgPSAwO1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfQUJTOlxuLVx0XHRjYXNlIEJQRl9MRCB8IEJQRl9JTkQ6XG4mIzQzO1x0XHRjYXNlIEJQRl9BQlM6XG4mIzQzO1x0XHRjYXNlIEJQRl9JTkQ6XG4gXHRcdFx0Lyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqL1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjA5Miw3ICYjNDM7MjA5OCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIEJQRl9MRFg6XG4gXHRcdHN3aXRjaCAobW9kZSkge1xuIFx0XHRjYXNlIEJQRl9NRU06XG4mIzQzO1x0XHRcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xuJiM0MztcdFx0XHRkZWYgPSBkc3Q7XG4mIzQzO1x0XHRcdHVzZSA9IHNyYztcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX01FTVNYOlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcbiYjNDM7XHRcdFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHR1c2UgPSBzcmM7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMjExMCwxMiAmIzQzOzIxMjQsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuJiM0MztcdFx0XHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0FUT01JQzpcbiYjNDM7XHRcdGNhc2UgQlBGX0FUT01JQzoge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XG4mIzQzO1x0XHRcdCAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XG4mIzQzO1x0XHRcdHUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApO1xuJiM0MztcbiBcdFx0XHRzd2l0Y2ggKGluc24tXHUwMDNlaW1tKSB7XG4gXHRcdFx0Y2FzZSBCUEZfQ01QWENIRzpcbi1cdFx0XHRcdHVzZSA9IHIwIHwgZHN0IHwgc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRkZWYgPSByMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX0xPQURfQUNROlxuQEAgLTIxMjQsMTAgJiM0MzsyMTQ1LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiBcdFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuIFx0XHRcdFx0XHRkZWYgPSBzcmM7XG4gXHRcdFx0XHRlbHNlXG5AQCAtMjEzNSw2ICYjNDM7MjE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTFU6XG4gXHRjYXNlIEJQRl9BTFU2NDpcbkBAIC0yMTQ4LDE0ICYjNDM7MjE3MCwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IDA7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gc3JjO1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IHNyYyA6IHNyYzMyO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IGRzdDtcbiBcdFx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LKVxuLVx0XHRcdFx0dXNlID0gZHN0O1xuJiM0MztcdFx0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IGRzdCA6IGRzdDMyO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbiYjNDM7XHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0pNUDpcbkBAIC0yMTgxLDEzICYjNDM7MjIwMywxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0dXNlID0gZGVmIFx1MDAyNiB+QklUKEJQRl9SRUdfMCk7XG4gXHRcdFx0aWYgKGJwZl9nZXRfY2FsbF9zdW1tYXJ5KGVudiwgaW5zbiwgXHUwMDI2Y3MpKVxuIFx0XHRcdFx0dXNlID0gR0VOTUFTSyhtaW5fdCh1OCwgY3MubnVtX3BhcmFtcywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKSwgMSk7XG4mIzQzO1x0XHRcdGRlZiA9IG1hc2tfd2lkZW4oZGVmKTtcbiYjNDM7XHRcdFx0dXNlID0gbWFza193aWRlbih1c2UpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbi1cdFx0XHRcdHVzZSA9IGRzdDtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4mIzQzO1x0XHRcdHVzZSA9IGNsYXNzID09IEJQRl9KTVAgPyBkc3QgOiBkc3QzMjtcbiYjNDM7XHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWClcbiYjNDM7XHRcdFx0XHR1c2UgfD0gY2xhc3MgPT0gQlBGX0pNUCA/IHNyYyA6IHNyYzMyO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTIyMDksNiAmIzQzOzIyMzIsNyBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlO1xuIFx0aW50IGluc25fY250ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuJiM0MztcdHU2NCBwb3MsIGluc25fcG9zO1xuIFx0aW50IGVyciA9IDAsIGksIGo7XG4gXHRib29sIGNoYW5nZWQ7XG4gXG5AQCAtMjI1Miw4ICYjNDM7MjI3Niw4IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGludCBpbnNuX2lkeCA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbaV07XG4gXHRcdFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gXHUwMDI2c3RhdGVbaW5zbl9pZHhdO1xuIFx0XHRcdHN0cnVjdCBicGZfaWFycmF5ICpzdWNjO1xuLVx0XHRcdHUxNiBuZXdfb3V0ID0gMDtcbi1cdFx0XHR1MTYgbmV3X2luID0gMDtcbiYjNDM7XHRcdFx0dTMyIG5ld19vdXQgPSAwO1xuJiM0MztcdFx0XHR1MzIgbmV3X2luID0gMDtcbiBcbiBcdFx0XHRzdWNjID0gYnBmX2luc25fc3VjY2Vzc29ycyhlbnYsIGluc25faWR4KTtcbiBcdFx0XHRmb3IgKGludCBzID0gMDsgcyBcdTAwM2Mgc3VjYy1cdTAwM2VjbnQ7ICYjNDM7JiM0MztzKVxuQEAgLTIyNjcsOCAmIzQzOzIyOTEsMjAgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyAmIzQzOyYjNDM7aSlcbi1cdFx0aW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0aW50IGRlZjMyID0gYnBmX2luc25fZGVmMzIoXHUwMDI2aW5zbnNbaV0pO1xuJiM0MztcdFx0dTMyIG91dCA9IHN0YXRlW2ldLm91dDtcbiYjNDM7XHRcdHUzMiBpbiA9IHN0YXRlW2ldLmluO1xuJiM0MztcbiYjNDM7XHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlc1xuJiM0MztcdFx0ICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb25cbiYjNDM7XHRcdCAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZVxuJiM0MztcdFx0ICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IChtYXNrX2hpKG91dCkgXHUwMDI2IEJJVChkZWYzMikpO1xuJiM0MztcdH1cbiBcbiBcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7TGl2ZSByZWdzIGJlZm9yZSBpbnNuOlxcblwmIzM0Oyk7XG5AQCAtMjI4NCw3ICYjNDM7MjMyMCwxMiBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0Oy5cJiMzNDspO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpXSk7XG4mIzQzO1x0XHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuJiM0MztcdFx0XHRpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUqYzsgemV4dFwmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspO1xuJiM0MztcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0XHRpZiAoYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbaV0pKVxuIFx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2ZjM1ZjRlNzE1YjYuLjQ1ZDRjMGEwMGE1ZGIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTIxMjksMTIgJiM0MzsyMTI5LDkgQEAgc3RhdGljIGludCByZWdfYm91bmRzX3Nhbml0eV9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXG4gdm9pZCBicGZfbWFya19yZWdfdW5rbm93bl9pbXByZWNpc2Uoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4tXHRzMzIgc3VicmVnX2RlZiA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuIFx0bWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTtcbiBcdHJlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuIFx0cmVnLVx1MDAzZXZhcl9vZmYgPSB0bnVtX3Vua25vd247XG4tXHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXHRfX21hcmtfcmVnX3VuYm91bmRlZChyZWcpO1xuIH1cbiBcbkBAIC0yMjEwLDcgJiM0MzsyMjA3LDYgQEAgc3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBERUZfTk9UX1NVQlJFR1x0KDApXG4gc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxuIHtcbkBAIC0yMjE5LDcgJiM0MzsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfUkVHOyBpJiM0MzsmIzQzOykge1xuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2ldKTtcbi1cdFx0cmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHR9XG4gXG4gXHQvKiBmcmFtZSBwb2ludGVyICovXG5AQCAtMzAzMiwxMjAgJiM0MzszMDI3LDE0IEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkgLSBpKTtcbiB9XG4gXG4tLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvblxuLSAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXNcbi0gKiBvbiA2NC1iaXQsIG90aGVyd2lzZSByZXR1cm4gRkFMU0UuXG4tICovXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLVx0ICAgICAgdTMyIHJlZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbi17XG4tXHR1OCBjb2RlLCBjbGFzcywgb3A7XG4tXG4tXHRjb2RlID0gaW5zbi1cdTAwM2Vjb2RlO1xuLVx0Y2xhc3MgPSBCUEZfQ0xBU1MoY29kZSk7XG4tXHRvcCA9IEJQRl9PUChjb2RlKTtcbi1cdGlmIChjbGFzcyA9PSBCUEZfSk1QKSB7XG4tXHRcdC8qIEJQRl9FWElUIGZvciBcJiMzNDttYWluXCYjMzQ7IHdpbGwgcmVhY2ggaGVyZS4gUmV0dXJuIFRSVUVcbi1cdFx0ICogY29uc2VydmF0aXZlbHkuXG4tXHRcdCAqL1xuLVx0XHRpZiAob3AgPT0gQlBGX0VYSVQpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChvcCA9PSBCUEZfQ0FMTCkge1xuLVx0XHRcdC8qIEJQRiB0byBCUEYgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBtYXJraW5nXG4tXHRcdFx0ICogY2FsbGVyIHNhdmVkIGNsb2JiZXIgd2l0aCBEU1RfT1BfTk9fTUFSSyBmb3Igd2hpY2ggd2Vcbi1cdFx0XHQgKiBkb24mIzM5O3QgY2FyZSB0aGUgcmVnaXN0ZXIgZGVmIGJlY2F1c2UgdGhleSBhcmUgYW55d2F5XG4tXHRcdFx0ICogbWFya2VkIGFzIE5PVF9JTklUIGFscmVhZHkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcbi1cdFx0XHQgKiBjaGVjaywgY29uc2VydmF0aXZlbHkgcmV0dXJuIFRSVUUuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHQgPT0gU1JDX09QKVxuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfRU5EIFx1MDAyNlx1MDAyNiAoaW5zbi1cdTAwM2VpbW0gPT0gMTYgfHwgaW5zbi1cdTAwM2VpbW0gPT0gMzIpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IHx8IGNsYXNzID09IEJQRl9KTVAgfHxcbi1cdCAgICAoY2xhc3MgPT0gQlBGX0FMVSBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX0VORCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gNjQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9KTVAzMilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9MRFgpIHtcbi1cdFx0aWYgKHQgIT0gU1JDX09QKVxuLVx0XHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYO1xuLVx0XHQvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfU1RYKSB7XG4tXHRcdC8qIEJQRl9TVFggKGluY2x1ZGluZyBhdG9taWMgdmFyaWFudHMpIGhhcyBvbmUgb3IgbW9yZSBzb3VyY2Vcbi1cdFx0ICogb3BlcmFuZHMsIG9uZSBvZiB3aGljaCBpcyBhIHB0ci4gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGVyIGlzXG4tXHRcdCAqIGFza2luZyBhYm91dCBpdC5cbi1cdFx0ICovXG4tXHRcdGlmICh0ID09IFNSQ19PUCBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRyZXR1cm4gQlBGX1NJWkUoY29kZSkgPT0gQlBGX0RXO1xuLVx0fVxuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9MRCkge1xuLVx0XHR1OCBtb2RlID0gQlBGX01PREUoY29kZSk7XG4tXG4tXHRcdC8qIExEX0lNTTY0ICovXG4tXHRcdGlmIChtb2RlID09IEJQRl9JTU0pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdC8qIEJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqL1xuLVx0XHRpZiAodCAhPSBTUkNfT1ApXG4tXHRcdFx0cmV0dXJuICBmYWxzZTtcbi1cbi1cdFx0LyogSW1wbGljaXQgY3R4IHB0ci4gKi9cbi1cdFx0aWYgKHJlZ25vID09IEJQRl9SRUdfNilcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdFx0LyogRXhwbGljaXQgc291cmNlIGNvdWxkIGJlIGFueSB3aWR0aC4gKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX1NUKVxuLVx0XHQvKiBUaGUgb25seSBzb3VyY2UgcmVnaXN0ZXIgZm9yIEJQRl9TVCBpcyBhIHB0ci4gKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4tXG4tXHQvKiBDb25zZXJ2YXRpdmVseSByZXR1cm4gdHJ1ZSBhdCBkZWZhdWx0LiAqL1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi17XG4tXHRzMzIgZGVmX2lkeCA9IHJlZy1cdTAwM2VzdWJyZWdfZGVmO1xuLVxuLVx0aWYgKGRlZl9pZHggPT0gREVGX05PVF9TVUJSRUcpXG4tXHRcdHJldHVybjtcbi1cbi1cdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XG4tXHQvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJiMzOTt0IGJlIHN1Yi1yZWdpc3RlciBhbnltb3JlLiAqL1xuLVx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbi19XG4tXG4gc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbiBcdFx0XHQgICBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbiB7XG4tXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2kgJiM0MzsgZW52LVx1MDAzZWluc25faWR4O1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbi1cdGJvb2wgcnc2NDtcbiBcbiBcdG1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTtcbiBcbiBcdHJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVx0cnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTtcbiBcdGlmICh0ID09IFNSQ19PUCkge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgc291cmNlIG9wZXJhbmQgY2FuIGJlIHJlYWQgKi9cbiBcdFx0aWYgKHJlZy1cdTAwM2V0eXBlID09IE5PVF9JTklUKSB7XG5AQCAtMzE1Niw5ICYjNDM7MzA0NSw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRcdGlmIChyZWdubyA9PSBCUEZfUkVHX0ZQKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuLVx0XHRpZiAocnc2NClcbi1cdFx0XHRtYXJrX2luc25femV4dChlbnYsIHJlZyk7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIGRlc3Qgb3BlcmFuZCBjYW4gYmUgd3JpdHRlbiB0byAqL1xuQEAgLTMxNjYsNyAmIzQzOzMwNTIsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmcmFtZSBwb2ludGVyIGlzIHJlYWQgb25seVxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbiBcdFx0aWYgKHQgPT0gRFNUX09QKVxuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZWdubyk7XG4gXHR9XG5AQCAtMzgyMiwxMSAmIzQzOzM3MDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdFx0aWYgKHNpemUgXHUwMDNjPSBzcGlsbF9zaXplIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XG4tXHRcdFx0XHQvKiBUaGUgZWFybGllciBjaGVja19yZWdfYXJnKCkgaGFzIGRlY2lkZWQgdGhlXG4tXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzMzIgc3VicmVnX2RlZiA9IHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xuLVxuIFx0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNiBzcGlsbF9zaXplID09IDQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzYz0gMzIpXG4gXHRcdFx0XHRcdC8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uXG5AQCAtMzgzNCw3ICYjNDM7MzcxNCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdFx0ICovXG4gXHRcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XG4gXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10gPSAqcmVnO1xuLVx0XHRcdFx0c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFxuIFx0XHRcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuXG4gXHRcdFx0XHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXG5AQCAtNjI3MSwxMiAmIzQzOzYxNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncyxcbiBcdFx0XHRcdFx0XHQgICAgdmFsdWVfcmVnbm8pO1xuLVx0XHRcdFx0LyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudFxuLVx0XHRcdFx0ICogYWN0dWFsIGxvYWQgc2l6ZSB3aXRoIHRoZSBvbmUgZW5jb2RlZCBpbiB0aGVcbi1cdFx0XHRcdCAqIGluc24uIFdoZW4gdGhlIGRzdCBpcyBQVFIsIGl0IGlzIGZvciBzdXJlIG5vdFxuLVx0XHRcdFx0ICogYSBzdWItcmVnaXN0ZXIuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0XHRcdGlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xuIFx0XHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjtcbiBcdFx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7XG5AQCAtNzM4MCwxMCAmIzQzOzcyNTMsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0XHRcdGlmIChzcGkgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gc3BpO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG4tXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi1cdFx0XHQgKi9cbiBcdFx0XHRtYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XG4gXG4gXHRcdFx0cmVnID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbkBAIC05NDYzLDcgJiM0Mzs5MzMyLDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqL1xuIFx0XHRpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHtcbiBcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIEJQRl9SRUdfMCk7XG4tXHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQ4Miw5ICYjNDM7MTAzNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG4tXHQvKiBoZWxwZXIgY2FsbCByZXR1cm5zIDY0LWJpdCB2YWx1ZS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4tXG4gXHQvKiB1cGRhdGUgcmV0dXJuIHJlZ2lzdGVyIChhbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlKSAqL1xuIFx0cmV0X3R5cGUgPSBmbi1cdTAwM2VyZXRfdHlwZTtcbiBcdHJldF9mbGFnID0gdHlwZV9mbGFnKHJldF90eXBlKTtcbkBAIC0xMDcyMiwzMCAmIzQzOzEwNTg3LDYgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XG4tICogdGhlIEJURiBmdW5jX3Byb3RvJiMzOTtzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cbi0gKi9cbi1zdGF0aWMgdm9pZCBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsXG4tXHRcdFx0XHQgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKVxuLXtcbi1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSBcdTAwMjZyZWdzW3JlZ25vXTtcbi1cbi1cdGlmIChyZWdubyA9PSBCUEZfUkVHXzApIHtcbi1cdFx0LyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlICovXG4tXHRcdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xuLVx0XHRcdERFRl9OT1RfU1VCUkVHIDogZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4tXHR9IGVsc2UgaWYgKHJlZ19zaXplID09IHNpemVvZih1NjQpKSB7XG4tXHRcdC8qIEZ1bmN0aW9uIGFyZ3VtZW50ICovXG4tXHRcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHZvaWQgbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgcmVnbm8sXG4tXHRcdFx0XHQgICBzaXplX3QgcmVnX3NpemUpXG4te1xuLVx0cmV0dXJuIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIGN1cl9yZWdzKGVudiksIHJlZ25vLCByZWdfc2l6ZSk7XG4tfVxuLVxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbiBcdHJldHVybiBtZXRhLVx1MDAzZWtmdW5jX2ZsYWdzIFx1MDAyNiBLRl9BQ1FVSVJFO1xuQEAgLTEyOTc0LDcgJiM0MzsxMjgxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXg7XG4gXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xuLVx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcbiBcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQ7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbkBAIC0xMzAxOCw3ICYjNDM7MTI4NTgsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmYWlsZWQgdG8gbWFyayBzMzIgcmFuZ2UgZm9yIHJldHZhbCBpbiBmb3JrZWQgc3RhdGUgZm9yIGxvY2tcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdFx0X19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7XG4gXHR9IGVsc2UgaWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX19fYnBmX3RyYXBdKSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC0xMzE2OCw3ICYjNDM7MTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4gXG4gXHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbcmVnbm9dKTtcbi1cdFx0cmVnc1tyZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG5AQCAtMTMxOTAsNyAmIzQzOzEzMDI4LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbiBcdFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxuIFx0XHRcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTEzMjgxLDcgJiM0MzsxMzExOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0LyogRm9yIG1hcmtfcHRyX29yX251bGxfcmVnLCBzZWUgOTNjMjMwZTNmNWJkNiAqL1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuIFx0XHR9XG4tXHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcbiBcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkpIHtcbiBcdFx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuIFx0XHRcdGlmIChpZCBcdTAwM2MgMClcbkBAIC0xMzMxOCwxOCAmIzQzOzEzMTU0LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRjYWxsZXJfaW5mby1cdTAwM2VzdGFja19hcmdfY250ID0gc3RhY2tfYXJnX2NudDtcbiBcdH1cbiBcbi1cdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLmZ1bmNfcHJvdG8gJiM0MzsgMSk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIG5hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgcmVnbm8gPSBpICYjNDM7IDE7XG4tXG4tXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdC8qIHNjYWxhci4gZW5zdXJlZCBieSBjaGVja19rZnVuY19hcmdzKCkgKi9cbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXHUwMDNlc2l6ZSk7XG4tXHR9XG4tXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTE0ODIzLDE0ICYjNDM7MTQ2NDcsMTQgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSlcbiBcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFxuLVx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cbi1cdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NClcbiYjNDM7XHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuIFx0XHRcdCAqIDY0LWJpdCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIDMyLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGF1eC1cdTAwM2VuZWVkc196ZXh0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YXV4LVx1MDAzZXpleHRfZHN0ID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0LyogQW55IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvbiBhcmVuYSBwb2ludGVycyAqL1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNDk2OSw2ICYjNDM7MTQ3OTMsNyBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gLyogY2hlY2sgdmFsaWRpdHkgb2YgMzItYml0IGFuZCA2NC1iaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zICovXG4gc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCA9IGN1cl9hdXgoZW52KTtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbiBcdHU4IG9wY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuIFx0aW50IGVycjtcbkBAIC0xNTAyNiwxOCAmIzQzOzE0ODUxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSkge1xuIFx0XHRcdFx0XHQvKiBvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCAqL1xuIFx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbi1cdFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4mIzQzO1x0XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gMSkgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4gXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xuLVx0XHRcdFx0XHRcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbi1cdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKSB7XG4gXHRcdFx0XHRcdC8qIGNhc2U6IFIxID0gUjJcbiBcdFx0XHRcdFx0ICogY29weSByZWdpc3RlciBzdGF0ZSB0byBkZXN0IHJlZ1xuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4gXHRcdFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4tXHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi9cbiBcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG5AQCAtMTUwNTUsNyAmIzQzOzE0ODc2LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbiBcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuLVx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0XHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuIFx0XHRcdFx0XHR9XG5AQCAtMTUwODAsNyAmIzQzOzE0OTAwLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRcdGlmICghaXNfc3JjX3JlZ191MzIpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHRcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xuIFx0XHRcdFx0XHRcdGJvb2wgbm9fc2V4dCA9IHJlZ191bWF4KHNyY19yZWcpIFx1MDAzYyAoMVVMTCBcdTAwM2NcdTAwM2MgKGluc24tXHUwMDNlb2ZmIC0gMSkpO1xuQEAgLTE1MDkwLDcgJiM0MzsxNDkwOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuIFx0XHRcdFx0XHRcdGlmICghbm9fc2V4dClcbiBcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbiBcdFx0XHRcdFx0XHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE1OTU5LDEyICYjNDM7MTU3NzcsOCBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoKCEocmVnLVx1MDAzZWlkIFx1MDAyNiBCUEZfQUREX0NPTlNUKSBcdTAwMjZcdTAwMjYgIShrbm93bl9yZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxuIFx0XHQgICAgcmVnLVx1MDAzZWRlbHRhID09IGtub3duX3JlZy1cdTAwM2VkZWx0YSkge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4gXHRcdFx0KnJlZyA9ICprbm93bl9yZWc7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4gXHRcdFx0czMyIHNhdmVkX29mZiA9IHJlZy1cdTAwM2VkZWx0YTtcbiBcdFx0XHR1MzIgc2F2ZWRfaWQgPSByZWctXHUwMDNlaWQ7XG4gXG5AQCAtMTU5NzQsMTIgJiM0MzsxNTc4OCwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xuIFx0XHRcdC8qIHJlZyA9IGtub3duX3JlZzsgcmVnICYjNDM7PSBkZWx0YSAqL1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXG4tXHRcdFx0ICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxuJiM0MztcdFx0XHQgKiBNdXN0IHByZXNlcnZlIG9mZiBhbmQgaWQsIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKVxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGluY29ycmVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZWctXHUwMDNlZGVsdGEgPSBzYXZlZF9vZmY7XG4gXHRcdFx0cmVnLVx1MDAzZWlkID0gc2F2ZWRfaWQ7XG4tXHRcdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmO1xuIFxuIFx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xuIFx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbkBAIC0xNjQxNCw4ICYjNDM7MTYyMjcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxuIFx0ICovXG4gXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi1cdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICYjNDM7IDE7XG4gXHQvKlxuIFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXG4gXHQgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy5cbkBAIC0xNjczMCw3ICYjNDM7MTY1NDEsNiBAQCBib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcbiBcdGludCBpO1xuIFxuIFx0aWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkge1xuLVxuIFx0XHRpZiAoYnBmX2dldF9oZWxwZXJfcHJvdG8oZW52LCBjYWxsLVx1MDAzZWltbSwgXHUwMDI2Zm4pIFx1MDAzYyAwKVxuIFx0XHRcdC8qIGVycm9yIHdvdWxkIGJlIHJlcG9ydGVkIGxhdGVyICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE3NDc1LDYgJiM0MzsxNzI4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslZDogXCYjMzQ7LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xuIFx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdFx0ZW52LVx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSBlbnYtXHUwMDNlcHJldl9sb2dfcG9zO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2xvZ19wb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbmluZGV4IDVlN2NiOGIzNmZlZjIuLjU1NzkxNzNhNjFlM2IgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xuQEAgLTEwNywxNCAmIzQzOzEwNyw3IEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gXG4gXHRwID0gYnVmO1xuIFx0d2hpbGUgKCpwICE9ICYjMzk7XFwwJiMzOTspIHtcbi1cdFx0aWYgKCpwID09ICYjMzk7XFxuJiMzOTspIHtcbi1cdFx0XHRtZW1tb3ZlKHAgJiM0MzsgMywgcCwgc3RybGVuKGJ1ZikgJiM0MzsgMSAtIChwIC0gYnVmKSk7XG4tXHRcdFx0LyogQWxpZ24gZWFjaCBpbnN0cnVjdGlvbiBkdW1wIHJvdyBsZWZ0LiAqL1xuLVx0XHRcdCpwJiM0MzsmIzQzOyA9ICYjMzk7XFxcXCYjMzk7O1xuLVx0XHRcdCpwJiM0MzsmIzQzOyA9ICYjMzk7bCYjMzk7O1xuLVx0XHRcdC8qIE91dHB1dCBtdWx0aWxpbmUgY29uY2F0ZW5hdGlvbi4gKi9cbi1cdFx0XHQqcCYjNDM7JiM0MzsgPSAmIzM5O1xcXFwmIzM5Oztcbi1cdFx0fSBlbHNlIGlmICgqcCA9PSAmIzM5O1x1MDAzYyYjMzk7IHx8ICpwID09ICYjMzk7XHUwMDNlJiMzOTsgfHwgKnAgPT0gJiMzOTt8JiMzOTsgfHwgKnAgPT0gJiMzOTtcdTAwMjYmIzM5Oykge1xuJiM0MztcdFx0aWYgKCpwID09ICYjMzk7XHUwMDNjJiMzOTsgfHwgKnAgPT0gJiMzOTtcdTAwM2UmIzM5OyB8fCAqcCA9PSAmIzM5O3wmIzM5OyB8fCAqcCA9PSAmIzM5O1x1MDAyNiYjMzk7KSB7XG4gXHRcdFx0bWVtbW92ZShwICYjNDM7IDEsIHAsIHN0cmxlbihidWYpICYjNDM7IDEgLSAocCAtIGJ1ZikpO1xuIFx0XHRcdC8qIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3Rlci4gKi9cbiBcdFx0XHQqcCYjNDM7JiM0MzsgPSAmIzM5O1xcXFwmIzM5OztcbkBAIC0xMjksMTYgJiM0MzsxMjIsMTAgQEAgcHJpbnRfaW5zbl9mb3JfZ3JhcGgodm9pZCAqcHJpdmF0ZV9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBzdGF0aWMgdm9pZCBfX3ByaW50ZigyLCAzKVxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XG4tXHRjaGFyIGNob21wZWRfZm10W2xdO1xuIFx0dmFfbGlzdCBhcmdzO1xuIFxuIFx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdGlmIChsIFx1MDAzZSAwKSB7XG4tXHRcdHN0cm5jcHkoY2hvbXBlZF9mbXQsIGZtdCwgbCAtIDEpO1xuLVx0XHRjaG9tcGVkX2ZtdFtsIC0gMV0gPSAmIzM5O1xcMCYjMzk7O1xuLVx0fVxuLVx0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBjaG9tcGVkX2ZtdCwgYXJncyk7XG4mIzQzO1x0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xuIFx0dmFfZW5kKGFyZ3MpO1xuIH1cbiBcbkBAIC0zNTEsNiAmIzQzOzMzOCw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbiBcbiBcdFx0cHJpbnRmKFwmIzM0OyU0dTogXCYjMzQ7LCBpKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcblwmIzM0Oyk7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0OyAgICAgICBcJiMzNDspO1xuQEAgLTQxNyw2ICYjNDM7NDA1LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9mb3JfZ3JhcGgoc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1Zl9zdGFydCwgdm9pZCAqYnVmX2VuZCxcbiBcbiBcdFx0cHJpbnRmKFwmIzM0OyV1OiBcJiMzNDssIGluc25fb2ZmKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcXFxsXFxcXFxcblwmIzM0Oyk7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0O1xcXFwgXFxcXCBcXFxcIFxcXFwgXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXG5pbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXG5AQCAtNTUsMTAgJiM0Mzs1NSw5IEBAIHN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4gXHQgKiBmb3IgZWFjaCBpbnN0cnVjdGlvbiAoRkYgc3RhbmRzIGZvciBpbnN0cnVjdGlvbiBgY29kZWAgYnl0ZSkuXG4gXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cbiBcdCAqIEUuZy46IFwmIzM0Oyg4NSkgY2FsbCBmb28jMTBcJiMzNDsgLVx1MDAzZSBcJiMzNDtjYWxsIGZvb1wmIzM0Oy5cbi1cdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICYjMzk7bWF4KHN0cmxlbihidWYpIC0gMSwgMCkmIzM5OyB0aGluZykuXG4gXHQgKi9cbiBcdHBmeF9lbmQgPSBidWYgJiM0MzsgNTtcbi1cdHNmeF9zdGFydCA9IGJ1ZiAmIzQzOyBtYXgoKGludClzdHJsZW4oYnVmKSAtIDEsIDApO1xuJiM0MztcdHNmeF9zdGFydCA9IGJ1ZiAmIzQzOyAoaW50KXN0cmxlbihidWYpO1xuIFx0aWYgKHN0cm5jbXAocGZ4X2VuZCwgXCYjMzQ7Y2FsbCBcJiMzNDssIDUpID09IDAgXHUwMDI2XHUwMDI2ICh0bXAgPSBzdHJyY2hyKGJ1ZiwgJiMzOTsjJiMzOTspKSlcbiBcdFx0c2Z4X3N0YXJ0ID0gdG1wO1xuIFx0bGVuID0gc2Z4X3N0YXJ0IC0gcGZ4X2VuZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggYmU5N2Y2ODg3ZjBlNy4uZmJhNTYyYzgxOTY5MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC0xMjQsNiAmIzQzOzEyNCw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfaml0X2lubGluZS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpcnEuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY3R4X3B0cl9wYXJhbS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfemV4dC5za2VsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1BWF9FTlRSSUVTIDExXG4gXG5AQCAtMjc3LDYgJiM0MzsyNzgsNyBAQCB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfVxuJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH1cbiBcbiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJkZDNlYTY2MWI3Nzhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcbkBAIC0wLDAgJiM0MzsxLDM4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IGFyZW5hIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztleHRlcm4gbG9uZyBicGZfa2Z1bmNfY2FsbF90ZXN0NChzaWduZWQgY2hhciBhLCBzaG9ydCBiLCBpbnQgYywgbG9uZyBkKSBfX2tzeW07XG4mIzQzO1xuJiM0MzsvKiB0byByZXRhaW4gZGVidWcgaW5mbyBmb3IgQlRGIGdlbmVyYXRpb24gKi9cbiYjNDM7dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbiYjNDM7XHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoMCwgMCwgMCwgMCwgMCk7XG4mIzQzO1x0YnBmX3Jkb25seV9jYXN0KDAsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKVxuJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMilcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2xvc3RfYWNyb3NzX2NoZWNrcG9pbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI4ID0gcjA7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IDB4ZGVhZGJlZWZjYWZlYmFiZSBsbDtcdC8qIGluamVjdCBzb21lIHZhbHVlIGZvciByNiYjMzk7cyB1cHBlciBoYWxmICovXHRcXFxuJiM0MztcdGlmIHI4ICE9IDAgZ290byAxZjtcdFx0LyogZmFsbC10aHJvdWdoIGNhY2hlZCBmaXJzdCwgYnJhbmNoIHBydW5lZCAqL1x0XFxcbiYjNDM7XHRyNiA9IDMyO1x0XHRcdC8qIGZ1bGwgNjQtYml0IGRlZiAqL1x0XHRcdFx0XFxcbiYjNDM7XHRnb3RvIDJmO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzOzE6XHR3NiA9IDMyO1x0XHRcdC8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovXHRcdFxcXG4mIzQzOzI6XHRyMCA9IHI2O1x0XHRcdC8qIGJ1Z2d5IHZlcmlmaWVyIGJlbGlldmVkIHVwcGVyIDMyIGJpdHMgYXJlIDAgKi8gXFxcbiYjNDM7XHRcdFx0XHRcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1x0XFxcbiYjNDM7XHRyMCBcdTAwM2VcdTAwM2U9IDMyO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2t0aW1lX2dldF9ucylcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3cxID0gdzB7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHcxID0gdzA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIG9ubHkgYXMgMzItYml0IC1cdTAwM2Ugbm8gemV4dCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0OzsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHcxID0gdzA7XHRcdC8qIE1PViAqL1x0XHRcXFxuJiM0MztcdHcyID0gdzE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzIgJiM0Mzs9IHcxO1x0XHQvKiBBTFUzMiwgQlBGX1ggKi9cdFxcXG4mIzQzO1x0dzIgJiM0Mzs9IDE7XHRcdC8qIEFMVTMyLCBCUEZfSyAqL1x0XFxcbiYjNDM7XHR3MiA9IHcyO1x0XHQvKiBrZWVwIHcyIGFsaXZlIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbiAqLyBcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDY0LWJpdCBkZWZpbml0aW9uIGlzIG5ldmVyIHplcm8gZXh0ZW5kZWQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbm90X21zZyhcJiMzNDtyMSA9IHIwe3suKn19OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgbm9femV4dF9tb3Y2NCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTmFycm93IGxvYWQgcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7cjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbmFycm93X2xvYWRfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICoodTMyICopKHIxMCAtIDgpO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6OjogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDMyLWJpdCBhdG9taWMgZmV0Y2ggcmVzdWx0IHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7cjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfYXRvbWljX2ZldGNoMzJfaGlfdXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IHIxO1x0XHRcdFx0XFxcbiYjNDM7XHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQuOGJ5dGUgJVtmZXRjaF9hZGQzMl07XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsXG4mIzQzO1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDMyLWJpdCBhdG9taWMgY21weGNoZyByZXN1bHQgKHIwKSByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3IwID0gYXRvbWljX2NtcHhjaGcoKHUzMiAqKShyMTAgLTgpLCByMCwgcjEpe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4mIzQzO1x0dzAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0LjhieXRlICVbY21weGNoZzMyXTtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHIyO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9pbnNuKGNtcHhjaGczMixcbiYjNDM7XHRcdCAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0NNUFhDSEcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIDMyLWJpdCBkZWYgYmVmb3JlIGEgYnJhbmNoLCB1cHBlciBoYWxmIHVzZWQgb24gb25lIGJyYW5jaCAtXHUwMDNlIHpleHQgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O3c2ID0gMzJ7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuJiM0MztcdHc2ID0gMzI7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHIxJiMzOTtzIHVwcGVyIGhhbGYgaXMgZGVhZCwgc28gJiMzOTt3MSA9IDEmIzM5OyBtdXN0IE5PVCBiZSBtYXJrZWQgZm9yIHplcm8gZXh0ZW5zaW9uLiAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0O3cxID0gMXt7Lip9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcXFxuJiM0MztcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDtyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHRcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2xkX2Fic19oaV91c2VkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHU4ICopc2tiWzBdO1x0XHRcdFx0XFxcbiYjNDM7XHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gcjc7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSGVscGVyIHBhcmFtZXRlcnMgYXJlIHJlYWQgYXMgNjQtYml0IChjYWxsX3VzZV9tYXNrKCkgZmFsbGJhY2spICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MiA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdHcyID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfdHJhY2VfcHJpbnRrXTtcdFx0XHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfdHJhY2VfcHJpbnRrKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovXG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHN1YnByb2dfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQ7XHRcdFxcXG4mIzQzO1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgemVybyBleHRlbmRlZCAqL1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDt3MiA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDt3MyA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDt3NCA9IDF7eyAmIzQzO319OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQga2Z1bmNfcGFyYW1fcmVhZF9wZXJfYnRmKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHcyID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHczID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHc0ID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgYnBmX2tmdW5jX2NhbGxfdGVzdDQ7XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19ub3RfbXNnKFwmIzM0OzsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGFsdTMyX2FuZF8zMmJpdF9jb25kaXRpb25hbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHcxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbiYjNDM7XHR3MiA9IDI4O1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHcyIFx1MDAzZSB3MSBnb3RvIDFmO1x0XHQvKiBCUEZfWCAqL1x0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGFsdTMyX2FuZF82NGJpdF9jb25kaXRpb25hbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbiYjNDM7XHRyMiA9IDI4O1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHIyIFx1MDAzZSByMSBnb3RvIDFmO1x0XHQvKiBCUEZfWCAqL1x0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX25vdF9tc2coXCYjMzQ7OyB6ZXh0XCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgYWx1NjRfYW5kX2NvbmRpdGlvbmFscyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHcxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbiYjNDM7XHRpZiByMSBcdTAwM2UgNDIgZ290byAxZjtcdFx0LyogQlBGX0sgKi9cdFxcXG4mIzQzO1x0cjIgPSAyODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiB3MiBcdTAwM2UgdzEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4mIzQzO1x0aWYgcjIgXHUwMDNlIHIxIGdvdG8gMWY7XHRcdC8qIEJQRl9YICovXHRcXFxuJiM0MztcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MzsxOlx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P2ZlbnRyeS5zL1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuJiM0MztfX2FyY2hfczM5MHhcbiYjNDM7X194bGF0ZWQoXCYjMzQ7NzogdzEgPSB3MFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7ODogdzEgPSB3MVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7OTogdzEgJiM0Mzs9IDhcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OzEwOiB3MSA9IHcxXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgYXJlbmFfcHRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gJVthcmVuYV0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIzID0gMTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI0ID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI1ID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdO1x0XHRcdFxcXG4mIzQzO1x0cjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpO1x0LyogbmVlZHMgemV4dCAqL1xcXG4mIzQzO1x0cjEgJiM0Mzs9IDg7XHRcdFx0LyogbmVlZHMgemV4dCAqL1xcXG4mIzQzO1x0Kih1NjQgKikocjEgJiM0MzswKSA9IDQyO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIoYXJlbmEpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsvKiBDaGVjayBpZiBwcm9iZSBtZW0gbG9hZHMga2VlcCB0aGVpciB6ZXJvIGV4dGVuc2lvbi4gKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fYXJjaF9zMzkweFxuJiM0MztfX3hsYXRlZChcJiMzNDszOiByMSA9ICoodTY0ICopKHIwICYjNDM7MClcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OzQ6IHIyID0gKih1MzIgKikocjAgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7NTogdzIgPSB3MlwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7NjogcjMgPSAqKHUxNiAqKShyMCAmIzQzOzApXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDs3OiB3MyA9IHczXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDs4OiByNCA9ICoodTggKikocjAgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7OTogdzQgPSB3NFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHByb2JlX21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcdFx0XHRcXFxuJiM0MztcdHIxID0gKih1NjQgKikocjAgJiM0MzsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuJiM0MztcdHIyID0gKih1MzIgKikocjAgJiM0MzsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuJiM0MztcdHIzID0gKih1MTYgKikocjAgJiM0MzsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuJiM0MztcdHI0ID0gKih1OCAqKShyMCAmIzQzOyAwKTtcdC8qIEJQRl9QUk9CRV9NRU0gKi9cdFxcXG4mIzQzO1x0cjAgPSByMTtcdFx0LyogbWFrZSB0aGUgcmVnaXN0ZXJzIHVzZWQgKi8gXFxcbiYjNDM7XHRyMCAmIzQzOz0gcjI7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgJiM0Mzs9IHIzO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIwICYjNDM7PSByNDtcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfcmRvbmx5X2Nhc3QpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZlcmlmaWNhdGlvbiBieXBhc3NlcyBvciBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzc3ZmUyMWFkOGVlZjc2NzhmOGE1ZWFjMDcwNDBjY2Q4ZGQzYjRiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMDA6NTE6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzLi4zOWIwZGIyYTRmMTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE2MiwxMSAmIzQzOzE2Miw2IEBAIHN0cnVjdCBicGZfcmVnX3N0YXRlIHsKIAkgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS4KIAkgKi8KIAl1MzIgZnJhbWVubzsKLQkvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZQotCSAqIHdyaXRpbmcgaW5zbi4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc3VicmVnX2RlZiBpcyB1c2VkIGJlZm9yZSBhbnkgaW5zbgotCSAqIHBhdGNoaW5nIHdoaWNoIG9ubHkgaGFwcGVucyBhZnRlciBtYWluIHZlcmlmaWNhdGlvbiBmaW5pc2hlZC4KLQkgKi8KLQlzMzIgc3VicmVnX2RlZjsKIAkvKiBpZiAoIXByZWNpc2UgJmFtcDsmYW1wOyBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24mIzM5O3QgYWZmZWN0IHNhZmV0eSAqLwogCWJvb2wgcHJlY2lzZTsKIH07CkBAIC0xNjMxLDcgJiM0MzsxNjI2LDYgQEAgc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiB7CiB9OwogCiAvKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IGZpeHVwcy5jICovCi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpOwogdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pOwogdm9pZCBicGZfbWFya19zdWJwcm9nX2V4Y19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7CiBib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CkBAIC0xNjU1LDUgJiM0MzsxNjQ5LDYgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTsKIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwogaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CiBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwomIzQzO2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogCiAjZW5kaWYgLyogX0xJTlVYX0JQRl9WRVJJRklFUl9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwppbmRleCAyZTRhZTBlZjA4NjA5Li43YzQ1OTllNjVlY2ViIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCwKIAkJdmVyYm9zZShlbnYsICYjMzQ7c3RhY2s9JXMgYmVmb3JlICYjMzQ7LCBlbnYtJmd0O3RtcF9zdHJfYnVmKTsKIAkJdmVyYm9zZShlbnYsICYjMzQ7JWQ6ICYjMzQ7LCBpZHgpOwogCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAl9CiAKIAkvKiBJZiB0aGVyZSBpcyBhIGhpc3RvcnkgcmVjb3JkIHRoYXQgc29tZSByZWdpc3RlcnMgZ2FpbmVkIHJhbmdlIGF0IHRoaXMgaW5zbiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jCmluZGV4IDAzOTFiM2JjMDA3MzQuLjUwYjNjYTUxNDlhMGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaXNhc20uYwpAQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfZW5kX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLAogCQkJICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiB7Ci0JdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkXG4mIzM0OywKJiM0MzsJdmVyYm9zZShwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9ICVzJWQgciVkJiMzNDssCiAJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCUJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1RPX0JFID8gJiMzNDtiZSYjMzQ7IDogJiMzNDtsZSYjMzQ7LAogCQlpbnNuLSZndDtpbW0sIGluc24tJmd0O2RzdF9yZWcpOwpAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBzdGF0aWMgdm9pZCBwcmludF9icGZfYnN3YXBfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsCiAJCQkgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKLQl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWRcbiYjMzQ7LAomIzQzOwl2ZXJib3NlKHByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYnN3YXAlZCByJWQmIzM0OywKIAkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtkc3RfcmVnKTsKIH0KQEAgLTE5NywxOSAmIzQzOzE5NywxOSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWVsc2UKIAkJCQlwcmludF9icGZfZW5kX2luc24odmVyYm9zZSwgY2JzLSZndDtwcml2YXRlX2RhdGEsIGluc24pOwogCQl9IGVsc2UgaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTkVHKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkID0gLSVjJWRcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpICVjJWQgPSAtJWMlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcpOwogCQl9IGVsc2UgaWYgKGlzX2FkZHJfc3BhY2VfY2FzdChpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYWRkcl9zcGFjZV9jYXN0KHIlZCwgJXUsICV1KSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7c3JjX3JlZywgKCh1MzIpaW5zbi0mZ3Q7aW1tKSAmZ3Q7Jmd0OyAxNiwgKHUxNilpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKGlzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJmFtcDsodm9pZCBfX3BlcmNwdSAqKShyJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAmYW1wOyh2b2lkIF9fcGVyY3B1ICopKHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlYyVkICVzICVzJWMlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlcyVjJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJiMzOTt3JiMzOTsgOiAmIzM5O3ImIzM5OywKIAkJCQlpbnNuLSZndDtkc3RfcmVnLAogCQkJCWlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdCkBAIC0yMTgsNyAmIzQzOzIxOCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgJWMlZCAlcyAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaXNfc2Rpdl9zbW9kKGluc24pID8gYnBmX2FsdV9zaWduX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0KQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0pCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAqKCVzICopKHIlZCAlJiM0MztkKSA9IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLApAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgKGluc24tJmd0O2ltbSA9PSBCUEZfQUREIHx8IGluc24tJmd0O2ltbSA9PSBCUEZfQU5EIHx8CiAJCQkgIGluc24tJmd0O2ltbSA9PSBCUEZfT1IgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YT1IpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBsb2NrICooJXMgKikociVkICUmIzQzO2QpICVzIHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlJiM0MztkKSAlcyByJWQmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsCkBAIC0yNDYsNyAmIzQzOzI0Niw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHwKIAkJCSAgICBpbnNuLSZndDtpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O3NyY19yZWcsCiAJCQkJQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0RXID8gJiMzNDs2NCYjMzQ7IDogJiMzNDsmIzM0OywKIAkJCQlicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tJmd0O2ltbSkgJmd0OyZndDsgNF0sCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUmIzQzO2QpLCByMCwgciVkKVxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIwLCByJWQpJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQlCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcgPyAmIzM0OzY0JiMzNDsgOiAmIzM0OyYjMzQ7LAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKQEAgLTI2Miw0NCAmIzQzOzI2Miw0NCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCQlpbnNuLSZndDtzcmNfcmVnKTsKIAkJfSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDICZhbXA7JmFtcDsKIAkJCSAgIGluc24tJmd0O2ltbSA9PSBCUEZfWENIRykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtzcmNfcmVnLAogCQkJCUJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVyA/ICYjMzQ7NjQmIzM0OyA6ICYjMzQ7JiMzNDssCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O29mZiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlJiM0MztkKSlcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIlZCA9IGxvYWRfYWNxdWlyZSgoJXMgKikociVkICUmIzQzO2QpKSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiAJCQkgICBpbnNuLSZndDtpbW0gPT0gQlBGX1NUT1JFX1JFTCkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUmIzQzO2QpLCByJWQpXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJSYjNDM7ZCksIHIlZCkmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtvZmYsIGluc24tJmd0O3NyY19yZWcpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHXyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkgewogCQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgKiglcyAqKShyJWQgJSYjNDM7ZCkgPSAlZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJaW5zbi0mZ3Q7b2ZmLCBpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbm9zcGVjJiMzNDssIGluc24tJmd0O2NvZGUpOwogCQl9IGVsc2UgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfc3RfJTAyeFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX3N0XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9NRU0gJmFtcDsmYW1wOyBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfTUVNU1gpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkeF8lMDJ4XG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZClcbiYjMzQ7LAomIzQzOwkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJSYjNDM7ZCkmIzM0OywKIAkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2RzdF9yZWcsCiAJCQlCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNID8KIAkJCQkgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdIDoKQEAgLTMwNywxMiAmIzQzOzMwNywxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicywKIAkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHsKIAkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BQlMpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF0mIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLAogCQkJCWJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLSZndDtjb2RlKSAmZ3Q7Jmd0OyAzXSwKIAkJCQlpbnNuLSZndDtpbW0pOwogCQl9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9JTkQpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgJiM0MzsgJWRdXG4mIzM0OywKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICYjNDM7ICVkXSYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsCiAJCQkJYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDNdLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O2ltbSk7CkBAIC0zMzIsMTIgJiM0MzszMzIsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsCiAJCQlpZiAoaXNfcHRyICZhbXA7JmFtcDsgIWFsbG93X3B0cl9sZWFrcykKIAkJCQlpbW0gPSAwOwogCi0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAlc1xuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgciVkID0gJXMmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtkc3RfcmVnLAogCQkJCV9fZnVuY19pbW1fbmFtZShjYnMsIGluc24sIGltbSwKIAkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpKTsKIAkJfSBlbHNlIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7QlVHX2xkXyUwMnhcbiYjMzQ7LCBpbnNuLSZndDtjb2RlKTsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZF8lMDJ4JiMzNDssIGluc24tJmd0O2NvZGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkgewpAQCAtMzQ3LDM1ICYjNDM7MzQ3LDM1IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJY2hhciB0bXBbNjRdOwogCiAJCQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpIHsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXNcbiYjMzQ7LAomIzQzOwkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsIHBjJXMmIzM0OywKIAkJCQkJaW5zbi0mZ3Q7Y29kZSwKIAkJCQkJX19mdW5jX2dldF9uYW1lKGNicywgaW5zbiwKIAkJCQkJCQl0bXAsIHNpemVvZih0bXApKSk7CiAJCQl9IGVsc2UgewogCQkJCXN0cmNweSh0bXAsICYjMzQ7dW5rbm93biYjMzQ7KTsKLQkJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBjYWxsICVzIyVkXG4mIzM0OywgaW5zbi0mZ3Q7Y29kZSwKJiM0MzsJCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgY2FsbCAlcyMlZCYjMzQ7LCBpbnNuLSZndDtjb2RlLAogCQkJCQlfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLAogCQkJCQkJCXRtcCwgc2l6ZW9mKHRtcCkpLAogCQkJCQlpbnNuLSZndDtpbW0pOwogCQkJfQogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBpbnNuLSZndDtvZmYpOwogCQl9IGVsc2UgaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCkpIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG94IHIlZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZ290b3ggciVkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgJmFtcDsmYW1wOwogCQkJICAgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfTUFZX0dPVE8pIHsKLQkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIG1heV9nb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgbWF5X2dvdG8gcGMlJiM0MztkJiMzNDssCiAJCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7b2ZmKTsKIAkJfSBlbHNlIGlmIChpbnNuLSZndDtjb2RlID09IChCUEZfSk1QMzIgfCBCUEZfSkEpKSB7Ci0JCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSBnb3RvbCBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGdvdG9sIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGluc24tJmd0O2ltbSk7CiAJCX0gZWxzZSBpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkgewotCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDsoJTAyeCkgZXhpdFxuJiMzNDssIGluc24tJmd0O2NvZGUpOwomIzQzOwkJCXZlcmJvc2UoY2JzLSZndDtwcml2YXRlX2RhdGEsICYjMzQ7KCUwMngpIGV4aXQmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCX0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwKLQkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2RcbiYjMzQ7LAomIzQzOwkJCQkmIzM0OyglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUmIzQzO2QmIzM0OywKIAkJCQlpbnNuLSZndDtjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAmIzM5O3cmIzM5OyA6ICYjMzk7ciYjMzk7LAogCQkJCWluc24tJmd0O2RzdF9yZWcsCiAJCQkJYnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tJmd0O2NvZGUpICZndDsmZ3Q7IDRdLApAQCAtMzgzLDE0ICYjNDM7MzgzLDE0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJCWluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O29mZik7CiAJCX0gZWxzZSB7CiAJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLAotCQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZFxuJiMzNDssCiYjNDM7CQkJCSYjMzQ7KCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJSYjNDM7ZCYjMzQ7LAogCQkJCWluc24tJmd0O2NvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICYjMzk7dyYjMzk7IDogJiMzOTtyJiMzOTssCiAJCQkJaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCQlicGZfam1wX3N0cmluZ1tCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgJmd0OyZndDsgNF0sCiAJCQkJKHUzMilpbnNuLSZndDtpbW0sIGluc24tJmd0O29mZik7CiAJCX0KIAl9IGVsc2UgewotCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlc1xuJiMzNDssCiYjNDM7CQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSAlcyYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgYnBmX2NsYXNzX3N0cmluZ1tjbGFzc10pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGEwYmRkYWRhNzk2NGUuLjdiMzUxMGQ0NmIzNzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtNDQsMTUgJiM0Mzs0NCw2MSBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAl9CiB9CiAKLS8qIFJldHVybiBUUlVFIGlmIElOU04gaGFzIGRlZmluZWQgYW55IDMyLWJpdCB2YWx1ZSBleHBsaWNpdGx5LiAqLwotc3RhdGljIGJvb2wgaW5zbl9oYXNfZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzOy8qCiYjNDM7ICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSAmZ3Q7PSAwLgomIzQzOyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LAomIzQzOyAqIG90aGVyd2lzZSByZXR1cm4gRkFMU0UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKLQlpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pOwomIzQzOwl1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKTsKJiM0MzsJdTggbW9kZSA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpOwomIzQzOwl1OCBzaXplID0gQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CXU4IG9wID0gQlBGX09QKGluc24tJmd0O2NvZGUpOwomIzQzOwlib29sIG1vZGVfbWVtOwomIzQzOwomIzQzOwkvKiBzdWJyZWdpc3RlciBlbmRpbmVzcyBzd2FwICovCiYjNDM7CWlmICgoY2xhc3MgPT0gQlBGX0FMVSB8fCBjbGFzcyA9PSBCUEZfQUxVNjQpICZhbXA7JmFtcDsgb3AgPT0gQlBGX0VORCAmYW1wOyZhbXA7IGluc24tJmd0O2ltbSAhPSA2NCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogdzAgJiM0Mzs9IDEgKi8KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9BTFUgJmFtcDsmYW1wOyBvcCAhPSBCUEZfRU5EKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCksIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi8KJiM0MzsJaWYgKGluc24tJmd0O2NvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgJmFtcDsmYW1wOwomIzQzOwkgICAgaW5zbi0mZ3Q7b2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgJmFtcDsmYW1wOyBpbnNuLSZndDtpbW0gPT0gMSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogbm9uIDY0LWJpdCwgbm9uIHNpZ25lZCBleHRlbmRlZCBsb2FkcyAqLwomIzQzOwltb2RlX21lbSA9IG1vZGUgPT0gQlBGX01FTSB8fCBtb2RlID09IEJQRl9QUk9CRV9NRU0gfHwgbW9kZSA9PSBCUEZfUFJPQkVfTUVNMzI7CiYjNDM7CWlmIChjbGFzcyA9PSBCUEZfTERYICZhbXA7JmFtcDsgbW9kZV9tZW0gJmFtcDsmYW1wOyBzaXplICE9IEJQRl9EVykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogYXRvbWljcywgc2VlIGluc25fZGVmX3JlZ25vKCkgKi8KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9TVFggJmFtcDsmYW1wOyBzaXplICE9IEJQRl9EVykKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCWlmIChkc3RfcmVnID09IC0xKQomIzQzOwkvKiBib3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi8KJiM0MzsJaWYgKGNsYXNzID09IEJQRl9MRCAmYW1wOyZhbXA7IChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuICFicGZfaXNfcmVnNjQoaW5zbiwgZHN0X3JlZywgTlVMTCwgRFNUX09QKTsKJiM0MzsJLyogQ29uc2VydmF0aXZlbHkgcmV0dXJuIHRydWUgYXQgZGVmYXVsdC4gKi8KJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90CiYjNDM7ICogZXhwbGljaXRseSBkZWZpbmUgYSAzMi1iaXQgdmFsdWUuCiYjNDM7ICovCiYjNDM7aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWludCBkc3RfcmVnID0gaW5zbl9kZWZfcmVnbm8oaW5zbik7CiYjNDM7CiYjNDM7CWlmIChkc3RfcmVnICZsdDsgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiBkc3RfcmVnOwogfQogCiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTE2OSw3ICYjNDM7MjE1LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZQogCSAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuCiAJICovCi0JZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7CiYjNDM7CWRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpICZndDs9IDA7CiAKIAlpZiAoY250ID09IDEpCiAJCXJldHVybjsKQEAgLTE4MSw3ICYjNDM7MjI3LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlmb3IgKGkgPSBvZmY7IGkgJmx0OyBvZmYgJiM0MzsgY250IC0gMTsgaSYjNDM7JiM0MzspIHsKIAkJLyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi8KIAkJZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47Ci0JCWRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpOwomIzQzOwkJZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gJiM0MzsgaSkgJmd0Oz0gMDsKIAl9CiAKIAkvKgpAQCAtNjE2LDExICYjNDM7NjYyLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJaWYgKGxvYWRfcmVnID09IC0xKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKiBOT1RFOiBhcmcgJiMzNDtyZWcmIzM0OyAodGhlIGZvdXJ0aCBvbmUpIGlzIG9ubHkgdXNlZCBmb3IKLQkJCSAqICAgICAgIEJQRl9TVFggJiM0MzsgU1JDX09QLCBzbyBpdCBpcyBzYWZlIHRvIHBhc3MgTlVMTAotCQkJICogICAgICAgaGVyZS4KLQkJCSAqLwotCQkJaWYgKGJwZl9pc19yZWc2NCgmYW1wO2luc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7CiYjNDM7CQkJaWYgKGJwZl9pc19yZWc2NCgmYW1wO2luc24pKSB7CiAJCQkJaWYgKGNsYXNzID09IEJQRl9MRCAmYW1wOyZhbXA7CiAJCQkJICAgIEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTU0pCiAJCQkJCWkmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jCmluZGV4IDBhYWRmYmFlMGFjYzUuLjc4MzUxZTRhNmYyNWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKQEAgLTQ5Nyw3ICYjNDM7NDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmkKIAkJcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKIAkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaW5zbl9pZHgpOwogCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgJmFtcDtpbnNuc1tpbnNuX2lkeF0pOwotCQlicGZfdmxvZ19yZXNldCgmYW1wO2Vudi0mZ3Q7bG9nLCBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gMSk7IC8qIHJlbW92ZSBcbiAqLwogCQlpbnNuX3BvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3M7CiAJCXZlcmJvc2UoZW52LCAmIzM0OyUqYzsmIzM0OywgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJiMzOTsgJiMzOTspOwogCQlwb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwpAQCAtMTA0Myw3ICYjNDM7MTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpCiAJCWlmICghcHJpbnRlZCkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKLQkJCWJwZl92bG9nX3Jlc2V0KCZhbXA7ZW52LSZndDtsb2csIGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSAxKTsKIAkJCXByaW50ZWQgPSB0cnVlOwogCQl9CiAJCXZlcmJvc2UoZW52LCAmIzM0O1x0ciVkOiAmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgJmFtcDthdF9pbltpXSk7CkBAIC0xMDU4LDcgJiM0MzsxMDU2LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGkKIAkJaWYgKCFwcmludGVkKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslM2Q6ICYjMzQ7LCBpZHgpOwogCQkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pOwotCQkJYnBmX3Zsb2dfcmVzZXQoJmFtcDtlbnYtJmd0O2xvZywgZW52LSZndDtsb2cuZW5kX3BvcyAtIDEpOwogCQkJcHJpbnRlZCA9IHRydWU7CiAJCX0KIAkJdmVyYm9zZShlbnYsICYjMzQ7XHRzYSVkOiAmIzM0OywgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgJmFtcDthdF9pblthaV0pOwpAQCAtMTA3MCw3ICYjNDM7MTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpCiAJCWlmICghcHJpbnRlZCkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJCWJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTsKLQkJCWJwZl92bG9nX3Jlc2V0KCZhbXA7ZW52LSZndDtsb2csIGVudi0mZ3Q7bG9nLmVuZF9wb3MgLSAxKTsKIAkJCXByaW50ZWQgPSB0cnVlOwogCQl9CiAJCXZlcmJvc2UoZW52LCAmIzM0O1x0ZnAlJiM0MztkOiAmIzM0OywgLShpICYjNDM7IDEpICogOCk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgJmFtcDthdF9zdGFja19pbltpXSk7CkBAIC0xNTQ1LDYgJiM0MzsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAKIAkJdmVyYm9zZShlbnYsICYjMzQ7JTNkOiAmIzM0OywgaWR4KTsKIAkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaWR4XSk7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtcbiYjMzQ7KTsKIAogCQkvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi8KIAkJaWYgKGlzX2xkeF9zdHhfY2FsbCAmYW1wOyZhbXA7CkBAIC0yMDUwLDI5ICYjNDM7MjA0NywzOCBAQCBpbnQgYnBmX2NvbXB1dGVfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIC8qIEVhY2ggZmllbGQgaXMgYSByZWdpc3RlciBiaXRtYXNrICovCiBzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgewotCXUxNiB1c2U7CS8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovCi0JdTE2IGRlZjsJLyogcmVnaXN0ZXJzIHdyaXR0ZW4gYnkgaW5zdHJ1Y3Rpb24gKi8KLQl1MTYgaW47CQkvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovCi0JdTE2IG91dDsJLyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovCiYjNDM7CXUzMiB1c2U7CS8qIHJlZ2lzdGVycyByZWFkIGJ5IGluc3RydWN0aW9uICovCiYjNDM7CXUzMiBkZWY7CS8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovCiYjNDM7CXUzMiBpbjsJCS8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBiZWZvcmUgaW5zdHJ1Y3Rpb24gKi8KJiM0MzsJdTMyIG91dDsJLyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovCiB9OwogCiAvKiBCaXRtYXNrIHdpdGggMXMgZm9yIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFMTF9DQUxMRVJfU0FWRURfUkVHUyAoKDF1ICZsdDsmbHQ7IENBTExFUl9TQVZFRF9SRUdTKSAtIDEpCiAKJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiAmIzQzOyAxNik7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUzMiBtYXNrX3dpZGVuKHUzMiBtKSB7IHJldHVybiBtIHwgKG0gJmx0OyZsdDsgMTYpOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSAmZ3Q7Jmd0OyAxNik7IH0KJiM0MzsKIC8qIENvbXB1dGUgaW5mby0mZ3Q7e3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovCiBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCSAgIHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqaW5mbykKIHsKIAlzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSBjczsKLQl1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKTsKLQl1OCBjb2RlID0gQlBGX09QKGluc24tJmd0O2NvZGUpOwotCXU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLSZndDtjb2RlKTsKLQl1MTYgc3JjID0gQklUKGluc24tJmd0O3NyY19yZWcpOwotCXUxNiBkc3QgPSBCSVQoaW5zbi0mZ3Q7ZHN0X3JlZyk7Ci0JdTE2IHIwICA9IEJJVCgwKTsKLQl1MTYgZGVmID0gMDsKLQl1MTYgdXNlID0gMHhmZmZmOwomIzQzOwljb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKTsKJiM0MzsJY29uc3QgdTggY29kZSA9IEJQRl9PUChpbnNuLSZndDtjb2RlKTsKJiM0MzsJY29uc3QgdTggbW9kZSA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpOwomIzQzOwljb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWNvbnN0IHUzMiBzcmMgPSByZWc2NF9tYXNrKGluc24tJmd0O3NyY19yZWcpOwomIzQzOwljb25zdCB1MzIgZHN0ID0gcmVnNjRfbWFzayhpbnNuLSZndDtkc3RfcmVnKTsKJiM0MzsJY29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpOwomIzQzOwljb25zdCB1MzIgZHN0MzIgPSBtYXNrX2xvKGRzdCk7CiYjNDM7CWNvbnN0IHUzMiByMCAgPSByZWc2NF9tYXNrKDApOwomIzQzOwl1MzIgZGVmID0gMDsKJiM0MzsJdTMyIHVzZSA9IFUzMl9NQVg7CiAKIAlzd2l0Y2ggKGNsYXNzKSB7CiAJY2FzZSBCUEZfTEQ6CkBAIC0yMDgzLDggJiM0MzsyMDg5LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCXVzZSA9IDA7CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBCUEZfTEQgfCBCUEZfQUJTOgotCQljYXNlIEJQRl9MRCB8IEJQRl9JTkQ6CiYjNDM7CQljYXNlIEJQRl9BQlM6CiYjNDM7CQljYXNlIEJQRl9JTkQ6CiAJCQkvKiBzdGljayB3aXRoIGRlZmF1bHRzICovCiAJCQlicmVhazsKIAkJfQpAQCAtMjA5Miw3ICYjNDM7MjA5OCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJY2FzZSBCUEZfTERYOgogCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBCUEZfTUVNOgomIzQzOwkJCS8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqLwomIzQzOwkJCWRlZiA9IGRzdDsKJiM0MzsJCQl1c2UgPSBzcmM7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgQlBGX01FTVNYOgomIzQzOwkJCS8qCiYjNDM7CQkJICogc2lnbiBleHRlbnNpb24gZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXI7CiYjNDM7CQkJICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuCiYjNDM7CQkJICovCiAJCQlkZWYgPSBkc3Q7CiAJCQl1c2UgPSBzcmM7CiAJCQlicmVhazsKQEAgLTIxMTAsMTIgJiM0MzsyMTI0LDE5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgQlBGX01FTToKIAkJCWRlZiA9IDA7Ci0JCQl1c2UgPSBkc3QgfCBzcmM7CiYjNDM7CQkJdXNlID0gZHN0IHwgKHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FUT01JQzoKJiM0MzsJCWNhc2UgQlBGX0FUT01JQzogewomIzQzOwkJCS8qCiYjNDM7CQkJICogZHN0IGhvbGRzIGEgcG9pbnRlciBhbmQgaXMgYWx3YXlzIHVzZWQgYXMgNjQtYml0OwomIzQzOwkJCSAqIHRoZSB2YWx1ZSBvcGVyYW5kIGFuZCByMCBhcmUgcmVhZCBhcyAzMi1iaXQgZm9yIEJQRl9XIGF0b21pY3MuCiYjNDM7CQkJICovCiYjNDM7CQkJdTMyIHNyY3YgPSBzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyOwomIzQzOwkJCXUzMiByMHYgID0gc2l6ZSA9PSBCUEZfRFcgPyByMCA6IG1hc2tfbG8ocjApOwomIzQzOwogCQkJc3dpdGNoIChpbnNuLSZndDtpbW0pIHsKIAkJCWNhc2UgQlBGX0NNUFhDSEc6Ci0JCQkJdXNlID0gcjAgfCBkc3QgfCBzcmM7CiYjNDM7CQkJCXVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7CiAJCQkJZGVmID0gcjA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEJQRl9MT0FEX0FDUToKQEAgLTIxMjQsMTAgJiM0MzsyMTQ1LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQlicmVhazsKIAkJCWNhc2UgQlBGX1NUT1JFX1JFTDoKIAkJCQlkZWYgPSAwOwotCQkJCXVzZSA9IGRzdCB8IHNyYzsKJiM0MzsJCQkJdXNlID0gZHN0IHwgc3JjdjsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJdXNlID0gZHN0IHwgc3JjOwomIzQzOwkJCQl1c2UgPSBkc3QgfCBzcmN2OwogCQkJCWlmIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKQogCQkJCQlkZWYgPSBzcmM7CiAJCQkJZWxzZQpAQCAtMjEzNSw2ICYjNDM7MjE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiYjNDM7CQl9CiAJCWJyZWFrOwogCWNhc2UgQlBGX0FMVToKIAljYXNlIEJQRl9BTFU2NDoKQEAgLTIxNDgsMTQgJiM0MzsyMTcwLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCWlmIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9LKQogCQkJCXVzZSA9IDA7CiAJCQllbHNlCi0JCQkJdXNlID0gc3JjOwomIzQzOwkJCQl1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBzcmMgOiBzcmMzMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGVmID0gZHN0OwogCQkJaWYgKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0spCi0JCQkJdXNlID0gZHN0OwomIzQzOwkJCQl1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBkc3QgOiBkc3QzMjsKIAkJCWVsc2UKLQkJCQl1c2UgPSBkc3QgfCBzcmM7CiYjNDM7CQkJCXVzZSA9IGNsYXNzID09IEJQRl9BTFU2NCA/IChkc3QgfCBzcmMpIDogKGRzdDMyIHwgc3JjMzIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlBGX0pNUDoKQEAgLTIxODEsMTMgJiM0MzsyMjAzLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCXVzZSA9IGRlZiAmYW1wOyB+QklUKEJQRl9SRUdfMCk7CiAJCQlpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCAmYW1wO2NzKSkKIAkJCQl1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTsKJiM0MzsJCQlkZWYgPSBtYXNrX3dpZGVuKGRlZik7CiYjNDM7CQkJdXNlID0gbWFza193aWRlbih1c2UpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkZWYgPSAwOwotCQkJaWYgKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0spCi0JCQkJdXNlID0gZHN0OwotCQkJZWxzZQotCQkJCXVzZSA9IGRzdCB8IHNyYzsKJiM0MzsJCQl1c2UgPSBjbGFzcyA9PSBCUEZfSk1QID8gZHN0IDogZHN0MzI7CiYjNDM7CQkJaWYgKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1gpCiYjNDM7CQkJCXVzZSB8PSBjbGFzcyA9PSBCUEZfSk1QID8gc3JjIDogc3JjMzI7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMjIwOSw2ICYjNDM7MjIzMiw3IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlOwogCWludCBpbnNuX2NudCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwomIzQzOwl1NjQgcG9zLCBpbnNuX3BvczsKIAlpbnQgZXJyID0gMCwgaSwgajsKIAlib29sIGNoYW5nZWQ7CiAKQEAgLTIyNTIsOCAmIzQzOzIyNzYsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWludCBpbnNuX2lkeCA9IGVudi0mZ3Q7Y2ZnLmluc25fcG9zdG9yZGVyW2ldOwogCQkJc3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gJmFtcDtzdGF0ZVtpbnNuX2lkeF07CiAJCQlzdHJ1Y3QgYnBmX2lhcnJheSAqc3VjYzsKLQkJCXUxNiBuZXdfb3V0ID0gMDsKLQkJCXUxNiBuZXdfaW4gPSAwOwomIzQzOwkJCXUzMiBuZXdfb3V0ID0gMDsKJiM0MzsJCQl1MzIgbmV3X2luID0gMDsKIAogCQkJc3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7CiAJCQlmb3IgKGludCBzID0gMDsgcyAmbHQ7IHN1Y2MtJmd0O2NudDsgJiM0MzsmIzQzO3MpCkBAIC0yMjY3LDggJiM0MzsyMjkxLDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyAmIzQzOyYjNDM7aSkKLQkJaW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5zbl9jbnQ7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlpbnQgZGVmMzIgPSBicGZfaW5zbl9kZWYzMigmYW1wO2luc25zW2ldKTsKJiM0MzsJCXUzMiBvdXQgPSBzdGF0ZVtpXS5vdXQ7CiYjNDM7CQl1MzIgaW4gPSBzdGF0ZVtpXS5pbjsKJiM0MzsKJiM0MzsJCWluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHJlc2V0IHVwcGVyIGhhbHZlcwomIzQzOwkJICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb24KJiM0MzsJCSAqIHJlZ2lzdGVyIGlmIGFuIGluc3RydWN0aW9uIGRlZmluZXMgYSAzMi1iaXQgc3VicmVnaXN0ZXIgYW5kIHRoZQomIzQzOwkJICogdXBwZXIgaGFsZiBvZiB0aGF0IHJlZ2lzdGVyIGlzIGFsaXZlIGFmdGVyIHRoZSBpbnN0cnVjdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJaW5zbl9hdXhbaV0uemV4dF9kc3QgPSBkZWYzMiAmZ3Q7PSAwICZhbXA7JmFtcDsgKG1hc2tfaGkob3V0KSAmYW1wOyBCSVQoZGVmMzIpKTsKJiM0MzsJfQogCiAJaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwyKSB7CiAJCXZlcmJvc2UoZW52LCAmIzM0O0xpdmUgcmVncyBiZWZvcmUgaW5zbjpcbiYjMzQ7KTsKQEAgLTIyODQsNyAmIzQzOzIzMjAsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJZWxzZQogCQkJCQl2ZXJib3NlKGVudiwgJiMzNDsuJiMzNDspOwogCQkJdmVyYm9zZShlbnYsICYjMzQ7ICYjMzQ7KTsKJiM0MzsJCQlwb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zOwogCQkJYnBmX3ZlcmJvc2VfaW5zbihlbnYsICZhbXA7aW5zbnNbaV0pOwomIzQzOwkJCWluc25fcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKJiM0MzsJCQlpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpCiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyUqYzsgemV4dCYjMzQ7LCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAmIzM5OyAmIzM5Oyk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQlpZiAoYnBmX2lzX2xkaW1tNjQoJmFtcDtpbnNuc1tpXSkpCiAJCQkJaSYjNDM7JiM0Mzs7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNmYzNWY0ZTcxNWI2Li40NWQ0YzBhMDBhNWRiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMTI5LDEyICYjNDM7MjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovCiB2b2lkIGJwZl9tYXJrX3JlZ191bmtub3duX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewotCXMzMiBzdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwotCiAJbWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTsKIAlyZWctJmd0O3R5cGUgPSBTQ0FMQVJfVkFMVUU7CiAJcmVnLSZndDt2YXJfb2ZmID0gdG51bV91bmtub3duOwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7CiAJX19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTsKIH0KIApAQCAtMjIxMCw3ICYjNDM7MjIwNyw2IEBAIHN0YXRpYyBpbnQgbWFya19idGZfbGRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogfQogCi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHCSgwKQogc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpCiB7CkBAIC0yMjE5LDcgJiM0MzsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHsKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW2ldKTsKLQkJcmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJfQogCiAJLyogZnJhbWUgcG9pbnRlciAqLwpAQCAtMzAzMiwxMjAgJiM0MzszMDI3LDE0IEBAIHN0YXRpYyB2b2lkIG1hcmtfc3RhY2tfc2xvdHNfc2NyYXRjaGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCW1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkgLSBpKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgMzItYml0IG9wdGltaXphdGlvbgotICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcwotICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgotICovCi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sCi0JICAgICAgdTMyIHJlZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdCkKLXsKLQl1OCBjb2RlLCBjbGFzcywgb3A7Ci0KLQljb2RlID0gaW5zbi0mZ3Q7Y29kZTsKLQljbGFzcyA9IEJQRl9DTEFTUyhjb2RlKTsKLQlvcCA9IEJQRl9PUChjb2RlKTsKLQlpZiAoY2xhc3MgPT0gQlBGX0pNUCkgewotCQkvKiBCUEZfRVhJVCBmb3IgJiMzNDttYWluJiMzNDsgd2lsbCByZWFjaCBoZXJlLiBSZXR1cm4gVFJVRQotCQkgKiBjb25zZXJ2YXRpdmVseS4KLQkJICovCi0JCWlmIChvcCA9PSBCUEZfRVhJVCkKLQkJCXJldHVybiB0cnVlOwotCQlpZiAob3AgPT0gQlBGX0NBTEwpIHsKLQkJCS8qIEJQRiB0byBCUEYgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBtYXJraW5nCi0JCQkgKiBjYWxsZXIgc2F2ZWQgY2xvYmJlciB3aXRoIERTVF9PUF9OT19NQVJLIGZvciB3aGljaCB3ZQotCQkJICogZG9uJiMzOTt0IGNhcmUgdGhlIHJlZ2lzdGVyIGRlZiBiZWNhdXNlIHRoZXkgYXJlIGFueXdheQotCQkJICogbWFya2VkIGFzIE5PVF9JTklUIGFscmVhZHkuCi0JCQkgKi8KLQkJCWlmIChpbnNuLSZndDtzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZQotCQkJICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLgotCQkJICovCi0JCQlpZiAodCA9PSBTUkNfT1ApCi0JCQkJcmV0dXJuIHRydWU7Ci0KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCWlmIChjbGFzcyA9PSBCUEZfQUxVNjQgJmFtcDsmYW1wOyBvcCA9PSBCUEZfRU5EICZhbXA7JmFtcDsgKGluc24tJmd0O2ltbSA9PSAxNiB8fCBpbnNuLSZndDtpbW0gPT0gMzIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IHx8IGNsYXNzID09IEJQRl9KTVAgfHwKLQkgICAgKGNsYXNzID09IEJQRl9BTFUgJmFtcDsmYW1wOyBvcCA9PSBCUEZfRU5EICZhbXA7JmFtcDsgaW5zbi0mZ3Q7aW1tID09IDY0KSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX0FMVSB8fCBjbGFzcyA9PSBCUEZfSk1QMzIpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChjbGFzcyA9PSBCUEZfTERYKSB7Ci0JCWlmICh0ICE9IFNSQ19PUCkKLQkJCXJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFcgfHwgQlBGX01PREUoY29kZSkgPT0gQlBGX01FTVNYOwotCQkvKiBMRFggc291cmNlIG11c3QgYmUgcHRyLiAqLwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX1NUWCkgewotCQkvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlCi0JCSAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpcwotCQkgKiBhc2tpbmcgYWJvdXQgaXQuCi0JCSAqLwotCQlpZiAodCA9PSBTUkNfT1AgJmFtcDsmYW1wOyByZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFKQotCQkJcmV0dXJuIHRydWU7Ci0JCXJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7Ci0JfQotCi0JaWYgKGNsYXNzID09IEJQRl9MRCkgewotCQl1OCBtb2RlID0gQlBGX01PREUoY29kZSk7Ci0KLQkJLyogTERfSU1NNjQgKi8KLQkJaWYgKG1vZGUgPT0gQlBGX0lNTSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qIEJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqLwotCQlpZiAodCAhPSBTUkNfT1ApCi0JCQlyZXR1cm4gIGZhbHNlOwotCi0JCS8qIEltcGxpY2l0IGN0eCBwdHIuICovCi0JCWlmIChyZWdubyA9PSBCUEZfUkVHXzYpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQkvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqLwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoY2xhc3MgPT0gQlBGX1NUKQotCQkvKiBUaGUgb25seSBzb3VyY2UgcmVnaXN0ZXIgZm9yIEJQRl9TVCBpcyBhIHB0ci4gKi8KLQkJcmV0dXJuIHRydWU7Ci0KLQkvKiBDb25zZXJ2YXRpdmVseSByZXR1cm4gdHJ1ZSBhdCBkZWZhdWx0LiAqLwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKLXsKLQlzMzIgZGVmX2lkeCA9IHJlZy0mZ3Q7c3VicmVnX2RlZjsKLQotCWlmIChkZWZfaWR4ID09IERFRl9OT1RfU1VCUkVHKQotCQlyZXR1cm47Ci0KLQllbnYtJmd0O2luc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTsKLQkvKiBUaGUgZHN0IHdpbGwgYmUgemVybyBleHRlbmRlZCwgc28gd29uJiMzOTt0IGJlIHN1Yi1yZWdpc3RlciBhbnltb3JlLiAqLwotCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwotfQotCiBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLAogCQkJICAgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpCiB7Ci0Jc3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2kgJiM0MzsgZW52LSZndDtpbnNuX2lkeDsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWJvb2wgcnc2NDsKIAogCW1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTsKIAogCXJlZyA9ICZhbXA7cmVnc1tyZWdub107Ci0Jcnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTsKIAlpZiAodCA9PSBTUkNfT1ApIHsKIAkJLyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovCiAJCWlmIChyZWctJmd0O3R5cGUgPT0gTk9UX0lOSVQpIHsKQEAgLTMxNTYsOSAmIzQzOzMwNDUsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQlpZiAocmVnbm8gPT0gQlBGX1JFR19GUCkKIAkJCXJldHVybiAwOwogCi0JCWlmIChydzY0KQotCQkJbWFya19pbnNuX3pleHQoZW52LCByZWcpOwotCiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgcmVnaXN0ZXIgdXNlZCBhcyBkZXN0IG9wZXJhbmQgY2FuIGJlIHdyaXR0ZW4gdG8gKi8KQEAgLTMxNjYsNyAmIzQzOzMwNTIsNiBAQCBzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcgogCQkJdmVyYm9zZShlbnYsICYjMzQ7ZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9Ci0JCXJlZy0mZ3Q7c3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi0mZ3Q7aW5zbl9pZHggJiM0MzsgMTsKIAkJaWYgKHQgPT0gRFNUX09QKQogCQkJbWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJlZ25vKTsKIAl9CkBAIC0zODIyLDExICYjNDM7MzcwNyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQkJaWYgKHNpemUgJmx0Oz0gc3BpbGxfc2l6ZSAmYW1wOyZhbXA7CiAJCQkgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkgewotCQkJCS8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGUKLQkJCQkgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LgotCQkJCSAqLwotCQkJCXMzMiBzdWJyZWdfZGVmID0gc3RhdGUtJmd0O3JlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmOwotCiAJCQkJaWYgKGVudi0mZ3Q7YnBmX2NhcGFibGUgJmFtcDsmYW1wOyBzaXplID09IDQgJmFtcDsmYW1wOyBzcGlsbF9zaXplID09IDQgJmFtcDsmYW1wOwogCQkJCSAgICBnZXRfcmVnX3dpZHRoKHJlZykgJmx0Oz0gMzIpCiAJCQkJCS8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uCkBAIC0zODM0LDcgJiM0MzszNzE0LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCQkgKi8KIAkJCQkJYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTsKIAkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dID0gKnJlZzsKLQkJCQlzdGF0ZS0mZ3Q7cmVnc1tkc3RfcmVnbm9dLnN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmOwogCiAJCQkJLyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIGZpbGwuCiAJCQkJICogY29lcmNlX3JlZ190b19zaXplIHdpbGwgYWRqdXN0IHRoZSBib3VuZGFyaWVzLgpAQCAtNjI3MSwxMiAmIzQzOzYxNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYgogCQkJfSBlbHNlIHsKIAkJCQltYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywKIAkJCQkJCSAgICB2YWx1ZV9yZWdubyk7Ci0JCQkJLyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudAotCQkJCSAqIGFjdHVhbCBsb2FkIHNpemUgd2l0aCB0aGUgb25lIGVuY29kZWQgaW4gdGhlCi0JCQkJICogaW5zbi4gV2hlbiB0aGUgZHN0IGlzIFBUUiwgaXQgaXMgZm9yIHN1cmUgbm90Ci0JCQkJICogYSBzdWItcmVnaXN0ZXIuCi0JCQkJICovCi0JCQkJcmVnc1t2YWx1ZV9yZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHOwogCQkJCWlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkgewogCQkJCQlyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjsKIAkJCQkJcmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7CkBAIC03MzgwLDEwICYjNDM7NzI1Myw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0CiAJCQlpZiAoc3BpICZsdDsgMCkKIAkJCQlyZXR1cm4gc3BpOwogCi0JCQkvKgotCQkJICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnCi0JCQkgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLgotCQkJICovCiAJCQltYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7CiAKIAkJCXJlZyA9ICZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHI7CkBAIC05NDYzLDcgJiM0Mzs5MzMyLDYgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkvKiBBbGwgbm9uLXZvaWQgZ2xvYmFsIGZ1bmN0aW9ucyByZXR1cm4gYSA2NC1iaXQgU0NBTEFSX1ZBTFVFLiAqLwogCQlpZiAoIXN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZykpIHsKIAkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIEJQRl9SRUdfMCk7Ci0JCQljYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDgyLDkgJiM0MzsxMDM1MCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJfQogCWludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpOwogCi0JLyogaGVscGVyIGNhbGwgcmV0dXJucyA2NC1iaXQgdmFsdWUuICovCi0JcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKLQogCS8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovCiAJcmV0X3R5cGUgPSBmbi0mZ3Q7cmV0X3R5cGU7CiAJcmV0X2ZsYWcgPSB0eXBlX2ZsYWcocmV0X3R5cGUpOwpAQCAtMTA3MjIsMzAgJiM0MzsxMDU4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoKSBpcyB1c2VkIHdoZW4gdGhlIHJlZyBzaXplIGlzIGRldGVybWluZWQgYnkKLSAqIHRoZSBCVEYgZnVuY19wcm90byYjMzk7cyByZXR1cm4gdmFsdWUgc2l6ZSBhbmQgYXJndW1lbnQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywKLQkJCQkgICAgIHUzMiByZWdubywgc2l6ZV90IHJlZ19zaXplKQotewotCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSAmYW1wO3JlZ3NbcmVnbm9dOwotCi0JaWYgKHJlZ25vID09IEJQRl9SRUdfMCkgewotCQkvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KLQkJcmVnLSZndDtzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgPwotCQkJREVGX05PVF9TVUJSRUcgOiBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7Ci0JfSBlbHNlIGlmIChyZWdfc2l6ZSA9PSBzaXplb2YodTY0KSkgewotCQkvKiBGdW5jdGlvbiBhcmd1bWVudCAqLwotCQltYXJrX2luc25femV4dChlbnYsIHJlZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubywKLQkJCQkgICBzaXplX3QgcmVnX3NpemUpCi17Ci0JcmV0dXJuIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIGN1cl9yZWdzKGVudiksIHJlZ25vLCByZWdfc2l6ZSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewogCXJldHVybiBtZXRhLSZndDtrZnVuY19mbGFncyAmYW1wOyBLRl9BQ1FVSVJFOwpAQCAtMTI5NzQsNyAmIzQzOzEyODE1LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4OwogCWludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7Ci0JY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnczsKIAl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwogCXN0cnVjdCBidGYgKmRlc2NfYnRmOwogCWludCBpZDsKQEAgLTEzMDE4LDcgJiM0MzsxMjg1OCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQl2ZXJib3NlKGVudiwgJiMzNDtmYWlsZWQgdG8gbWFyayBzMzIgcmFuZ2UgZm9yIHJldHZhbCBpbiBmb3JrZWQgc3RhdGUgZm9yIGxvY2tcbiYjMzQ7KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJX19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7CiAJfSBlbHNlIGlmICghaW5zbi0mZ3Q7b2ZmICZhbXA7JmFtcDsgaW5zbi0mZ3Q7aW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9fX2JwZl90cmFwXSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cbiYjMzQ7KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzE2OCw3ICYjNDM7MTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQl1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgJmFtcDtyZWdzW3JlZ25vXSk7Ci0JCXJlZ3NbcmVnbm9dLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRzsKIAl9CiAJaW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7CiAKQEAgLTEzMTkwLDcgJiM0MzsxMzAyOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7Ci0JCW1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHQtJmd0O3NpemUpOwogCX0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7CiAJCXB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtJmd0O3R5cGUsICZhbXA7cHRyX3R5cGVfaWQpOwogCQllcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgJmFtcDttZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTsKQEAgLTEzMjgxLDcgJiM0MzsxMzExOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovCiAJCQlyZWdzW0JQRl9SRUdfMF0uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAJCX0KLQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpOwogCQlpZiAoaXNfa2Z1bmNfYWNxdWlyZSgmYW1wO21ldGEpKSB7CiAJCQlpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApOwogCQkJaWYgKGlkICZsdDsgMCkKQEAgLTEzMzE4LDE4ICYjNDM7MTMxNTQsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJY2FsbGVyX2luZm8tJmd0O3N0YWNrX2FyZ19jbnQgPSBzdGFja19hcmdfY250OwogCX0KIAotCWFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLmZ1bmNfcHJvdG8gJiM0MzsgMSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgbmFyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiByZWdubyA9IGkgJiM0MzsgMTsKLQotCQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7Ci0JCWlmIChidGZfdHlwZV9pc19wdHIodCkpCi0JCQltYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTsKLQkJZWxzZQotCQkJLyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqLwotCQkJbWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LSZndDtzaXplKTsKLQl9Ci0KIAlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpKSB7CiAJCWVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgJmFtcDttZXRhKTsKIAkJaWYgKGVycikKQEAgLTE0ODIzLDE0ICYjNDM7MTQ2NDcsMTQgQEAgc3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQlpZiAoZHN0X3JlZy0mZ3Q7dHlwZSAhPSBQVFJfVE9fQVJFTkEpCiAJCQkqZHN0X3JlZyA9ICpzcmNfcmVnOwogCi0JCWRzdF9yZWctJmd0O3N1YnJlZ19kZWYgPSBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7Ci0KLQkJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfQUxVNjQpCiYjNDM7CQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9BTFU2NCkgewogCQkJLyoKIAkJCSAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LgogCQkJICogNjQtYml0IG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gMzIuCiAJCQkgKi8KIAkJCWF1eC0mZ3Q7bmVlZHNfemV4dCA9IHRydWU7CiYjNDM7CQkJYXV4LSZndDt6ZXh0X2RzdCA9IHRydWU7CiYjNDM7CQl9CiAKIAkJLyogQW55IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvbiBhcmVuYSBwb2ludGVycyAqLwogCQlyZXR1cm4gMDsKQEAgLTE0OTY5LDYgJiM0MzsxNDc5Myw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIC8qIGNoZWNrIHZhbGlkaXR5IG9mIDMyLWJpdCBhbmQgNjQtYml0IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAqLwogc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogewomIzQzOwlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCA9IGN1cl9hdXgoZW52KTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7CiAJdTggb3Bjb2RlID0gQlBGX09QKGluc24tJmd0O2NvZGUpOwogCWludCBlcnI7CkBAIC0xNTAyNiwxOCAmIzQzOzE0ODUxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQlpZiAoaW5zbi0mZ3Q7aW1tKSB7CiAJCQkJCS8qIG9mZiA9PSBCUEZfQUREUl9TUEFDRV9DQVNUICovCiAJCQkJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLSZndDtkc3RfcmVnKTsKLQkJCQkJaWYgKGluc24tJmd0O2ltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqLwomIzQzOwkJCQkJaWYgKGluc24tJmd0O2ltbSA9PSAxKSAvKiBjYXN0IGZyb20gYXMoMSkgdG8gYXMoMCkgKi8KIAkJCQkJCWRzdF9yZWctJmd0O3R5cGUgPSBQVFJfVE9fQVJFTkE7Ci0JCQkJCQkvKiBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovCi0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwotCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChpbnNuLSZndDtvZmYgPT0gMCkgewogCQkJCQkvKiBjYXNlOiBSMSA9IFIyCiAJCQkJCSAqIGNvcHkgcmVnaXN0ZXIgc3RhdGUgdG8gZGVzdCByZWcKIAkJCQkJICovCiAJCQkJCWFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHNyY19yZWcpOwogCQkJCQkqZHN0X3JlZyA9ICpzcmNfcmVnOwotCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogY2FzZTogUjEgPSAoczgsIHMxNiBzMzIpUjIgKi8KIAkJCQkJaWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLSZndDtzcmNfcmVnKSkgewpAQCAtMTUwNTUsNyAmIzQzOzE0ODc2LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQkJaWYgKCFub19zZXh0KQogCQkJCQkJCWNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTsKIAkJCQkJCWNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLSZndDtvZmYgJmd0OyZndDsgMyk7Ci0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi0mZ3Q7ZHN0X3JlZyk7CiAJCQkJCX0KQEAgLTE1MDgwLDcgJiM0MzsxNDkwMCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJCQkJCSAqLwogCQkJCQkJaWYgKCFpc19zcmNfcmVnX3UzMikKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7Ci0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCQkJCQl9IGVsc2UgewogCQkJCQkJLyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqLwogCQkJCQkJYm9vbCBub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgJmx0OyAoMVVMTCAmbHQ7Jmx0OyAoaW5zbi0mZ3Q7b2ZmIC0gMSkpOwpAQCAtMTUwOTAsNyAmIzQzOzE0OTA5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogCQkJCQkJKmRzdF9yZWcgPSAqc3JjX3JlZzsKIAkJCQkJCWlmICghbm9fc2V4dCkKIAkJCQkJCQljbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7Ci0JCQkJCQlkc3RfcmVnLSZndDtzdWJyZWdfZGVmID0gZW52LSZndDtpbnNuX2lkeCAmIzQzOyAxOwogCQkJCQkJY29lcmNlX3N1YnJlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tJmd0O29mZiAmZ3Q7Jmd0OyAzKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CkBAIC0xNTk1OSwxMiAmIzQzOzE1Nzc3LDggQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3MKIAkJCWNvbnRpbnVlOwogCQlpZiAoKCEocmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSAmYW1wOyZhbXA7ICEoa25vd25fcmVnLSZndDtpZCAmYW1wOyBCUEZfQUREX0NPTlNUKSkgfHwKIAkJICAgIHJlZy0mZ3Q7ZGVsdGEgPT0ga25vd25fcmVnLSZndDtkZWx0YSkgewotCQkJczMyIHNhdmVkX3N1YnJlZ19kZWYgPSByZWctJmd0O3N1YnJlZ19kZWY7Ci0KIAkJCSpyZWcgPSAqa25vd25fcmVnOwotCQkJcmVnLSZndDtzdWJyZWdfZGVmID0gc2F2ZWRfc3VicmVnX2RlZjsKIAkJfSBlbHNlIHsKLQkJCXMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLSZndDtzdWJyZWdfZGVmOwogCQkJczMyIHNhdmVkX29mZiA9IHJlZy0mZ3Q7ZGVsdGE7CiAJCQl1MzIgc2F2ZWRfaWQgPSByZWctJmd0O2lkOwogCkBAIC0xNTk3NCwxMiAmIzQzOzE1Nzg4LDExIEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zCiAJCQkvKiByZWcgPSBrbm93bl9yZWc7IHJlZyAmIzQzOz0gZGVsdGEgKi8KIAkJCSpyZWcgPSAqa25vd25fcmVnOwogCQkJLyoKLQkJCSAqIE11c3QgcHJlc2VydmUgb2ZmLCBpZCBhbmQgc3VicmVnX2RlZiBmbGFnLAotCQkJICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LgomIzQzOwkJCSAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpCiYjNDM7CQkJICogd2lsbCBiZSBpbmNvcnJlY3QuCiAJCQkgKi8KIAkJCXJlZy0mZ3Q7ZGVsdGEgPSBzYXZlZF9vZmY7CiAJCQlyZWctJmd0O2lkID0gc2F2ZWRfaWQ7Ci0JCQlyZWctJmd0O3N1YnJlZ19kZWYgPSBzYXZlZF9zdWJyZWdfZGVmOwogCiAJCQlzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsICZhbXA7ZmFrZV9yZWcpOwogCQkJc2NhbGFyX21pbl9tYXhfYWRkKHJlZywgJmFtcDtmYWtlX3JlZyk7CkBAIC0xNjQxNCw4ICYjNDM7MTYyMjcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJICogQWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZS4KIAkgKi8KIAltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTsKLQkvKiBsZF9hYnMgbG9hZCB1cCB0byAzMi1iaXQgc2tiIGRhdGEuICovCi0JcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBlbnYtJmd0O2luc25faWR4ICYjNDM7IDE7CiAJLyoKIAkgKiBTZWUgYnBmX2dlbl9sZF9hYnMoKSB3aGljaCBlbWl0cyBhIGhpZGRlbiBCUEZfRVhJVCB3aXRoIHIwPTAKIAkgKiB3aGljaCBtdXN0IGJlIGV4cGxvcmVkIGJ5IHRoZSB2ZXJpZmllciB3aGVuIGluIGEgc3VicHJvZy4KQEAgLTE2NzMwLDcgJiM0MzsxNjU0MSw2IEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLAogCWludCBpOwogCiAJaWYgKGJwZl9oZWxwZXJfY2FsbChjYWxsKSkgewotCiAJCWlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtJmd0O2ltbSwgJmFtcDtmbikgJmx0OyAwKQogCQkJLyogZXJyb3Igd291bGQgYmUgcmVwb3J0ZWQgbGF0ZXIgKi8KIAkJCXJldHVybiBmYWxzZTsKQEAgLTE3NDc1LDYgJiM0MzsxNzI4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWVudi0mZ3Q7cHJldl9sb2dfcG9zID0gZW52LSZndDtsb2cuZW5kX3BvczsKIAkJCXZlcmJvc2UoZW52LCAmIzM0OyVkOiAmIzM0OywgZW52LSZndDtpbnNuX2lkeCk7CiAJCQlicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQllbnYtJmd0O3ByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtJmd0O2xvZy5lbmRfcG9zIC0gZW52LSZndDtwcmV2X2xvZ19wb3M7CiAJCQllbnYtJmd0O3ByZXZfbG9nX3BvcyA9IGVudi0mZ3Q7bG9nLmVuZF9wb3M7CiAJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYwppbmRleCA1ZTdjYjhiMzZmZWYyLi41NTc5MTczYTYxZTNiIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jCkBAIC0xMDcsMTQgJiM0MzsxMDcsNyBAQCBwcmludF9pbnNuX2Zvcl9ncmFwaCh2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCiAJcCA9IGJ1ZjsKIAl3aGlsZSAoKnAgIT0gJiMzOTtcMCYjMzk7KSB7Ci0JCWlmICgqcCA9PSAmIzM5O1xuJiMzOTspIHsKLQkJCW1lbW1vdmUocCAmIzQzOyAzLCBwLCBzdHJsZW4oYnVmKSAmIzQzOyAxIC0gKHAgLSBidWYpKTsKLQkJCS8qIEFsaWduIGVhY2ggaW5zdHJ1Y3Rpb24gZHVtcCByb3cgbGVmdC4gKi8KLQkJCSpwJiM0MzsmIzQzOyA9ICYjMzk7XFwmIzM5OzsKLQkJCSpwJiM0MzsmIzQzOyA9ICYjMzk7bCYjMzk7OwotCQkJLyogT3V0cHV0IG11bHRpbGluZSBjb25jYXRlbmF0aW9uLiAqLwotCQkJKnAmIzQzOyYjNDM7ID0gJiMzOTtcXCYjMzk7OwotCQl9IGVsc2UgaWYgKCpwID09ICYjMzk7Jmx0OyYjMzk7IHx8ICpwID09ICYjMzk7Jmd0OyYjMzk7IHx8ICpwID09ICYjMzk7fCYjMzk7IHx8ICpwID09ICYjMzk7JmFtcDsmIzM5OykgewomIzQzOwkJaWYgKCpwID09ICYjMzk7Jmx0OyYjMzk7IHx8ICpwID09ICYjMzk7Jmd0OyYjMzk7IHx8ICpwID09ICYjMzk7fCYjMzk7IHx8ICpwID09ICYjMzk7JmFtcDsmIzM5OykgewogCQkJbWVtbW92ZShwICYjNDM7IDEsIHAsIHN0cmxlbihidWYpICYjNDM7IDEgLSAocCAtIGJ1ZikpOwogCQkJLyogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyLiAqLwogCQkJKnAmIzQzOyYjNDM7ID0gJiMzOTtcXCYjMzk7OwpAQCAtMTI5LDE2ICYjNDM7MTIyLDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiBzdGF0aWMgdm9pZCBfX3ByaW50ZigyLCAzKQogcHJpbnRfaW5zbl9qc29uKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JdW5zaWduZWQgaW50IGwgPSBzdHJsZW4oZm10KTsKLQljaGFyIGNob21wZWRfZm10W2xdOwogCXZhX2xpc3QgYXJnczsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JaWYgKGwgJmd0OyAwKSB7Ci0JCXN0cm5jcHkoY2hvbXBlZF9mbXQsIGZtdCwgbCAtIDEpOwotCQljaG9tcGVkX2ZtdFtsIC0gMV0gPSAmIzM5O1wwJiMzOTs7Ci0JfQotCWpzb253X3ZwcmludGZfZW5xdW90ZShqc29uX3d0ciwgY2hvbXBlZF9mbXQsIGFyZ3MpOwomIzQzOwlqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogfQogCkBAIC0zNTEsNiAmIzQzOzMzOCw3IEBAIHZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKIAogCQlwcmludGYoJiMzNDslNHU6ICYjMzQ7LCBpKTsKIAkJcHJpbnRfYnBmX2luc24oJmFtcDtjYnMsIGluc24gJiM0MzsgaSwgdHJ1ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcbiYjMzQ7KTsKIAogCQlpZiAob3Bjb2RlcykgewogCQkJcHJpbnRmKCYjMzQ7ICAgICAgICYjMzQ7KTsKQEAgLTQxNyw2ICYjNDM7NDA1LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9mb3JfZ3JhcGgoc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1Zl9zdGFydCwgdm9pZCAqYnVmX2VuZCwKIAogCQlwcmludGYoJiMzNDsldTogJiMzNDssIGluc25fb2ZmKTsKIAkJcHJpbnRfYnBmX2luc24oJmFtcDtjYnMsIGN1ciwgdHJ1ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcXGxcXFxuJiMzNDspOwogCiAJCWlmIChvcGNvZGVzKSB7CiAJCQlwcmludGYoJiMzNDtcXCBcXCBcXCBcXCAmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jCmluZGV4IGY1MjlmMWM4YzE3MWQuLjMwMjIxMzUyNTY4ZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jCkBAIC01NSwxMCAmIzQzOzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeikKIAkgKiBmb3IgZWFjaCBpbnN0cnVjdGlvbiAoRkYgc3RhbmRzIGZvciBpbnN0cnVjdGlvbiBgY29kZWAgYnl0ZSkuCiAJICogUmVtb3ZlIHRoZSBwcmVmaXggaW5wbGFjZSwgYW5kIGFsc28gc2ltcGxpZnkgY2FsbCBpbnN0cnVjdGlvbnMuCiAJICogRS5nLjogJiMzNDsoODUpIGNhbGwgZm9vIzEwJiMzNDsgLSZndDsgJiMzNDtjYWxsIGZvbyYjMzQ7LgotCSAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICYjMzk7bWF4KHN0cmxlbihidWYpIC0gMSwgMCkmIzM5OyB0aGluZykuCiAJICovCiAJcGZ4X2VuZCA9IGJ1ZiAmIzQzOyA1OwotCXNmeF9zdGFydCA9IGJ1ZiAmIzQzOyBtYXgoKGludClzdHJsZW4oYnVmKSAtIDEsIDApOwomIzQzOwlzZnhfc3RhcnQgPSBidWYgJiM0MzsgKGludClzdHJsZW4oYnVmKTsKIAlpZiAoc3RybmNtcChwZnhfZW5kLCAmIzM0O2NhbGwgJiMzNDssIDUpID09IDAgJmFtcDsmYW1wOyAodG1wID0gc3RycmNocihidWYsICYjMzk7IyYjMzk7KSkpCiAJCXNmeF9zdGFydCA9IHRtcDsKIAlsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKaW5kZXggYmU5N2Y2ODg3ZjBlNy4uZmJhNTYyYzgxOTY5MSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCkBAIC0xMjQsNiAmIzQzOzEyNCw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aXJxLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3pleHQuc2tlbC5oJiMzNDsKIAogI2RlZmluZSBNQVhfRU5UUklFUyAxMQogCkBAIC0yNzcsNiAmIzQzOzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZCkJCQkgICAgICB7IFJVTihpcnEpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbXR1KHZvaWQpCQkgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfaml0X2lubGluZSh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2ppdF9pbmxpbmUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfQogCiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMmRkM2VhNjYxYjc3OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMKQEAgLTAsMCAmIzQzOzEsMzg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9jb3JlX3JlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztleHRlcm4gbG9uZyBicGZfa2Z1bmNfY2FsbF90ZXN0NChzaWduZWQgY2hhciBhLCBzaG9ydCBiLCBpbnQgYywgbG9uZyBkKSBfX2tzeW07CiYjNDM7CiYjNDM7LyogdG8gcmV0YWluIGRlYnVnIGluZm8gZm9yIEJURiBnZW5lcmF0aW9uICovCiYjNDM7dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTsKJiM0MzsJYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKDAsIDAsIDAsIDAsIDApOwomIzQzOwlicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfUk5EX0hJMzIpCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfbG9zdF9hY3Jvc3NfY2hlY2twb2ludCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9rdGltZV9nZXRfbnNdOwkJCQkJCQlcCiYjNDM7CXI4ID0gcjA7CQkJCQkJCQkJXAomIzQzOwlyNiA9IDB4ZGVhZGJlZWZjYWZlYmFiZSBsbDsJLyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2JiMzOTtzIHVwcGVyIGhhbGYgKi8JXAomIzQzOwlpZiByOCAhPSAwIGdvdG8gMWY7CQkvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovCVwKJiM0MzsJcjYgPSAzMjsJCQkvKiBmdWxsIDY0LWJpdCBkZWYgKi8JCQkJXAomIzQzOwlnb3RvIDJmOwkJCQkJCQkJCVwKJiM0MzsxOgl3NiA9IDMyOwkJCS8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovCQlcCiYjNDM7MjoJcjAgPSByNjsJCQkvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFwKJiM0MzsJCQkJCS8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqLwlcCiYjNDM7CXIwICZndDsmZ3Q7PSAzMjsJCQkJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2t0aW1lX2dldF9ucykKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzEgPSB3MHt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXcxID0gdzA7CQkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIG9ubHkgYXMgMzItYml0IC0mZ3Q7IG5vIHpleHQgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX25vdF9tc2coJiMzNDs7IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgbm9femV4dF9hbHUzMl9oaV91bnVzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCS8qIE1PViAqLwkJXAomIzQzOwl3MiA9IHcxOwkJCQkJXAomIzQzOwl3MiAmIzQzOz0gdzE7CQkvKiBBTFUzMiwgQlBGX1ggKi8JXAomIzQzOwl3MiAmIzQzOz0gMTsJCS8qIEFMVTMyLCBCUEZfSyAqLwlcCiYjNDM7CXcyID0gdzI7CQkvKiBrZWVwIHcyIGFsaXZlIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbiAqLyBcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7cjEgPSByMHt7Lip9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBub196ZXh0X21vdjY0KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSAqKHUzMiAqKShyMTAgLTgpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X25hcnJvd19sb2FkX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMDsJCQkJXAomIzQzOwlyMSA9ICoodTMyICopKHIxMCAtIDgpOwkJCQlcCiYjNDM7CXIwID0gcjE7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogMzItYml0IGF0b21pYyBmZXRjaCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtmZXRjaF9hZGQzMl07CQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2luc24oZmV0Y2hfYWRkMzIsCiYjNDM7CQkgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7cjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyAmIzQzO319OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHpleHRfY21weGNoZzMyX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSByMTsJCQkJXAomIzQzOwl3MCA9IDA7CQkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwkuOGJ5dGUgJVtjbXB4Y2hnMzJdOwkJCQlcCiYjNDM7CXIyID0gcjA7CQkJCQlcCiYjNDM7CXIwID0gcjI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9pbnNuKGNtcHhjaGczMiwKJiM0MzsJCSAgICAgQlBGX0FUT01JQ19PUChCUEZfVywgQlBGX0NNUFhDSEcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLSZndDsgemV4dCAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzYgPSAzMnt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXc2ID0gMzI7CQkJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsxOglyMCA9IDA7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcjEmIzM5O3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAmIzM5O3cxID0gMSYjMzk7IG11c3QgTk9UIGJlIG1hcmtlZCBmb3IgemVybyBleHRlbnNpb24uICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7dzEgPSAxe3suKn19OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJcjYgPSByMDsJCQkJCVwKJiM0MzsJcjYgJmx0OyZsdDs9IDMyOwkJCQkJXAomIzQzOwl3MSA9IDE7CQkJCQkJXAomIzQzOwlyMCA9IHI2OwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTERfQUJTIGRlZmluZXMgcjA7IHdoZW4gcjAgaXMgcmVhZCBhcyA2NC1iaXQgaXQgbXVzdCBiZSB6ZXJvIGV4dGVuZGVkICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtyMCA9ICoodTggKilza2JbMF17ey4qfX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgemV4dF9sZF9hYnNfaGlfdXNlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNiA9IHIxOwkJCQkJXAomIzQzOwlyMCA9ICoodTggKilza2JbMF07CQkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJcjAgPSByNzsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O3cyID0gMXt7ICYjNDM7fX07IHpleHQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgaGVscGVyX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSByMTA7CQkJCQlcCiYjNDM7CXIxICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJdzIgPSAxOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl90cmFjZV9wcmludGtdOwkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl90cmFjZV9wcmludGspCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSByMTsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdWJwcm9ncmFtIHBhcmFtZXRlcnMgYXJlIGNvbnNlcnZhdGl2ZWx5IHJlYWQgYXMgNjQtYml0ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJY2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDsJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIGtmdW5jIHBhcmFtZXRlcnMgYXJlIHplcm8gZXh0ZW5kZWQgKi8KJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7dzEgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dzIgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dzMgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7dzQgPSAxe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBrZnVuY19wYXJhbV9yZWFkX3Blcl9idGYodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJdzEgPSAxOwkJCQkJCVwKJiM0MzsJdzIgPSAxOwkJCQkJCVwKJiM0MzsJdzMgPSAxOwkJCQkJCVwKJiM0MzsJdzQgPSAxOwkJCQkJCVwKJiM0MzsJY2FsbCBicGZfa2Z1bmNfY2FsbF90ZXN0NDsJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19ub3RfbXNnKCYjMzQ7OyB6ZXh0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGFsdTMyX2FuZF8zMmJpdF9jb25kaXRpb25hbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwl3MSA9IHcwOwkJCQkJXAomIzQzOwlpZiB3MSAmZ3Q7IDQyIGdvdG8gMWY7CQkvKiBCUEZfSyAqLwlcCiYjNDM7CXcyID0gMjg7CQkJCQlcCiYjNDM7CWlmIHcyICZndDsgdzEgZ290byAxZjsJCS8qIEJQRl9YICovCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsxOglleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDt3MSA9IHcwe3sgJiM0Mzt9fTsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBhbHUzMl9hbmRfNjRiaXRfY29uZGl0aW9uYWwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOwkJCVwKJiM0MzsJdzEgPSB3MDsJCQkJCVwKJiM0MzsJaWYgcjEgJmd0OyA0MiBnb3RvIDFmOwkJLyogQlBGX0sgKi8JXAomIzQzOwlyMiA9IDI4OwkJCQkJXAomIzQzOwlpZiByMiAmZ3Q7IHIxIGdvdG8gMWY7CQkvKiBCUEZfWCAqLwlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7MToJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbm90X21zZygmIzM0OzsgemV4dCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBhbHU2NF9hbmRfY29uZGl0aW9uYWxzKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CWlmIHcxICZndDsgNDIgZ290byAxZjsJCS8qIEJQRl9LICovCVwKJiM0MzsJaWYgcjEgJmd0OyA0MiBnb3RvIDFmOwkJLyogQlBGX0sgKi8JXAomIzQzOwlyMiA9IDI4OwkJCQkJXAomIzQzOwlpZiB3MiAmZ3Q7IHcxIGdvdG8gMWY7CQkvKiBCUEZfWCAqLwlcCiYjNDM7CWlmIHIyICZndDsgcjEgZ290byAxZjsJCS8qIEJQRl9YICovCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsxOglleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUCiYjNDM7CiYjNDM7U0VDKCYjMzQ7P2ZlbnRyeS5zLyYjMzQ7IFNZU19QUkVGSVggJiMzNDtzeXNfZ2V0cGdpZCYjMzQ7KQomIzQzO19fYXJjaF9zMzkweAomIzQzO19feGxhdGVkKCYjMzQ7NzogdzEgPSB3MCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7ODogdzEgPSB3MSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7OTogdzEgJiM0Mzs9IDgmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OzEwOiB3MSA9IHcxJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGFyZW5hX3B0cih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMSA9ICVbYXJlbmFdIGxsOwkJCQlcCiYjNDM7CXIyID0gMDsJCQkJCQlcCiYjNDM7CXIzID0gMTsJCQkJCQlcCiYjNDM7CXI0ID0gMDsJCQkJCQlcCiYjNDM7CXI1ID0gMDsJCQkJCQlcCiYjNDM7CWNhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdOwkJCVwKJiM0MzsJcjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpOwkvKiBuZWVkcyB6ZXh0ICovXAomIzQzOwlyMSAmIzQzOz0gODsJCQkvKiBuZWVkcyB6ZXh0ICovXAomIzQzOwkqKHU2NCAqKShyMSAmIzQzOzApID0gNDI7CQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9hcmVuYV9hbGxvY19wYWdlcyksCiYjNDM7CSAgX19pbW1fYWRkcihhcmVuYSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyogQ2hlY2sgaWYgcHJvYmUgbWVtIGxvYWRzIGtlZXAgdGhlaXIgemVybyBleHRlbnNpb24uICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19hcmNoX3MzOTB4CiYjNDM7X194bGF0ZWQoJiMzNDszOiByMSA9ICoodTY0ICopKHIwICYjNDM7MCkmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OzQ6IHIyID0gKih1MzIgKikocjAgJiM0MzswKSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7NTogdzIgPSB3MiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7NjogcjMgPSAqKHUxNiAqKShyMCAmIzQzOzApJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDs3OiB3MyA9IHczJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDs4OiByNCA9ICoodTggKikocjAgJiM0MzswKSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7OTogdzQgPSB3NCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwcm9iZV9tZW0odm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAwOwkJCQkJCVwKJiM0MzsJcjIgPSAwOwkJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9yZG9ubHlfY2FzdF07CQkJXAomIzQzOwlyMSA9ICoodTY0ICopKHIwICYjNDM7IDApOwkvKiBCUEZfUFJPQkVfTUVNICovCVwKJiM0MzsJcjIgPSAqKHUzMiAqKShyMCAmIzQzOyAwKTsJLyogQlBGX1BST0JFX01FTSAqLwlcCiYjNDM7CXIzID0gKih1MTYgKikocjAgJiM0MzsgMCk7CS8qIEJQRl9QUk9CRV9NRU0gKi8JXAomIzQzOwlyNCA9ICoodTggKikocjAgJiM0MzsgMCk7CS8qIEJQRl9QUk9CRV9NRU0gKi8JXAomIzQzOwlyMCA9IHIxOwkJLyogbWFrZSB0aGUgcmVnaXN0ZXJzIHVzZWQgKi8gXAomIzQzOwlyMCAmIzQzOz0gcjI7CQkJCQlcCiYjNDM7CXIwICYjNDM7PSByMzsJCQkJCVwKJiM0MzsJcjAgJiM0Mzs9IHI0OwkJCQkJXAomIzQzOzE6CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfcmRvbmx5X2Nhc3QpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5ODgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBzZXJpZXMgdGhhdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYW5kIHRyYWNrcyAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucywgb3IgYHpleHRgLiBUaGV5JiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHN0b3JpbmcgYHN1YnJlZ19kZWZgIHdpdGhpbiB0aGUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdC4gSW5zdGVhZCwgdGhleSYjMzk7cmUgY2FsY3VsYXRpbmcgYHpleHRfZHN0YCBkeW5hbWljYWxseSB1c2luZyBsaXZlbmVzcyBhbmFseXNpcyB0aHJvdWdoIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3Vic3RhbnRpYWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UuIEkgY2FuIHNlZSB0aGlzIGltcGFjdGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSB2ZXJpZmllZCwgYW5kIHN1YnNlcXVlbnRseSwgaG93IHRoZXkmIzM5O3JlIEpJVGVkLCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG9uJiMzOTt0IGF1dG9tYXRpY2FsbHkgemVyby1leHRlbmQgdG8gNjQtYml0OyBhcmNoaXRlY3R1cmVzIGxpa2UgczM5MHguCgpJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuIEkgc2VlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIHRoZXkmIzM5O3ZlIG1vdmVkIGFuZCBtb2RpZmllZCBgYnBmX2lzX3JlZzY0YC4gQ3J1Y2lhbGx5LCBib3RoIGBjb21wdXRlX2luc25fbGl2ZV9yZWdzYCBhbmQgYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCB3aXRoaW4gYGtlcm5lbC9icGYvbGl2ZW5lc3MuY2AgaGF2ZSBiZWVuIG1vZGlmaWVkLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgYXNwZWN0LiAgVGhleSYjMzk7dmUgYWxzbyB0b3VjaGVkIGBjaGVja19hbHVfb3BgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19tZW1fYWNjZXNzYCwgYW5kIGBzeW5jX2xpbmtlZF9yZWdzYCB3aXRoaW4gdGhlIHZlcmlmaWVyIGl0c2VsZiAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApLiBUaGlzIGNoYW5nZSBsaXN0IGdpdmVzIG1lIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhpcyBpcyBxdWl0ZSBhIGNvbXBsZXggY2hhbmdlIHRoYXQgaXMgbGlrZWx5IHRvIGJlIGV4cG9zZWQgdG8gZnV6aW5nIGF0dGFja3MuCgpUaGlzIGhhcyBmdXp6aW5nIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIEdpdmVuIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZXMgdG8gdGhlIGNvcmUgdmVyaWZpZXIgbG9naWMsIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gVGhlIGZ1bmN0aW9ucyBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbiBmdXp6aW5nIGFyZSBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgLCBgY29tcHV0ZV9pbnNuX2xpdmVfcmVnc2AsIGFuZCBgYnBmX2luc25fZGVmMzJgLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGJwZl9pc19yZWc2NGAuIEFoLCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3Mgc3RhdGljIG5vdyB3aXRoaW4gYGZpeHVwcy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gYGJwZl9pbnNuX2RlZjMyYCBpcyAqbm90KiBzdGF0aWMsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gRnJvbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllcjsgdGhhdCYjMzk7cyBgYnBmX2NoZWNrYC4gYGJwZl9pbnNuX2RlZjMyYCBhbmQgYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCBhcmUgZGVmaW5pdGVseSBteSBmb2N1cy4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIGNvcnJlY3QuIEkgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRpbWUgdG8gdXNlIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZ2V0IHRoZSBmdW5jdGlvbiBuYW1lcyBleGFjdGx5IHJpZ2h0LiBUaGlzIHdpbGwgYmUgYW4gZXh0ZW5zaXZlIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sKVxccyYjNDM7YnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNTY4PWJvb2wgYnBmX3N0YWNrX3Nsb3RfYWxpdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZyYW1lbm8sIHUzMiBzcGkpO1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNTY5OmludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTU3MC1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA2Nj1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIyMjgtICovXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjIyOTppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMjMwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgYnBmX2luc25fZGVmMzJgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYnBmX2luc25fZGVmMzJgLiBXZSYjMzk7dmUgY292ZXJlZCBhIGxvdCBvZiBncm91bmQgYWxyZWFkeSwgYW5kIEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBkcmlsbCBkb3duIG9uIHRoZSBzcGVjaWZpY3MuIEkmIzM5O20gc3RhcnRpbmcgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBwcm9wZXIgdW5kZXJzdGFuZGluZyBkZW1hbmRzIGEgZGVlcCBkaXZlIGludG8gdGhlc2UgaW5kaXZpZHVhbCBjb21wb25lbnRzLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgdGhpcyBpcyBtb3N0IGxpa2VseSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBhIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb24uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBkZWZpbmluZyBob3cgdGhlIGluc3RydWN0aW9uIGlzIGVuY29kZWQgb3IgZGVjb2RlZCwgcGVyaGFwcyBhbG9uZ3NpZGUgb3RoZXIgc3RydWN0dXJlcyBmb3IgZGlmZmVyZW50IGluc3RydWN0aW9uIGxlbmd0aHMuIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSBmaWVsZHMgd2l0aGluIGFuZCBob3cgdGhleSBtYXAgdG8gdGhlIG9wY29kZXMsIHNvdXJjZS9kZXN0aW5hdGlvbiByZWdpc3RlcnMsIGFuZCBpbW1lZGlhdGUgdmFsdWVzIHdlJiMzOTtyZSBmYW1pbGlhciB3aXRoIGluIEJQRi4gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIG9yIHBlcmhhcHMgdW5pb25zIGludm9sdmVkIGluIGRlZmluaW5nIHRoZSBpbnN0cnVjdGlvbiYjMzk7cyBjb25zdGl0dWVudCBwYXJ0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoaXMgd2lsbCB1bmxvY2sgaG93IHRoZSBwcm9ncmFtIGFjdHVhbGx5ICpkb2VzKiB0aGUgam9iLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludFxccyYjNDM7YnBmX2luc25fZGVmMzImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjUxPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NTI6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NTMtXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz01Mj1zdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtOTMtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjk0OmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBhIHByZXR0eSBmdW5kYW1lbnRhbCBhcmVhOiB0aGUgQlBGIHZlcmlmaWVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcywgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyAoemV4dHMpLiBUaGF0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoZSB2ZXJpZmllciBlbnN1cmVzIEJQRiBwcm9ncmFtcyBhcmUgc2FmZSBhbmQgYWxzbyBob3cgdGhleSBnZXQgdHJhbnNsYXRlZCBpbnRvIG9wdGltaXplZCBtYWNoaW5lIGNvZGUgYnkgdGhlIEpJVC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgcHJpbWUgZnV6emluZyBtYXRlcmlhbC4gQW55IGNoYW5nZSB0aGF0IHRvdWNoZXMgdGhlIHZlcmlmaWVyJiMzOTtzIGNvcmUgbG9naWMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSBjYW4gYXQgdGhpcyB0byBleHBvc2UgYW55IHN1YnRsZSBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AgZnVuY3Rpb24sIGFzIHRoYXTigJlzIHRoZSBoZWFydCBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuIFRoZSBgYnBmX2luc25fZGVmMzJgIGZ1bmN0aW9uIHdpbGwgYmUgYW5vdGhlciBrZXkgc3ltYm9sIHRvIHJldmlldywgc2luY2UgdGhpcyBpcyBjbGVhcmx5IGNvbm5lY3RlZCB3aXRoIGhvdyB0aGUgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIHRyYWNrZWQuCgpJIHNlZSBpdCB0b3VjaGVzIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZyBvcHRpb24sIHdoaWNoIG1lYW5zIHdlIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IG91ciBidWlsZCBjb25maWd1cmF0aW9ucyB0byB0ZXN0IHRoaXMgZWZmZWN0aXZlbHkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgZXhhbWluZSB0aGUgZGVwZW5kZW5jeSBsYW5kc2NhcGUgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjY1CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipDb25zaWRlcmluZyB0aGUgRUJQRiBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgaW50ZWdyYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCBzZWVtcyBsaWtlIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggaGVyZSB3b3VsZCBiZSB0byBsZXZlcmFnZSBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBnby10byBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBzeXN0ZW0gY2FsbCBpbnRlcmNlcHRpb24uIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzIHdpdGggb3RoZXIgYXBwcm9hY2hlcyBpZiB0aGlzIGZpdHMgdGhlIGJpbGwuIE5vdywgdGhpbmtpbmcgcHJhY3RpY2FsbHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZSwgd291bGQgYmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdoYXRldmVyIGlzIGNvbGxlY3RlZCBnZXRzIHJldHVybmVkIGNvcnJlY3RseSwgc28gdGhhdCBgc2V0LXJlc3VsdHNgIGlzIHRoZSBuZXh0IG1ham9yIG1ldGhvZCB0aGF0IGlzIHVzZWQuIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgZGF0YSBjb2xsZWN0aW9uIGFuZCBwcm9jZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZlcmlmaWNhdGlvbiBieXBhc3NlcyBvciBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzJiMzNDssCiAgICAmIzM0O2JwZl9pbnNuX2RlZjMyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcyB0byB0cmFjayAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyBkeW5hbWljYWxseSwgcmVtb3ZpbmcgdGhlIGBzdWJyZWdfZGVmYCBmaWVsZCBmcm9tIGBicGZfcmVnX3N0YXRlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzIG9yIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MToyOS43ODQzMTUxNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgxODE0MjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzXCIsXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsaXZlbmVzcyBhbmFseXNpcyBhbmQgaW5zdHJ1Y3Rpb24gZml4dXBzIHRvIHRyYWNrIDMyLWJpdCBzdWJyZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgemVyby1leHRlbnNpb25zIGR5bmFtaWNhbGx5LCByZW1vdmluZyB0aGUgYHN1YnJlZ19kZWZgIGZpZWxkIGZyb20gYGJwZl9yZWdfc3RhdGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHZlcmlmaWNhdGlvbiBieXBhc3NlcyBvciBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MToyOS43ODQzMjMwNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MzkwMjMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3N2ZlMjFhZDhlZWY3Njc4ZjhhNWVhYzA3MDQwY2NkOGRkM2I0YmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAwMDo1MToyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDY4MmMyY2QzYjg0NDMuLjM5YjBkYjJhNGYxN2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTYyLDExICsxNjIsNiBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XFxuIFxcdCAqIHBvaW50aW5nIHRvIGJwZl9mdW5jX3N0YXRlLlxcbiBcXHQgKi9cXG4gXFx0dTMyIGZyYW1lbm87XFxuLVxcdC8qIFRyYWNrcyBzdWJyZWcgZGVmaW5pdGlvbi4gVGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgaW5zbl9pZHggb2YgdGhlXFxuLVxcdCAqIHdyaXRpbmcgaW5zbi4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc3VicmVnX2RlZiBpcyB1c2VkIGJlZm9yZSBhbnkgaW5zblxcbi1cXHQgKiBwYXRjaGluZyB3aGljaCBvbmx5IGhhcHBlbnMgYWZ0ZXIgbWFpbiB2ZXJpZmljYXRpb24gZmluaXNoZWQuXFxuLVxcdCAqL1xcbi1cXHRzMzIgc3VicmVnX2RlZjtcXG4gXFx0LyogaWYgKCFwcmVjaXNlIFxcdTAwMjZcXHUwMDI2IFNDQUxBUl9WQUxVRSkgbWluL21heC90bnVtIGRvbid0IGFmZmVjdCBzYWZldHkgKi9cXG4gXFx0Ym9vbCBwcmVjaXNlO1xcbiB9O1xcbkBAIC0xNjMxLDcgKzE2MjYsNiBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcXG4gfTtcXG4gXFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KTtcXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pO1xcbiB2b2lkIGJwZl9tYXJrX3N1YnByb2dfZXhjX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKTtcXG4gYm9vbCBicGZfYWxsb3dfdGFpbF9jYWxsX2luX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbkBAIC0xNjU1LDUgKzE2NDksNiBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9CUEZfVkVSSUZJRVJfSCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IDJlNGFlMGVmMDg2MDkuLjdjNDU5OWU2NWVjZWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic3RhY2s9JXMgYmVmb3JlIFxcXCIsIGVudi1cXHUwMDNldG1wX3N0cl9idWYpO1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlcmUgaXMgYSBoaXN0b3J5IHJlY29yZCB0aGF0IHNvbWUgcmVnaXN0ZXJzIGdhaW5lZCByYW5nZSBhdCB0aGlzIGluc24sXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuaW5kZXggMDM5MWIzYmMwMDczNC4uNTBiM2NhNTE0OWEwYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jXFxuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2VuZF9pbnNuKGJwZl9pbnNuX3ByaW50X3QgdmVyYm9zZSxcXG4gXFx0XFx0XFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbi1cXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSAlcyVkIHIlZFxcXFxuXFxcIixcXG4rXFx0dmVyYm9zZShwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gJXMlZCByJWRcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9UT19CRSA/IFxcXCJiZVxcXCIgOiBcXFwibGVcXFwiLFxcbiBcXHRcXHRpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2Jzd2FwX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLFxcbiBcXHRcXHRcXHQgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuLVxcdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGJzd2FwJWQgciVkXFxcXG5cXFwiLFxcbitcXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFxcXCIsXFxuIFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIH1cXG5AQCAtMTk3LDE5ICsxOTcsMTkgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cHJpbnRfYnBmX2VuZF9pbnNuKHZlcmJvc2UsIGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX05FRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgPSAtJWMlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlYyVkID0gLSVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19hZGRyX3NwYWNlX2Nhc3QoaW5zbikpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhZGRyX3NwYWNlX2Nhc3QociVkLCAldSwgJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnLCAoKHUzMilpbnNuLVxcdTAwM2VpbW0pIFxcdTAwM2VcXHUwMDNlIDE2LCAodTE2KWluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gXFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XVxcbkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICVjJWQgJXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgJWMlZCAlcyAlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGlzX3NkaXZfc21vZChpbnNuKSA/IGJwZl9hbHVfc2lnbl9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDRdXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0pXFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0IChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FERCB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0FORCB8fFxcbiBcXHRcXHRcXHQgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfT1IgfHwgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9YT1IpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbG9jayAqKCVzICopKHIlZCAlK2QpICVzIHIlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBsb2NrICooJXMgKikociVkICUrZCkgJXMgciVkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsXFxuQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcXG4gXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxcbiBcXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfYXRvbWljX2FsdV9zdHJpbmdbQlBGX09QKGluc24tXFx1MDAzZWltbSkgXFx1MDAzZVxcdTAwM2UgNF0sXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gYXRvbWljJXNfY21weGNoZygoJXMgKikociVkICUrZCksIHIwLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuQEAgLTI2Miw0NCArMjYyLDQ0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRykge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9IGF0b21pYyVzX3hjaGcoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0QlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXFxcIjY0XFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHXyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xcbiBcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpICooJXMgKikociVkICUrZCkgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBub3NwZWNcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIG5vc3BlY1xcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHtcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGR4XyUwMnhcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX2xkeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcXFxcblxcXCIsXFxuK1xcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcbiBcXHRcXHRcXHRcXHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdIDpcXG5AQCAtMzA3LDEyICszMDcsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgcjAgPSAqKCVzICopc2tiWyVkXVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gXFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0pO1xcbiBcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuQEAgLTMzMiwxMiArMzMyLDEyIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiBcXHRcXHRcXHRpZiAoaXNfcHRyIFxcdTAwMjZcXHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXFxuIFxcdFxcdFxcdFxcdGltbSA9IDA7XFxuIFxcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4gXFx0XFx0XFx0XFx0X19mdW5jX2ltbV9uYW1lKGNicywgaW5zbiwgaW1tLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXFxuXFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xcbkBAIC0zNDcsMzUgKzM0NywzNSBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0Y2hhciB0bXBbNjRdO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgY2FsbCBwYyVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgcGMlc1xcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIFxcdFxcdFxcdFxcdFxcdF9fZnVuY19nZXRfbmFtZShjYnMsIGluc24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0c3RyY3B5KHRtcCwgXFxcInVua25vd25cXFwiKTtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBjYWxsICVzIyVkXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGNhbGwgJXMjJWRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRfX2Z1bmNfZ2V0X25hbWUoY2JzLCBpbnNuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAsIHNpemVvZih0bXApKSxcXG4gXFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290byBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvIHBjJStkXFxcIixcXG4gXFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pBIHwgQlBGX1gpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgZ290b3ggciVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGdvdG94IHIlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2VvZmYpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAzMiB8IEJQRl9KQSkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBnb3RvbCBwYyUrZFxcXCIsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9FWElUKSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFxcblxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIGV4aXRcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gXFx0XFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG5AQCAtMzgzLDE0ICszODMsMTQgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXFwiLFxcbiBcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfSk1QMzIgPyAndycgOiAncicsXFxuIFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdFxcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSA0XSxcXG4gXFx0XFx0XFx0XFx0KHUzMilpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAlc1xcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGJwZl9jbGFzc19zdHJpbmdbY2xhc3NdKTtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggYTBiZGRhZGE3OTY0ZS4uN2IzNTEwZDQ2YjM3NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC00NCwxNSArNDQsNjEgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdH1cXG4gfVxcbiBcXG4tLyogUmV0dXJuIFRSVUUgaWYgSU5TTiBoYXMgZGVmaW5lZCBhbnkgMzItYml0IHZhbHVlIGV4cGxpY2l0bHkuICovXFxuLXN0YXRpYyBib29sIGluc25faGFzX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4rLypcXG4rICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcXHUwMDNlPSAwLlxcbisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzIG9uIDY0LWJpdCxcXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cXG4rICovXFxuK3N0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIHtcXG4tXFx0aW50IGRzdF9yZWcgPSBpbnNuX2RlZl9yZWdubyhpbnNuKTtcXG4rXFx0dTggY2xhc3MgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdHU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0dTggc2l6ZSA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHR1OCBvcCA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Ym9vbCBtb2RlX21lbTtcXG4rXFxuK1xcdC8qIHN1YnJlZ2lzdGVyIGVuZGluZXNzIHN3YXAgKi9cXG4rXFx0aWYgKChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9BTFU2NCkgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX0VORCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gIT0gNjQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIHcwICs9IDEgKi9cXG4rXFx0aWYgKGNsYXNzID09IEJQRl9BTFUgXFx1MDAyNlxcdTAwMjYgb3AgIT0gQlBGX0VORClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApLCBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXFxuK1xcdGlmIChpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnNuLVxcdTAwM2VvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Lyogbm9uIDY0LWJpdCwgbm9uIHNpZ25lZCBleHRlbmRlZCBsb2FkcyAqL1xcbitcXHRtb2RlX21lbSA9IG1vZGUgPT0gQlBGX01FTSB8fCBtb2RlID09IEJQRl9QUk9CRV9NRU0gfHwgbW9kZSA9PSBCUEZfUFJPQkVfTUVNMzI7XFxuK1xcdGlmIChjbGFzcyA9PSBCUEZfTERYIFxcdTAwMjZcXHUwMDI2IG1vZGVfbWVtIFxcdTAwMjZcXHUwMDI2IHNpemUgIT0gQlBGX0RXKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBhdG9taWNzLCBzZWUgaW5zbl9kZWZfcmVnbm8oKSAqL1xcbitcXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNiBzaXplICE9IEJQRl9EVylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKGRzdF9yZWcgPT0gLTEpXFxuK1xcdC8qIGJvdGggTERfSU5EIGFuZCBMRF9BQlMgcmV0dXJuIDMyLWJpdCBkYXRhLiAqL1xcbitcXHRpZiAoY2xhc3MgPT0gQlBGX0xEIFxcdTAwMjZcXHUwMDI2IChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cmV0dXJuICFicGZfaXNfcmVnNjQoaW5zbiwgZHN0X3JlZywgTlVMTCwgRFNUX09QKTtcXG4rXFx0LyogQ29uc2VydmF0aXZlbHkgcmV0dXJuIHRydWUgYXQgZGVmYXVsdC4gKi9cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHVybiB0aGUgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluZWQgYnkgSU5TTiwgb3IgLTEgaWYgSU5TTiBkb2VzIG5vdFxcbisgKiBleHBsaWNpdGx5IGRlZmluZSBhIDMyLWJpdCB2YWx1ZS5cXG4rICovXFxuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuK3tcXG4rXFx0aW50IGRzdF9yZWcgPSBpbnNuX2RlZl9yZWdubyhpbnNuKTtcXG4rXFxuK1xcdGlmIChkc3RfcmVnIFxcdTAwM2MgMCB8fCBicGZfaXNfcmVnNjQoaW5zbikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBkc3RfcmVnO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGtmdW5jX2Rlc2NfY21wX2J5X2ltbV9vZmYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5AQCAtMTY5LDcgKzIxNSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqIChjbnQgPT0gMSkgaXMgdGFrZW4gb3Igbm90LiBUaGVyZSBpcyBubyBndWFyYW50ZWUgSU5TTiBhdCBPRkYgaXMgdGhlXFxuIFxcdCAqIG9yaWdpbmFsIGluc24gYXQgb2xkIHByb2cuXFxuIFxcdCAqL1xcbi1cXHRkYXRhW29mZl0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSk7XFxuK1xcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKSBcXHUwMDNlPSAwO1xcbiBcXG4gXFx0aWYgKGNudCA9PSAxKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE4MSw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRmb3IgKGkgPSBvZmY7IGkgXFx1MDAzYyBvZmYgKyBjbnQgLSAxOyBpKyspIHtcXG4gXFx0XFx0LyogRXhwYW5kIGluc25pW29mZl0ncyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqL1xcbiBcXHRcXHRkYXRhW2ldLnNlZW4gPSBvbGRfc2VlbjtcXG4tXFx0XFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBpKTtcXG4rXFx0XFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBpKSBcXHUwMDNlPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC02MTYsMTEgKzY2Miw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0aWYgKGxvYWRfcmVnID09IC0xKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdC8qIE5PVEU6IGFyZyBcXFwicmVnXFxcIiAodGhlIGZvdXJ0aCBvbmUpIGlzIG9ubHkgdXNlZCBmb3JcXG4tXFx0XFx0XFx0ICogICAgICAgQlBGX1NUWCArIFNSQ19PUCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIE5VTExcXG4tXFx0XFx0XFx0ICogICAgICAgaGVyZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChicGZfaXNfcmVnNjQoXFx1MDAyNmluc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7XFxuK1xcdFxcdFxcdGlmIChicGZfaXNfcmVnNjQoXFx1MDAyNmluc24pKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChjbGFzcyA9PSBCUEZfTEQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgIEJQRl9NT0RFKGNvZGUpID09IEJQRl9JTU0pXFxuIFxcdFxcdFxcdFxcdFxcdGkrKztcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuaW5kZXggMGFhZGZiYWUwYWNjNS4uNzgzNTFlNGE2ZjI1ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG5AQCAtNDk3LDcgKzQ5Nyw2IEBAIHN0YXRpYyB2b2lkIHByaW50X2luc3RhbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBmdW5jX2luc3RhbmNlICppXFxuIFxcdFxcdHBvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJTNkOiBcXFwiLCBpbnNuX2lkeCk7XFxuIFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBcXHUwMDI2aW5zbnNbaW5zbl9pZHhdKTtcXG4tXFx0XFx0YnBmX3Zsb2dfcmVzZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7IC8qIHJlbW92ZSBcXFxcbiAqL1xcbiBcXHRcXHRpbnNuX3BvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJSpjO1xcXCIsIGJwZl92bG9nX2FsaWdubWVudChpbnNuX3BvcyAtIHBvcyksICcgJyk7XFxuIFxcdFxcdHBvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuQEAgLTEwNDMsNyArMTA0Miw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXFxuIFxcdFxcdGlmICghcHJpbnRlZCkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbi1cXHRcXHRcXHRicGZfdmxvZ19yZXNldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcXG4gXFx0XFx0XFx0cHJpbnRlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdHIlZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2ldKTtcXG5AQCAtMTA1OCw3ICsxMDU2LDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcXG4gXFx0XFx0aWYgKCFwcmludGVkKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJTNkOiBcXFwiLCBpZHgpO1xcbiBcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxuLVxcdFxcdFxcdGJwZl92bG9nX3Jlc2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgZW52LVxcdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xcbiBcXHRcXHRcXHRwcmludGVkID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFx0c2ElZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2FpXSk7XFxuQEAgLTEwNzAsNyArMTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXFxuIFxcdFxcdGlmICghcHJpbnRlZCkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG4gXFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbi1cXHRcXHRcXHRicGZfdmxvZ19yZXNldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIGVudi1cXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTtcXG4gXFx0XFx0XFx0cHJpbnRlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdGZwJStkOiBcXFwiLCAtKGkgKyAxKSAqIDgpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9zdGFja19pbltpXSk7XFxuQEAgLTE1NDUsNiArMTU0MSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxuIFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBcXHUwMDI2aW5zbnNbaWR4XSk7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdC8qIENvbGxlY3Qgd2hhdCBuZWVkcyBwcmludGluZyAqL1xcbiBcXHRcXHRpZiAoaXNfbGR4X3N0eF9jYWxsIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTIwNTAsMjkgKzIwNDcsMzggQEAgaW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gLyogRWFjaCBmaWVsZCBpcyBhIHJlZ2lzdGVyIGJpdG1hc2sgKi9cXG4gc3RydWN0IGluc25fbGl2ZV9yZWdzIHtcXG4tXFx0dTE2IHVzZTtcXHQvKiByZWdpc3RlcnMgcmVhZCBieSBpbnN0cnVjdGlvbiAqL1xcbi1cXHR1MTYgZGVmO1xcdC8qIHJlZ2lzdGVycyB3cml0dGVuIGJ5IGluc3RydWN0aW9uICovXFxuLVxcdHUxNiBpbjtcXHRcXHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXFxuLVxcdHUxNiBvdXQ7XFx0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXFxuK1xcdHUzMiB1c2U7XFx0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cXG4rXFx0dTMyIGRlZjtcXHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xcbitcXHR1MzIgaW47XFx0XFx0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGJlZm9yZSBpbnN0cnVjdGlvbiAqL1xcbitcXHR1MzIgb3V0O1xcdC8qIHJlZ2lzdGVycyB0aGF0IG1heSBiZSBhbGl2ZSBhZnRlciBpbnN0cnVjdGlvbiAqL1xcbiB9O1xcbiBcXG4gLyogQml0bWFzayB3aXRoIDFzIGZvciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEFMTF9DQUxMRVJfU0FWRURfUkVHUyAoKDF1IFxcdTAwM2NcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTKSAtIDEpXFxuIFxcbitzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgcmVnNjRfbWFzayh1MzIgbikgeyByZXR1cm4gQklUKG4pIHwgQklUKG4gKyAxNik7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgbWFza193aWRlbih1MzIgbSkgeyByZXR1cm4gbSB8IChtIFxcdTAwM2NcXHUwMDNjIDE2KTsgfVxcbitzdGF0aWMgaW5saW5lIHUxNiBtYXNrX2xvKHUzMiBtKSB7IHJldHVybiAodTE2KW07IH1cXG4rc3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSBcXHUwMDNlXFx1MDAzZSAxNik7IH1cXG4rXFxuIC8qIENvbXB1dGUgaW5mby1cXHUwMDNle3VzZSxkZWZ9IGZpZWxkcyBmb3IgdGhlIGluc3RydWN0aW9uICovXFxuIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9jYWxsX3N1bW1hcnkgY3M7XFxuLVxcdHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpO1xcbi1cXHR1OCBjb2RlID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbi1cXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSk7XFxuLVxcdHUxNiBzcmMgPSBCSVQoaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuLVxcdHUxNiBkc3QgPSBCSVQoaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuLVxcdHUxNiByMCAgPSBCSVQoMCk7XFxuLVxcdHUxNiBkZWYgPSAwO1xcbi1cXHR1MTYgdXNlID0gMHhmZmZmO1xcbitcXHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Y29uc3QgdTggY29kZSA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0Y29uc3QgdTggbW9kZSA9IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdGNvbnN0IHUzMiBzcmMgPSByZWc2NF9tYXNrKGluc24tXFx1MDAzZXNyY19yZWcpO1xcbitcXHRjb25zdCB1MzIgZHN0ID0gcmVnNjRfbWFzayhpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4rXFx0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xcbitcXHRjb25zdCB1MzIgZHN0MzIgPSBtYXNrX2xvKGRzdCk7XFxuK1xcdGNvbnN0IHUzMiByMCAgPSByZWc2NF9tYXNrKDApO1xcbitcXHR1MzIgZGVmID0gMDtcXG4rXFx0dTMyIHVzZSA9IFUzMl9NQVg7XFxuIFxcbiBcXHRzd2l0Y2ggKGNsYXNzKSB7XFxuIFxcdGNhc2UgQlBGX0xEOlxcbkBAIC0yMDgzLDggKzIwODksOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdHVzZSA9IDA7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgQlBGX0xEIHwgQlBGX0FCUzpcXG4tXFx0XFx0Y2FzZSBCUEZfTEQgfCBCUEZfSU5EOlxcbitcXHRcXHRjYXNlIEJQRl9BQlM6XFxuK1xcdFxcdGNhc2UgQlBGX0lORDpcXG4gXFx0XFx0XFx0Lyogc3RpY2sgd2l0aCBkZWZhdWx0cyAqL1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0yMDkyLDcgKzIwOTgsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRjYXNlIEJQRl9MRFg6XFxuIFxcdFxcdHN3aXRjaCAobW9kZSkge1xcbiBcXHRcXHRjYXNlIEJQRl9NRU06XFxuK1xcdFxcdFxcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xcbitcXHRcXHRcXHRkZWYgPSBkc3Q7XFxuK1xcdFxcdFxcdHVzZSA9IHNyYztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgQlBGX01FTVNYOlxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBzaWduIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlcjtcXG4rXFx0XFx0XFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRkZWYgPSBkc3Q7XFxuIFxcdFxcdFxcdHVzZSA9IHNyYztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIxMTAsMTIgKzIxMjQsMTkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4gXFx0XFx0Y2FzZSBCUEZfTUVNOlxcbiBcXHRcXHRcXHRkZWYgPSAwO1xcbi1cXHRcXHRcXHR1c2UgPSBkc3QgfCBzcmM7XFxuK1xcdFxcdFxcdHVzZSA9IGRzdCB8IChzaXplID09IEJQRl9EVyA/IHNyYyA6IHNyYzMyKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgQlBGX0FUT01JQzpcXG4rXFx0XFx0Y2FzZSBCUEZfQVRPTUlDOiB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGRzdCBob2xkcyBhIHBvaW50ZXIgYW5kIGlzIGFsd2F5cyB1c2VkIGFzIDY0LWJpdDtcXG4rXFx0XFx0XFx0ICogdGhlIHZhbHVlIG9wZXJhbmQgYW5kIHIwIGFyZSByZWFkIGFzIDMyLWJpdCBmb3IgQlBGX1cgYXRvbWljcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHUzMiBzcmN2ID0gc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMjtcXG4rXFx0XFx0XFx0dTMyIHIwdiAgPSBzaXplID09IEJQRl9EVyA/IHIwIDogbWFza19sbyhyMCk7XFxuK1xcbiBcXHRcXHRcXHRzd2l0Y2ggKGluc24tXFx1MDAzZWltbSkge1xcbiBcXHRcXHRcXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbi1cXHRcXHRcXHRcXHR1c2UgPSByMCB8IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gcjB2IHwgZHN0IHwgc3JjdjtcXG4gXFx0XFx0XFx0XFx0ZGVmID0gcjA7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG5AQCAtMjEyNCwxMCArMjE0NSwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuIFxcdFxcdFxcdFxcdGRlZiA9IDA7XFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjdjtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjdjtcXG4gXFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSBcXHUwMDI2IEJQRl9GRVRDSClcXG4gXFx0XFx0XFx0XFx0XFx0ZGVmID0gc3JjO1xcbiBcXHRcXHRcXHRcXHRlbHNlXFxuQEAgLTIxMzUsNiArMjE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9BTFU6XFxuIFxcdGNhc2UgQlBGX0FMVTY0OlxcbkBAIC0yMTQ4LDE0ICsyMTcwLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0spXFxuIFxcdFxcdFxcdFxcdHVzZSA9IDA7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0dXNlID0gc3JjO1xcbitcXHRcXHRcXHRcXHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBzcmMgOiBzcmMzMjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGRlZiA9IGRzdDtcXG4gXFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0spXFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdDtcXG4rXFx0XFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gZHN0IDogZHN0MzI7XFxuIFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0dXNlID0gZHN0IHwgc3JjO1xcbitcXHRcXHRcXHRcXHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfSk1QOlxcbkBAIC0yMTgxLDEzICsyMjAzLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0dXNlID0gZGVmIFxcdTAwMjYgfkJJVChCUEZfUkVHXzApO1xcbiBcXHRcXHRcXHRpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCBcXHUwMDI2Y3MpKVxcbiBcXHRcXHRcXHRcXHR1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTtcXG4rXFx0XFx0XFx0ZGVmID0gbWFza193aWRlbihkZWYpO1xcbitcXHRcXHRcXHR1c2UgPSBtYXNrX3dpZGVuKHVzZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRkZWYgPSAwO1xcbi1cXHRcXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSylcXG4tXFx0XFx0XFx0XFx0dXNlID0gZHN0O1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHVzZSA9IGRzdCB8IHNyYztcXG4rXFx0XFx0XFx0dXNlID0gY2xhc3MgPT0gQlBGX0pNUCA/IGRzdCA6IGRzdDMyO1xcbitcXHRcXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWClcXG4rXFx0XFx0XFx0XFx0dXNlIHw9IGNsYXNzID09IEJQRl9KTVAgPyBzcmMgOiBzcmMzMjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0yMjA5LDYgKzIyMzIsNyBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXHRzdHJ1Y3QgaW5zbl9saXZlX3JlZ3MgKnN0YXRlO1xcbiBcXHRpbnQgaW5zbl9jbnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4rXFx0dTY0IHBvcywgaW5zbl9wb3M7XFxuIFxcdGludCBlcnIgPSAwLCBpLCBqO1xcbiBcXHRib29sIGNoYW5nZWQ7XFxuIFxcbkBAIC0yMjUyLDggKzIyNzYsOCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW50IGluc25faWR4ID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbaV07XFxuIFxcdFxcdFxcdHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqbGl2ZSA9IFxcdTAwMjZzdGF0ZVtpbnNuX2lkeF07XFxuIFxcdFxcdFxcdHN0cnVjdCBicGZfaWFycmF5ICpzdWNjO1xcbi1cXHRcXHRcXHR1MTYgbmV3X291dCA9IDA7XFxuLVxcdFxcdFxcdHUxNiBuZXdfaW4gPSAwO1xcbitcXHRcXHRcXHR1MzIgbmV3X291dCA9IDA7XFxuK1xcdFxcdFxcdHUzMiBuZXdfaW4gPSAwO1xcbiBcXG4gXFx0XFx0XFx0c3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7XFxuIFxcdFxcdFxcdGZvciAoaW50IHMgPSAwOyBzIFxcdTAwM2Mgc3VjYy1cXHUwMDNlY250OyArK3MpXFxuQEAgLTIyNjcsOCArMjI5MSwyMCBAQCBpbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7ICsraSlcXG4tXFx0XFx0aW5zbl9hdXhbaV0ubGl2ZV9yZWdzX2JlZm9yZSA9IHN0YXRlW2ldLmluO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7ICsraSkge1xcbitcXHRcXHRpbnQgZGVmMzIgPSBicGZfaW5zbl9kZWYzMihcXHUwMDI2aW5zbnNbaV0pO1xcbitcXHRcXHR1MzIgb3V0ID0gc3RhdGVbaV0ub3V0O1xcbitcXHRcXHR1MzIgaW4gPSBzdGF0ZVtpXS5pbjtcXG4rXFxuK1xcdFxcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIDMyLWJpdCBvcGVyYXRpb25zIGRvIG5vdCByZXNldCB1cHBlciBoYWx2ZXNcXG4rXFx0XFx0ICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb25cXG4rXFx0XFx0ICogcmVnaXN0ZXIgaWYgYW4gaW5zdHJ1Y3Rpb24gZGVmaW5lcyBhIDMyLWJpdCBzdWJyZWdpc3RlciBhbmQgdGhlXFxuK1xcdFxcdCAqIHVwcGVyIGhhbGYgb2YgdGhhdCByZWdpc3RlciBpcyBhbGl2ZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbnNuX2F1eFtpXS56ZXh0X2RzdCA9IGRlZjMyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgKG1hc2tfaGkob3V0KSBcXHUwMDI2IEJJVChkZWYzMikpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkxpdmUgcmVncyBiZWZvcmUgaW5zbjpcXFxcblxcXCIpO1xcbkBAIC0yMjg0LDcgKzIzMjAsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIuXFxcIik7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIFxcXCIpO1xcbitcXHRcXHRcXHRwb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbiBcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2ldKTtcXG4rXFx0XFx0XFx0aW5zbl9wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zO1xcbitcXHRcXHRcXHRpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpXFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJSpjOyB6ZXh0XFxcIiwgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJyAnKTtcXG4rXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRpZiAoYnBmX2lzX2xkaW1tNjQoXFx1MDAyNmluc25zW2ldKSlcXG4gXFx0XFx0XFx0XFx0aSsrO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGU2ZjM1ZjRlNzE1YjYuLjQ1ZDRjMGEwMGE1ZGIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTIxMjksMTIgKzIxMjksOSBAQCBzdGF0aWMgaW50IHJlZ19ib3VuZHNfc2FuaXR5X2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIC8qIE1hcmsgYSByZWdpc3RlciBhcyBoYXZpbmcgYSBjb21wbGV0ZWx5IHVua25vd24gKHNjYWxhcikgdmFsdWUuICovXFxuIHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIHtcXG4tXFx0czMyIHN1YnJlZ19kZWYgPSByZWctXFx1MDAzZXN1YnJlZ19kZWY7XFxuLVxcbiBcXHRtZW1zZXQocmVnLCAwLCBzaXplb2YoKnJlZykpO1xcbiBcXHRyZWctXFx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuIFxcdHJlZy1cXHUwMDNldmFyX29mZiA9IHRudW1fdW5rbm93bjtcXG4tXFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gc3VicmVnX2RlZjtcXG4gXFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcXG4gfVxcbiBcXG5AQCAtMjIxMCw3ICsyMjA3LDYgQEAgc3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0fVxcbiB9XFxuIFxcbi0jZGVmaW5lIERFRl9OT1RfU1VCUkVHXFx0KDApXFxuIHN0YXRpYyB2b2lkIGluaXRfcmVnX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXFxuIHtcXG5AQCAtMjIxOSw3ICsyMjE1LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfQlBGX1JFRzsgaSsrKSB7XFxuIFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW2ldKTtcXG4tXFx0XFx0cmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGZyYW1lIHBvaW50ZXIgKi9cXG5AQCAtMzAzMiwxMjAgKzMwMjcsMTQgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xcbiB9XFxuIFxcbi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYnkgdGhlIGZvbGxvd2luZyAzMi1iaXQgb3B0aW1pemF0aW9uXFxuLSAqIGNvZGUgb25seS4gSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXNcXG4tICogb24gNjQtYml0LCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLlxcbi0gKi9cXG4tYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi1cXHQgICAgICB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbi17XFxuLVxcdHU4IGNvZGUsIGNsYXNzLCBvcDtcXG4tXFxuLVxcdGNvZGUgPSBpbnNuLVxcdTAwM2Vjb2RlO1xcbi1cXHRjbGFzcyA9IEJQRl9DTEFTUyhjb2RlKTtcXG4tXFx0b3AgPSBCUEZfT1AoY29kZSk7XFxuLVxcdGlmIChjbGFzcyA9PSBCUEZfSk1QKSB7XFxuLVxcdFxcdC8qIEJQRl9FWElUIGZvciBcXFwibWFpblxcXCIgd2lsbCByZWFjaCBoZXJlLiBSZXR1cm4gVFJVRVxcbi1cXHRcXHQgKiBjb25zZXJ2YXRpdmVseS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChvcCA9PSBCUEZfRVhJVClcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdGlmIChvcCA9PSBCUEZfQ0FMTCkge1xcbi1cXHRcXHRcXHQvKiBCUEYgdG8gQlBGIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgbWFya2luZ1xcbi1cXHRcXHRcXHQgKiBjYWxsZXIgc2F2ZWQgY2xvYmJlciB3aXRoIERTVF9PUF9OT19NQVJLIGZvciB3aGljaCB3ZVxcbi1cXHRcXHRcXHQgKiBkb24ndCBjYXJlIHRoZSByZWdpc3RlciBkZWYgYmVjYXVzZSB0aGV5IGFyZSBhbnl3YXlcXG4tXFx0XFx0XFx0ICogbWFya2VkIGFzIE5PVF9JTklUIGFscmVhZHkuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0LyogSGVscGVyIGNhbGwgd2lsbCByZWFjaCBoZXJlIGJlY2F1c2Ugb2YgYXJnIHR5cGVcXG4tXFx0XFx0XFx0ICogY2hlY2ssIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBUUlVFLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHQgPT0gU1JDX09QKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IFxcdTAwMjZcXHUwMDI2IG9wID09IEJQRl9FTkQgXFx1MDAyNlxcdTAwMjYgKGluc24tXFx1MDAzZWltbSA9PSAxNiB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gMzIpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0FMVTY0IHx8IGNsYXNzID09IEJQRl9KTVAgfHxcXG4tXFx0ICAgIChjbGFzcyA9PSBCUEZfQUxVIFxcdTAwMjZcXHUwMDI2IG9wID09IEJQRl9FTkQgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tID09IDY0KSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX0FMVSB8fCBjbGFzcyA9PSBCUEZfSk1QMzIpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdGlmIChjbGFzcyA9PSBCUEZfTERYKSB7XFxuLVxcdFxcdGlmICh0ICE9IFNSQ19PUClcXG4tXFx0XFx0XFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XFxuLVxcdFxcdC8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xcbi1cXHRcXHQvKiBCUEZfU1RYIChpbmNsdWRpbmcgYXRvbWljIHZhcmlhbnRzKSBoYXMgb25lIG9yIG1vcmUgc291cmNlXFxuLVxcdFxcdCAqIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggaXMgYSBwdHIuIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxlciBpc1xcbi1cXHRcXHQgKiBhc2tpbmcgYWJvdXQgaXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodCA9PSBTUkNfT1AgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcXG4tXFx0XFx0dTggbW9kZSA9IEJQRl9NT0RFKGNvZGUpO1xcbi1cXG4tXFx0XFx0LyogTERfSU1NNjQgKi9cXG4tXFx0XFx0aWYgKG1vZGUgPT0gQlBGX0lNTSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRcXHQvKiBCb3RoIExEX0lORCBhbmQgTERfQUJTIHJldHVybiAzMi1iaXQgZGF0YS4gKi9cXG4tXFx0XFx0aWYgKHQgIT0gU1JDX09QKVxcbi1cXHRcXHRcXHRyZXR1cm4gIGZhbHNlO1xcbi1cXG4tXFx0XFx0LyogSW1wbGljaXQgY3R4IHB0ci4gKi9cXG4tXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfNilcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcbi1cXHRcXHQvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGNsYXNzID09IEJQRl9TVClcXG4tXFx0XFx0LyogVGhlIG9ubHkgc291cmNlIHJlZ2lzdGVyIGZvciBCUEZfU1QgaXMgYSBwdHIuICovXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4tXFx0LyogQ29uc2VydmF0aXZlbHkgcmV0dXJuIHRydWUgYXQgZGVmYXVsdC4gKi9cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLXtcXG4tXFx0czMyIGRlZl9pZHggPSByZWctXFx1MDAzZXN1YnJlZ19kZWY7XFxuLVxcbi1cXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2RlZl9pZHggLSAxXS56ZXh0X2RzdCA9IHRydWU7XFxuLVxcdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24ndCBiZSBzdWItcmVnaXN0ZXIgYW55bW9yZS4gKi9cXG4tXFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXFxuIFxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpICsgZW52LVxcdTAwM2VpbnNuX2lkeDtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4tXFx0Ym9vbCBydzY0O1xcbiBcXG4gXFx0bWFya19yZWdfc2NyYXRjaGVkKGVudiwgcmVnbm8pO1xcbiBcXG4gXFx0cmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXHRydzY0ID0gYnBmX2lzX3JlZzY0KGluc24sIHJlZ25vLCByZWcsIHQpO1xcbiBcXHRpZiAodCA9PSBTUkNfT1ApIHtcXG4gXFx0XFx0LyogY2hlY2sgd2hldGhlciByZWdpc3RlciB1c2VkIGFzIHNvdXJjZSBvcGVyYW5kIGNhbiBiZSByZWFkICovXFxuIFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgPT0gTk9UX0lOSVQpIHtcXG5AQCAtMzE1Niw5ICszMDQ1LDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcXG4gXFx0XFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0XFx0aWYgKHJ3NjQpXFxuLVxcdFxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXFxuQEAgLTMxNjYsNyArMzA1Miw2IEBAIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZnJhbWUgcG9pbnRlciBpcyByZWFkIG9ubHlcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBydzY0ID8gREVGX05PVF9TVUJSRUcgOiBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0aWYgKHQgPT0gRFNUX09QKVxcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xcbiBcXHR9XFxuQEAgLTM4MjIsMTEgKzM3MDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzcGlsbF9zaXplIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XFxuLVxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG4tXFx0XFx0XFx0XFx0ICogc3VicmVnX2RlZiBmb3IgdGhpcyBpbnNuLiAgU2F2ZSBpdCBmaXJzdC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHMzMiBzdWJyZWdfZGVmID0gc3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlYnBmX2NhcGFibGUgXFx1MDAyNlxcdTAwMjYgc2l6ZSA9PSA0IFxcdTAwMjZcXHUwMDI2IHNwaWxsX3NpemUgPT0gNCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IDMyKVxcbiBcXHRcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhY2sgc2xvdCBoYXMgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvblxcbkBAIC0zODM0LDcgKzM3MTQsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCByZWcpO1xcbiBcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKnJlZztcXG4tXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmID0gc3VicmVnX2RlZjtcXG4gXFxuIFxcdFxcdFxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBmaWxsLlxcbiBcXHRcXHRcXHRcXHQgKiBjb2VyY2VfcmVnX3RvX3NpemUgd2lsbCBhZGp1c3QgdGhlIGJvdW5kYXJpZXMuXFxuQEAgLTYyNzEsMTIgKzYxNTAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZhbHVlX3JlZ25vKTtcXG4tXFx0XFx0XFx0XFx0LyogQSBsb2FkIG9mIGN0eCBmaWVsZCBjb3VsZCBoYXZlIGRpZmZlcmVudFxcbi1cXHRcXHRcXHRcXHQgKiBhY3R1YWwgbG9hZCBzaXplIHdpdGggdGhlIG9uZSBlbmNvZGVkIGluIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBpbnNuLiBXaGVuIHRoZSBkc3QgaXMgUFRSLCBpdCBpcyBmb3Igc3VyZSBub3RcXG4tXFx0XFx0XFx0XFx0ICogYSBzdWItcmVnaXN0ZXIuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdFxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby5yZWdfdHlwZSkgPT0gUFRSX1RPX0JURl9JRCkge1xcbiBcXHRcXHRcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5idGYgPSBpbmZvLmJ0ZjtcXG4gXFx0XFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmX2lkID0gaW5mby5idGZfaWQ7XFxuQEAgLTczODAsMTAgKzcyNTMsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxcbiBcXHRcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHNwaTtcXG4gXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbi1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi1cXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0bWFya19zdGFja19zbG90c19zY3JhdGNoZWQoZW52LCBzcGksIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xcbiBcXG4gXFx0XFx0XFx0cmVnID0gXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbkBAIC05NDYzLDcgKzkzMzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXFxuIFxcdFxcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xcbiBcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzLCBCUEZfUkVHXzApO1xcbi1cXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xcbkBAIC0xMDQ4Miw5ICsxMDM1MCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbi1cXHQvKiBoZWxwZXIgY2FsbCByZXR1cm5zIDY0LWJpdCB2YWx1ZS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcXG4tXFxuIFxcdC8qIHVwZGF0ZSByZXR1cm4gcmVnaXN0ZXIgKGFscmVhZHkgbWFya2VkIGFzIHdyaXR0ZW4gYWJvdmUpICovXFxuIFxcdHJldF90eXBlID0gZm4tXFx1MDAzZXJldF90eXBlO1xcbiBcXHRyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7XFxuQEAgLTEwNzIyLDMwICsxMDU4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XFxuLSAqIHRoZSBCVEYgZnVuY19wcm90bydzIHJldHVybiB2YWx1ZSBzaXplIGFuZCBhcmd1bWVudC5cXG4tICovXFxuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgcmVnbm8sIHNpemVfdCByZWdfc2l6ZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gXFx1MDAyNnJlZ3NbcmVnbm9dO1xcbi1cXG4tXFx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xcbi1cXHRcXHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cXG4tXFx0XFx0cmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gcmVnX3NpemUgPT0gc2l6ZW9mKHU2NCkgP1xcbi1cXHRcXHRcXHRERUZfTk9UX1NVQlJFRyA6IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXHR9IGVsc2UgaWYgKHJlZ19zaXplID09IHNpemVvZih1NjQpKSB7XFxuLVxcdFxcdC8qIEZ1bmN0aW9uIGFyZ3VtZW50ICovXFxuLVxcdFxcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcXG4tXFx0fVxcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG4tXFx0XFx0XFx0XFx0ICAgc2l6ZV90IHJlZ19zaXplKVxcbi17XFxuLVxcdHJldHVybiBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBjdXJfcmVncyhlbnYpLCByZWdubywgcmVnX3NpemUpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbiBcXHRyZXR1cm4gbWV0YS1cXHUwMDNla2Z1bmNfZmxhZ3MgXFx1MDAyNiBLRl9BQ1FVSVJFO1xcbkBAIC0xMjk3NCw3ICsxMjgxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4O1xcbiBcXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xcbiBcXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbkBAIC0xMzAxOCw3ICsxMjg1OCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZmFpbGVkIHRvIG1hcmsgczMyIHJhbmdlIGZvciByZXR2YWwgaW4gZm9ya2VkIHN0YXRlIGZvciBsb2NrXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdzLCBCUEZfUkVHXzAsIHNpemVvZih1MzIpKTtcXG4gXFx0fSBlbHNlIGlmICghaW5zbi1cXHUwMDNlb2ZmIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcXG4gXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtMTMxNjgsNyArMTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XFxuIFxcbiBcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tyZWdub10pO1xcbi1cXHRcXHRyZWdzW3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuIFxcdH1cXG4gXFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XFxuIFxcbkBAIC0xMzE5MCw3ICsxMzAyOCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcXHUwMDI2XFx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG4gXFx0XFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxcbiBcXHRcXHRcXHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcXG4tXFx0XFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cXHUwMDNlc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuIFxcdFxcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZwdHJfdHlwZV9pZCk7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuQEAgLTEzMjgxLDcgKzEzMTE4LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0LyogRm9yIG1hcmtfcHRyX29yX251bGxfcmVnLCBzZWUgOTNjMjMwZTNmNWJkNiAqL1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBCUEZfUkVHXzAsIHNpemVvZih2b2lkICopKTtcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXFx1MDAyNm1ldGEpKSB7XFxuIFxcdFxcdFxcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XFxuIFxcdFxcdFxcdGlmIChpZCBcXHUwMDNjIDApXFxuQEAgLTEzMzE4LDE4ICsxMzE1NCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdGNhbGxlcl9pbmZvLVxcdTAwM2VzdGFja19hcmdfY250ID0gc3RhY2tfYXJnX2NudDtcXG4gXFx0fVxcbiBcXG4tXFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEuZnVuY19wcm90byArIDEpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBuYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XFxuLVxcdFxcdHUzMiByZWdubyA9IGkgKyAxO1xcbi1cXG4tXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbi1cXHRcXHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKVxcbi1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXFxuLVxcdFxcdFxcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cXHUwMDNlc2l6ZSk7XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbiBcXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMTQ4MjMsMTQgKzE0NjQ3LDE0IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0aWYgKGRzdF9yZWctXFx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BKVxcbiBcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbiBcXG4tXFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXG4tXFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpXFxuK1xcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxcbiBcXHRcXHRcXHQgKiA2NC1iaXQgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byAzMi5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGF1eC1cXHUwMDNlbmVlZHNfemV4dCA9IHRydWU7XFxuK1xcdFxcdFxcdGF1eC1cXHUwMDNlemV4dF9kc3QgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBBbnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIG9uIGFyZW5hIHBvaW50ZXJzICovXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNDk2OSw2ICsxNDc5Myw3IEBAIHN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gLyogY2hlY2sgdmFsaWRpdHkgb2YgMzItYml0IGFuZCA2NC1iaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zICovXFxuIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCA9IGN1cl9hdXgoZW52KTtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xcbiBcXHR1OCBvcGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE1MDI2LDE4ICsxNDg1MSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0pIHtcXG4gXFx0XFx0XFx0XFx0XFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cXG4gXFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbi1cXHRcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXFxuK1xcdFxcdFxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gPT0gMSkgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fQVJFTkE7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbi1cXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApIHtcXG4gXFx0XFx0XFx0XFx0XFx0LyogY2FzZTogUjEgPSBSMlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBjb3B5IHJlZ2lzdGVyIHN0YXRlIHRvIGRlc3QgcmVnXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4tXFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpKSB7XFxuQEAgLTE1MDU1LDcgKzE0ODc2LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbiBcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG5AQCAtMTUwODAsNyArMTQ5MDAsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0LyogY2FzZTogVzEgPSAoczgsIHMxNilXMiAqL1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRib29sIG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcXHUwMDNjICgxVUxMIFxcdTAwM2NcXHUwMDNjIChpbnNuLVxcdTAwM2VvZmYgLSAxKSk7XFxuQEAgLTE1MDkwLDcgKzE0OTA5LDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cXHUwMDNlaW5zbl9pZHggKyAxO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmIFxcdTAwM2VcXHUwMDNlIDMpO1xcbiBcXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE1OTU5LDEyICsxNTc3Nyw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoKCEocmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpIFxcdTAwMjZcXHUwMDI2ICEoa25vd25fcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpKSB8fFxcbiBcXHRcXHQgICAgcmVnLVxcdTAwM2VkZWx0YSA9PSBrbm93bl9yZWctXFx1MDAzZWRlbHRhKSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbi1cXG4gXFx0XFx0XFx0KnJlZyA9ICprbm93bl9yZWc7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHMzMiBzYXZlZF9zdWJyZWdfZGVmID0gcmVnLVxcdTAwM2VzdWJyZWdfZGVmO1xcbiBcXHRcXHRcXHRzMzIgc2F2ZWRfb2ZmID0gcmVnLVxcdTAwM2VkZWx0YTtcXG4gXFx0XFx0XFx0dTMyIHNhdmVkX2lkID0gcmVnLVxcdTAwM2VpZDtcXG4gXFxuQEAgLTE1OTc0LDEyICsxNTc4OCwxMSBAQCBzdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc1xcbiBcXHRcXHRcXHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyArPSBkZWx0YSAqL1xcbiBcXHRcXHRcXHQqcmVnID0gKmtub3duX3JlZztcXG4gXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXFxuLVxcdFxcdFxcdCAqIG90aGVyd2lzZSBhbm90aGVyIHN5bmNfbGlua2VkX3JlZ3MoKSB3aWxsIGJlIGluY29ycmVjdC5cXG4rXFx0XFx0XFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYgYW5kIGlkLCBvdGhlcndpc2UgYW5vdGhlciBzeW5jX2xpbmtlZF9yZWdzKClcXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xcbiBcXHRcXHRcXHRyZWctXFx1MDAzZWlkID0gc2F2ZWRfaWQ7XFxuLVxcdFxcdFxcdHJlZy1cXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XFxuIFxcbiBcXHRcXHRcXHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuIFxcdFxcdFxcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuQEAgLTE2NDE0LDggKzE2MjI3LDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxcbiBcXHQgKi9cXG4gXFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxuLVxcdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cXG4tXFx0cmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4gXFx0LypcXG4gXFx0ICogU2VlIGJwZl9nZW5fbGRfYWJzKCkgd2hpY2ggZW1pdHMgYSBoaWRkZW4gQlBGX0VYSVQgd2l0aCByMD0wXFxuIFxcdCAqIHdoaWNoIG11c3QgYmUgZXhwbG9yZWQgYnkgdGhlIHZlcmlmaWVyIHdoZW4gaW4gYSBzdWJwcm9nLlxcbkBAIC0xNjczMCw3ICsxNjU0MSw2IEBAIGJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmIChicGZfaGVscGVyX2NhbGwoY2FsbCkpIHtcXG4tXFxuIFxcdFxcdGlmIChicGZfZ2V0X2hlbHBlcl9wcm90byhlbnYsIGNhbGwtXFx1MDAzZWltbSwgXFx1MDAyNmZuKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdC8qIGVycm9yIHdvdWxkIGJlIHJlcG9ydGVkIGxhdGVyICovXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtMTc0NzUsNiArMTcyODUsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlZDogXFxcIiwgZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxuIFxcdFxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG4rXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRlbnYtXFx1MDAzZXByZXZfaW5zbl9wcmludF9wb3MgPSBlbnYtXFx1MDAzZWxvZy5lbmRfcG9zIC0gZW52LVxcdTAwM2VwcmV2X2xvZ19wb3M7XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcXG5pbmRleCA1ZTdjYjhiMzZmZWYyLi41NTc5MTczYTYxZTNiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuY1xcbkBAIC0xMDcsMTQgKzEwNyw3IEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIFxcbiBcXHRwID0gYnVmO1xcbiBcXHR3aGlsZSAoKnAgIT0gJ1xcXFwwJykge1xcbi1cXHRcXHRpZiAoKnAgPT0gJ1xcXFxuJykge1xcbi1cXHRcXHRcXHRtZW1tb3ZlKHAgKyAzLCBwLCBzdHJsZW4oYnVmKSArIDEgLSAocCAtIGJ1ZikpO1xcbi1cXHRcXHRcXHQvKiBBbGlnbiBlYWNoIGluc3RydWN0aW9uIGR1bXAgcm93IGxlZnQuICovXFxuLVxcdFxcdFxcdCpwKysgPSAnXFxcXFxcXFwnO1xcbi1cXHRcXHRcXHQqcCsrID0gJ2wnO1xcbi1cXHRcXHRcXHQvKiBPdXRwdXQgbXVsdGlsaW5lIGNvbmNhdGVuYXRpb24uICovXFxuLVxcdFxcdFxcdCpwKysgPSAnXFxcXFxcXFwnO1xcbi1cXHRcXHR9IGVsc2UgaWYgKCpwID09ICdcXHUwMDNjJyB8fCAqcCA9PSAnXFx1MDAzZScgfHwgKnAgPT0gJ3wnIHx8ICpwID09ICdcXHUwMDI2Jykge1xcbitcXHRcXHRpZiAoKnAgPT0gJ1xcdTAwM2MnIHx8ICpwID09ICdcXHUwMDNlJyB8fCAqcCA9PSAnfCcgfHwgKnAgPT0gJ1xcdTAwMjYnKSB7XFxuIFxcdFxcdFxcdG1lbW1vdmUocCArIDEsIHAsIHN0cmxlbihidWYpICsgMSAtIChwIC0gYnVmKSk7XFxuIFxcdFxcdFxcdC8qIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3Rlci4gKi9cXG4gXFx0XFx0XFx0KnArKyA9ICdcXFxcXFxcXCc7XFxuQEAgLTEyOSwxNiArMTIyLDEwIEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIHN0YXRpYyB2b2lkIF9fcHJpbnRmKDIsIDMpXFxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XFxuLVxcdGNoYXIgY2hvbXBlZF9mbXRbbF07XFxuIFxcdHZhX2xpc3QgYXJncztcXG4gXFxuIFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdGlmIChsIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRzdHJuY3B5KGNob21wZWRfZm10LCBmbXQsIGwgLSAxKTtcXG4tXFx0XFx0Y2hvbXBlZF9mbXRbbCAtIDFdID0gJ1xcXFwwJztcXG4tXFx0fVxcbi1cXHRqc29ud192cHJpbnRmX2VucXVvdGUoanNvbl93dHIsIGNob21wZWRfZm10LCBhcmdzKTtcXG4rXFx0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xcbiBcXHR2YV9lbmQoYXJncyk7XFxuIH1cXG4gXFxuQEAgLTM1MSw2ICszMzgsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX3BsYWluKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sXFxuIFxcbiBcXHRcXHRwcmludGYoXFxcIiU0dTogXFxcIiwgaSk7XFxuIFxcdFxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24gKyBpLCB0cnVlKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKG9wY29kZXMpIHtcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCIgICAgICAgXFxcIik7XFxuQEAgLTQxNyw2ICs0MDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxcbiBcXG4gXFx0XFx0cHJpbnRmKFxcXCIldTogXFxcIiwgaW5zbl9vZmYpO1xcbiBcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxcXFxcbFxcXFxcXFxcXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChvcGNvZGVzKSB7XFxuIFxcdFxcdFxcdHByaW50ZihcXFwiXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcXFxcXFwgXFxcIik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCBmNTI5ZjFjOGMxNzFkLi4zMDIyMTM1MjU2OGQ3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmNcXG5AQCAtNTUsMTAgKzU1LDkgQEAgc3RydWN0IGJwZl9pbnNuICpkaXNhc21faW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcXG4gXFx0ICogZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gKEZGIHN0YW5kcyBmb3IgaW5zdHJ1Y3Rpb24gYGNvZGVgIGJ5dGUpLlxcbiBcXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cXG4gXFx0ICogRS5nLjogXFxcIig4NSkgY2FsbCBmb28jMTBcXFwiIC1cXHUwMDNlIFxcXCJjYWxsIGZvb1xcXCIuXFxuLVxcdCAqIEFsc28gcmVtb3ZlIG5ld2xpbmUgaW4gdGhlIGVuZCAodGhlICdtYXgoc3RybGVuKGJ1ZikgLSAxLCAwKScgdGhpbmcpLlxcbiBcXHQgKi9cXG4gXFx0cGZ4X2VuZCA9IGJ1ZiArIDU7XFxuLVxcdHNmeF9zdGFydCA9IGJ1ZiArIG1heCgoaW50KXN0cmxlbihidWYpIC0gMSwgMCk7XFxuK1xcdHNmeF9zdGFydCA9IGJ1ZiArIChpbnQpc3RybGVuKGJ1Zik7XFxuIFxcdGlmIChzdHJuY21wKHBmeF9lbmQsIFxcXCJjYWxsIFxcXCIsIDUpID09IDAgXFx1MDAyNlxcdTAwMjYgKHRtcCA9IHN0cnJjaHIoYnVmLCAnIycpKSlcXG4gXFx0XFx0c2Z4X3N0YXJ0ID0gdG1wO1xcbiBcXHRsZW4gPSBzZnhfc3RhcnQgLSBwZnhfZW5kO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtMTI0LDYgKzEyNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlycS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZlcmlmaWVyX3pleHQuc2tlbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVhfRU5UUklFUyAxMVxcbiBcXG5AQCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcXHRcXHRcXHQgICAgICB7IFJVTihpcnEpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcXHRcXHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cXG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XFxuIFxcbiBzdGF0aWMgaW50IGluaXRfdGVzdF92YWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNoYXIgKm1hcF9uYW1lKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGQzZWE2NjFiNzc4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcXG5AQCAtMCwwICsxLDM4OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcXG4rXFxuKy8qIHRvIHJldGFpbiBkZWJ1ZyBpbmZvIGZvciBCVEYgZ2VuZXJhdGlvbiAqL1xcbit2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcXG4re1xcbitcXHRicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcXG4rXFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKDAsIDAsIDAsIDAsIDApO1xcbitcXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19mbGFnKEJQRl9GX1RFU1RfUk5EX0hJMzIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XFx0LyogaW5qZWN0IHNvbWUgdmFsdWUgZm9yIHI2J3MgdXBwZXIgaGFsZiAqL1xcdFxcXFxcXG4rXFx0aWYgcjggIT0gMCBnb3RvIDFmO1xcdFxcdC8qIGZhbGwtdGhyb3VnaCBjYWNoZWQgZmlyc3QsIGJyYW5jaCBwcnVuZWQgKi9cXHRcXFxcXFxuK1xcdHI2ID0gMzI7XFx0XFx0XFx0LyogZnVsbCA2NC1iaXQgZGVmICovXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIDJmO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHR3NiA9IDMyO1xcdFxcdFxcdC8qIDMyLWJpdCBkZWYsIHpleHQgbWFyayBsb3N0ICovXFx0XFx0XFxcXFxcbisyOlxcdHIwID0gcjY7XFx0XFx0XFx0LyogYnVnZ3kgdmVyaWZpZXIgYmVsaWV2ZWQgdXBwZXIgMzIgYml0cyBhcmUgMCAqLyBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1xcdFxcXFxcXG4rXFx0cjAgXFx1MDAzZVxcdTAwM2U9IDMyO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2t0aW1lX2dldF9ucylcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwidzEgPSB3MHt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCB6ZXh0X2FsdTMyX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IHIxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXFx1MDAzZSBubyB6ZXh0ICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbm90X21zZyhcXFwiOyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIG5vX3pleHRfYWx1MzJfaGlfdW51c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IHcwO1xcdFxcdC8qIE1PViAqL1xcdFxcdFxcXFxcXG4rXFx0dzIgPSB3MTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcyICs9IHcxO1xcdFxcdC8qIEFMVTMyLCBCUEZfWCAqL1xcdFxcXFxcXG4rXFx0dzIgKz0gMTtcXHRcXHQvKiBBTFUzMiwgQlBGX0sgKi9cXHRcXFxcXFxuK1xcdHcyID0gdzI7XFx0XFx0Lyoga2VlcCB3MiBhbGl2ZSBmb3IgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gKi8gXFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiA2NC1iaXQgZGVmaW5pdGlvbiBpcyBuZXZlciB6ZXJvIGV4dGVuZGVkICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbm90X21zZyhcXFwicjEgPSByMHt7Lip9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBub196ZXh0X21vdjY0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByMTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIE5hcnJvdyBsb2FkIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXFx1MDAzZSB6ZXh0ICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJyMSA9ICoodTMyICopKHIxMCAtOCl7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9uYXJyb3dfbG9hZF9oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAqKHUzMiAqKShyMTAgLSA4KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IGF0b21pYyBmZXRjaCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjEgPSBhdG9taWNfZmV0Y2hfYWRkKCh1MzIgKikocjEwIC04KSwgcjEpe3sgK319OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfYXRvbWljX2ZldGNoMzJfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC44Ynl0ZSAlW2ZldGNoX2FkZDMyXTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9pbnNuKGZldGNoX2FkZDMyLFxcbitcXHRcXHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiAzMi1iaXQgYXRvbWljIGNtcHhjaGcgcmVzdWx0IChyMCkgcmVhZCBhcyA2NC1iaXQgLVxcdTAwM2UgemV4dCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9jbXB4Y2hnMzJfaGlfdXNlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC44Ynl0ZSAlW2NtcHhjaGczMl07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2luc24oY21weGNoZzMyLFxcbitcXHRcXHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9DTVBYQ0hHLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC04KSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogMzItYml0IGRlZiBiZWZvcmUgYSBicmFuY2gsIHVwcGVyIGhhbGYgdXNlZCBvbiBvbmUgYnJhbmNoIC1cXHUwMDNlIHpleHQgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcInc2ID0gMzJ7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgemV4dF9jZmdfaGlfdXNlZF9vbmVfYnJhbmNoKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHR3NiA9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjAgPT0gMCBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIHIxJ3MgdXBwZXIgaGFsZiBpcyBkZWFkLCBzbyAndzEgPSAxJyBtdXN0IE5PVCBiZSBtYXJrZWQgZm9yIHplcm8gZXh0ZW5zaW9uLiAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX25vdF9tc2coXFxcIncxID0gMXt7Lip9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBub196ZXh0X290aGVyX3JlZ19oaV91c2VkKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgXFx1MDAzY1xcdTAwM2M9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dzEgPSAxO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIExEX0FCUyBkZWZpbmVzIHIwOyB3aGVuIHIwIGlzIHJlYWQgYXMgNjQtYml0IGl0IG11c3QgYmUgemVybyBleHRlbmRlZCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwicjAgPSAqKHU4ICopc2tiWzBde3suKn19OyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIHpleHRfbGRfYWJzX2hpX3VzZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI2ID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTggKilza2JbMF07XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNyA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSByNztcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIncyID0gMXt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBoZWxwZXJfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHcyID0gMTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfdHJhY2VfcHJpbnRrXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl90cmFjZV9wcmludGspXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyogc3VicHJvZ3JhbSBwYXJhbWV0ZXJzIGFyZSBjb25zZXJ2YXRpdmVseSByZWFkIGFzIDY0LWJpdCAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwidzEgPSB3MHt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBzdWJwcm9nX3BhcmFtX3JlYWRfYXNfNjRiaXQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsIHN1YnByb2dfcmVhZHNfYXJnX2FzXzY0Yml0O1xcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rLyoga2Z1bmMgcGFyYW1ldGVycyBhcmUgemVybyBleHRlbmRlZCAqL1xcbitTRUMoXFxcInRjXFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbXNnKFxcXCJ3MSA9IDF7eyArfX07IHpleHRcXFwiKVxcbitfX21zZyhcXFwidzIgPSAxe3sgK319OyB6ZXh0XFxcIilcXG4rX19tc2coXFxcInczID0gMXt7ICt9fTsgemV4dFxcXCIpXFxuK19fbXNnKFxcXCJ3NCA9IDF7eyArfX07IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQga2Z1bmNfcGFyYW1fcmVhZF9wZXJfYnRmKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MSA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MiA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3MyA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3NCA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsIGJwZl9rZnVuY19jYWxsX3Rlc3Q0O1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuK19fbm90X21zZyhcXFwiOyB6ZXh0XFxcIilcXG4rX19uYWtlZCB2b2lkIGFsdTMyX2FuZF8zMmJpdF9jb25kaXRpb25hbCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0dzEgPSB3MDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHcxIFxcdTAwM2UgNDIgZ290byAxZjtcXHRcXHQvKiBCUEZfSyAqL1xcdFxcXFxcXG4rXFx0dzIgPSAyODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHcyIFxcdTAwM2UgdzEgZ290byAxZjtcXHRcXHQvKiBCUEZfWCAqL1xcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwidzEgPSB3MHt7ICt9fTsgemV4dFxcXCIpXFxuK19fbmFrZWQgdm9pZCBhbHUzMl9hbmRfNjRiaXRfY29uZGl0aW9uYWwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHcxID0gdzA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMSBcXHUwMDNlIDQyIGdvdG8gMWY7XFx0XFx0LyogQlBGX0sgKi9cXHRcXFxcXFxuK1xcdHIyID0gMjg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMiBcXHUwMDNlIHIxIGdvdG8gMWY7XFx0XFx0LyogQlBGX1ggKi9cXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19ub3RfbXNnKFxcXCI7IHpleHRcXFwiKVxcbitfX25ha2VkIHZvaWQgYWx1NjRfYW5kX2NvbmRpdGlvbmFscyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1xcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHcxIFxcdTAwM2UgNDIgZ290byAxZjtcXHRcXHQvKiBCUEZfSyAqL1xcdFxcXFxcXG4rXFx0aWYgcjEgXFx1MDAzZSA0MiBnb3RvIDFmO1xcdFxcdC8qIEJQRl9LICovXFx0XFxcXFxcbitcXHRyMiA9IDI4O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgdzIgXFx1MDAzZSB3MSBnb3RvIDFmO1xcdFxcdC8qIEJQRl9YICovXFx0XFxcXFxcbitcXHRpZiByMiBcXHUwMDNlIHIxIGdvdG8gMWY7XFx0XFx0LyogQlBGX1ggKi9cXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rI2lmZGVmIF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUXFxuK1xcbitTRUMoXFxcIj9mZW50cnkucy9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4rX19hcmNoX3MzOTB4XFxuK19feGxhdGVkKFxcXCI3OiB3MSA9IHcwXFxcIilcXG4rX194bGF0ZWQoXFxcIjg6IHcxID0gdzFcXFwiKVxcbitfX3hsYXRlZChcXFwiOTogdzEgKz0gOFxcXCIpXFxuK19feGxhdGVkKFxcXCIxMDogdzEgPSB3MVxcXCIpXFxuK19fbmFrZWQgdm9pZCBhcmVuYV9wdHIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVthcmVuYV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMyA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNSA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gYWRkcl9zcGFjZV9jYXN0KHIwLCAwLCAxKTtcXHQvKiBuZWVkcyB6ZXh0ICovXFxcXFxcbitcXHRyMSArPSA4O1xcdFxcdFxcdC8qIG5lZWRzIHpleHQgKi9cXFxcXFxuK1xcdCoodTY0ICopKHIxICswKSA9IDQyO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW0oYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKSxcXG4rXFx0ICBfX2ltbV9hZGRyKGFyZW5hKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKy8qIENoZWNrIGlmIHByb2JlIG1lbSBsb2FkcyBrZWVwIHRoZWlyIHplcm8gZXh0ZW5zaW9uLiAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX2FyY2hfczM5MHhcXG4rX194bGF0ZWQoXFxcIjM6IHIxID0gKih1NjQgKikocjAgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIjQ6IHIyID0gKih1MzIgKikocjAgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIjU6IHcyID0gdzJcXFwiKVxcbitfX3hsYXRlZChcXFwiNjogcjMgPSAqKHUxNiAqKShyMCArMClcXFwiKVxcbitfX3hsYXRlZChcXFwiNzogdzMgPSB3M1xcXCIpXFxuK19feGxhdGVkKFxcXCI4OiByNCA9ICoodTggKikocjAgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIjk6IHc0ID0gdzRcXFwiKVxcbitfX25ha2VkIHZvaWQgcHJvYmVfbWVtKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gKih1NjQgKikocjAgKyAwKTtcXHQvKiBCUEZfUFJPQkVfTUVNICovXFx0XFxcXFxcbitcXHRyMiA9ICoodTMyICopKHIwICsgMCk7XFx0LyogQlBGX1BST0JFX01FTSAqL1xcdFxcXFxcXG4rXFx0cjMgPSAqKHUxNiAqKShyMCArIDApO1xcdC8qIEJQRl9QUk9CRV9NRU0gKi9cXHRcXFxcXFxuK1xcdHI0ID0gKih1OCAqKShyMCArIDApO1xcdC8qIEJQRl9QUk9CRV9NRU0gKi9cXHRcXFxcXFxuK1xcdHIwID0gcjE7XFx0XFx0LyogbWFrZSB0aGUgcmVnaXN0ZXJzIHVzZWQgKi8gXFxcXFxcbitcXHRyMCArPSByMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwICs9IHIzO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgKz0gcjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdClcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjUxOjMwLjEyOTI4MjQ3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3NDczMTY3MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNcIixcbiAgICBcImJwZl9pbnNuX2RlZjMyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzIG9yIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3N2ZlMjFhZDhlZWY3Njc4ZjhhNWVhYzA3MDQwY2NkOGRkM2I0YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDAwOjUxOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMuLjM5YjBkYjJhNGYxN2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTYyLDExICsxNjIsNiBAQCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gXHQgKiBwb2ludGluZyB0byBicGZfZnVuY19zdGF0ZS5cbiBcdCAqL1xuIFx0dTMyIGZyYW1lbm87XG4tXHQvKiBUcmFja3Mgc3VicmVnIGRlZmluaXRpb24uIFRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIGluc25faWR4IG9mIHRoZVxuLVx0ICogd3JpdGluZyBpbnNuLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBzdWJyZWdfZGVmIGlzIHVzZWQgYmVmb3JlIGFueSBpbnNuXG4tXHQgKiBwYXRjaGluZyB3aGljaCBvbmx5IGhhcHBlbnMgYWZ0ZXIgbWFpbiB2ZXJpZmljYXRpb24gZmluaXNoZWQuXG4tXHQgKi9cbi1cdHMzMiBzdWJyZWdfZGVmO1xuIFx0LyogaWYgKCFwcmVjaXNlIFx1MDAyNlx1MDAyNiBTQ0FMQVJfVkFMVUUpIG1pbi9tYXgvdG51bSBkb24ndCBhZmZlY3Qgc2FmZXR5ICovXG4gXHRib29sIHByZWNpc2U7XG4gfTtcbkBAIC0xNjMxLDcgKzE2MjYsNiBAQCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiIHtcbiB9O1xuIFxuIC8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgZml4dXBzLmMgKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiByZWdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpO1xuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKTtcbiB2b2lkIGJwZl9tYXJrX3N1YnByb2dfZXhjX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKTtcbiBib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5AQCAtMTY1NSw1ICsxNjQ5LDYgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuK2ludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIFxuICNlbmRpZiAvKiBfTElOVVhfQlBGX1ZFUklGSUVSX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOS4uN2M0NTk5ZTY1ZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiBcdFx0dmVyYm9zZShlbnYsIFwic3RhY2s9JXMgYmVmb3JlIFwiLCBlbnYtXHUwMDNldG1wX3N0cl9idWYpO1xuIFx0XHR2ZXJib3NlKGVudiwgXCIlZDogXCIsIGlkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbitcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlcmUgaXMgYSBoaXN0b3J5IHJlY29yZCB0aGF0IHNvbWUgcmVnaXN0ZXJzIGdhaW5lZCByYW5nZSBhdCB0aGlzIGluc24sXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNhc20uYyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbmluZGV4IDAzOTFiM2JjMDA3MzQuLjUwYjNjYTUxNDlhMGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jXG4rKysgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXG5AQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2JwZl9lbmRfaW5zbihicGZfaW5zbl9wcmludF90IHZlcmJvc2UsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAlcyVkIHIlZFxcblwiLFxuK1x0dmVyYm9zZShwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzJWQgciVkXCIsXG4gXHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1RPX0JFID8gXCJiZVwiIDogXCJsZVwiLFxuIFx0XHRpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfYnBmX2Jzd2FwX2luc24oYnBmX2luc25fcHJpbnRfdCB2ZXJib3NlLFxuIFx0XHRcdCAgICAgICB2b2lkICpwcml2YXRlX2RhdGEsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4tXHR2ZXJib3NlKHByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYnN3YXAlZCByJWRcXG5cIixcbitcdHZlcmJvc2UocHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBic3dhcCVkIHIlZFwiLFxuIFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0aW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gfVxuQEAgLTE5NywxOSArMTk3LDE5IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHByaW50X2JwZl9lbmRfaW5zbih2ZXJib3NlLCBjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTkVHKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlYyVkID0gLSVjJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVjJWQgPSAtJWMlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChpc19hZGRyX3NwYWNlX2Nhc3QoaW5zbikpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IGFkZHJfc3BhY2VfY2FzdChyJWQsICV1LCAldSlcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCAoKHUzMilpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDE2LCAodTE2KWluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9IFx1MDAyNih2b2lkIF9fcGVyY3B1ICopKHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2UgaWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlcyVjJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVjJWQgJXMgJXMlYyVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRpc19zZGl2X3Ntb2QoaW5zbikgPyBicGZfYWx1X3NpZ25fc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XVxuQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRcdGNsYXNzID09IEJQRl9BTFUgPyAndycgOiAncicsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgJWMlZCAlcyAlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBjbGFzcyA9PSBCUEZfQUxVID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0aXNfc2Rpdl9zbW9kKGluc24pID8gYnBmX2FsdV9zaWduX3N0cmluZ1tCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgNF1cbkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNKVxuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9IHIlZFwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0ZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0FERCB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfQU5EIHx8XG4gXHRcdFx0ICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfT1IgfHwgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1hPUikpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGxvY2sgKiglcyAqKShyJWQgJStkKSAlcyByJWRcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGxvY2sgKiglcyAqKShyJWQgJStkKSAlcyByJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsXG5AQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHxcbiBcdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYXRvbWljJXNfZmV0Y2hfJXMoKCVzICopKHIlZCAlK2QpLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc19mZXRjaF8lcygoJXMgKikociVkICUrZCksIHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcIjY0XCIgOiBcIlwiLFxuIFx0XHRcdFx0YnBmX2F0b21pY19hbHVfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWltbSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9IGF0b21pYyVzX2NtcHhjaGcoKCVzICopKHIlZCAlK2QpLCByMCwgciVkKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgcjAgPSBhdG9taWMlc19jbXB4Y2hnKCglcyAqKShyJWQgJStkKSwgcjAsIHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXID8gXCI2NFwiIDogXCJcIixcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbkBAIC0yNjIsNDQgKzI2Miw0NCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9YQ0hHKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBhdG9taWMlc194Y2hnKCglcyAqKShyJWQgJStkKSwgciVkKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gYXRvbWljJXNfeGNoZygoJXMgKikociVkICUrZCksIHIlZClcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0QlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcgPyBcIjY0XCIgOiBcIlwiLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlK2QpKVxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJStkKSlcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9TVE9SRV9SRUwpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlK2QpLCByJWQpXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBzdG9yZV9yZWxlYXNlKCglcyAqKShyJWQgJStkKSwgciVkKVwiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLFxuIFx0XHRcdFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHXyUwMnhcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHXyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1QpIHtcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9ICVkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGluc24tXHUwMDNlb2ZmLCBpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIG5vc3BlY1xcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbm9zcGVjXCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19zdF8lMDJ4XFxuXCIsIGluc24tXHUwMDNlY29kZSk7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19zdF8lMDJ4XCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGR4XyUwMnhcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiQlVHX2xkeF8lMDJ4XCIsIGluc24tXHUwMDNlY29kZSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcblwiLFxuK1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcIixcbiBcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG5AQCAtMzA3LDEyICszMDcsMTIgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkge1xuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gXHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByMCA9ICooJXMgKilza2JbciVkICsgJWRdXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gXHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlaW1tKTtcbkBAIC0zMzIsMTIgKzMzMiwxMiBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHRpZiAoaXNfcHRyIFx1MDAyNlx1MDAyNiAhYWxsb3dfcHRyX2xlYWtzKVxuIFx0XHRcdFx0aW1tID0gMDtcbiBcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIHIlZCA9ICVzXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAlc1wiLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0XHRfX2Z1bmNfaW1tX25hbWUoY2JzLCBpbnNuLCBpbW0sXG4gXHRcdFx0XHRcdFx0dG1wLCBzaXplb2YodG1wKSkpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGRfJTAyeFxcblwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCJCVUdfbGRfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfSk1QMzIgfHwgY2xhc3MgPT0gQlBGX0pNUCkge1xuQEAgLTM0NywzNSArMzQ3LDM1IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdGNoYXIgdG1wWzY0XTtcbiBcbiBcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkge1xuLVx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsIHBjJXNcXG5cIixcbitcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgY2FsbCBwYyVzXCIsXG4gXHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiBcdFx0XHRcdFx0X19mdW5jX2dldF9uYW1lKGNicywgaW5zbixcbiBcdFx0XHRcdFx0XHRcdHRtcCwgc2l6ZW9mKHRtcCkpKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0c3RyY3B5KHRtcCwgXCJ1bmtub3duXCIpO1xuLVx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBjYWxsICVzIyVkXFxuXCIsIGluc24tXHUwMDNlY29kZSxcbitcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgY2FsbCAlcyMlZFwiLCBpbnNuLVx1MDAzZWNvZGUsXG4gXHRcdFx0XHRcdF9fZnVuY19nZXRfbmFtZShjYnMsIGluc24sXG4gXHRcdFx0XHRcdFx0XHR0bXAsIHNpemVvZih0bXApKSxcbiBcdFx0XHRcdFx0aW5zbi1cdTAwM2VpbW0pO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEpKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RvIHBjJStkXFxuXCIsXG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBnb3RvIHBjJStkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG94IHIlZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b3ggciVkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfSk1QIHwgQlBGX0pDT05EKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPKSB7XG4tXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSBtYXlfZ290byBwYyUrZFxcblwiLFxuK1x0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgbWF5X2dvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUDMyIHwgQlBGX0pBKSkge1xuLVx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCIoJTAyeCkgZ290b2wgcGMlK2RcXG5cIixcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGdvdG9sIHBjJStkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpIHtcbi1cdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGV4aXRcXG5cIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpIGV4aXRcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsXG4tXHRcdFx0XHRcIiglMDJ4KSBpZiAlYyVkICVzICVjJWQgZ290byBwYyUrZFxcblwiLFxuK1x0XHRcdFx0XCIoJTAyeCkgaWYgJWMlZCAlcyAlYyVkIGdvdG8gcGMlK2RcIixcbiBcdFx0XHRcdGluc24tXHUwMDNlY29kZSwgY2xhc3MgPT0gQlBGX0pNUDMyID8gJ3cnIDogJ3InLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdFx0YnBmX2ptcF9zdHJpbmdbQlBGX09QKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDRdLFxuQEAgLTM4MywxNCArMzgzLDE0IEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxuIFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLFxuLVx0XHRcdFx0XCIoJTAyeCkgaWYgJWMlZCAlcyAweCV4IGdvdG8gcGMlK2RcXG5cIixcbitcdFx0XHRcdFwiKCUwMngpIGlmICVjJWQgJXMgMHgleCBnb3RvIHBjJStkXCIsXG4gXHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGNsYXNzID09IEJQRl9KTVAzMiA/ICd3JyA6ICdyJyxcbiBcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyxcbiBcdFx0XHRcdGJwZl9qbXBfc3RyaW5nW0JQRl9PUChpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSA0XSxcbiBcdFx0XHRcdCh1MzIpaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSAlc1xcblwiLFxuK1x0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwiKCUwMngpICVzXCIsXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBicGZfY2xhc3Nfc3RyaW5nW2NsYXNzXSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi43YjM1MTBkNDZiMzc3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTQ0LDE1ICs0NCw2MSBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdH1cbiB9XG4gXG4tLyogUmV0dXJuIFRSVUUgaWYgSU5TTiBoYXMgZGVmaW5lZCBhbnkgMzItYml0IHZhbHVlIGV4cGxpY2l0bHkuICovXG4tc3RhdGljIGJvb2wgaW5zbl9oYXNfZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuKy8qXG4rICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcdTAwM2U9IDAuXG4rICogUmV0dXJucyBUUlVFIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlcyBvbiA2NC1iaXQsXG4rICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cbisgKi9cbitzdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbi1cdGludCBkc3RfcmVnID0gaW5zbl9kZWZfcmVnbm8oaW5zbik7XG4rXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuK1x0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG4rXHR1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4rXHRib29sIG1vZGVfbWVtO1xuK1xuK1x0Lyogc3VicmVnaXN0ZXIgZW5kaW5lc3Mgc3dhcCAqL1xuK1x0aWYgKChjbGFzcyA9PSBCUEZfQUxVIHx8IGNsYXNzID09IEJQRl9BTFU2NCkgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9FTkQgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tICE9IDY0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiB3MCArPSAxICovXG4rXHRpZiAoY2xhc3MgPT0gQlBGX0FMVSBcdTAwMjZcdTAwMjYgb3AgIT0gQlBGX0VORClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApLCBQVFJfVE9fQVJFTkEgaXMgMzItYml0ICovXG4rXHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGluc24tXHUwMDNlb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IDEpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIG5vbiA2NC1iaXQsIG5vbiBzaWduZWQgZXh0ZW5kZWQgbG9hZHMgKi9cbitcdG1vZGVfbWVtID0gbW9kZSA9PSBCUEZfTUVNIHx8IG1vZGUgPT0gQlBGX1BST0JFX01FTSB8fCBtb2RlID09IEJQRl9QUk9CRV9NRU0zMjtcbitcdGlmIChjbGFzcyA9PSBCUEZfTERYIFx1MDAyNlx1MDAyNiBtb2RlX21lbSBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIGF0b21pY3MsIHNlZSBpbnNuX2RlZl9yZWdubygpICovXG4rXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChkc3RfcmVnID09IC0xKVxuK1x0LyogYm90aCBMRF9JTkQgYW5kIExEX0FCUyByZXR1cm4gMzItYml0IGRhdGEuICovXG4rXHRpZiAoY2xhc3MgPT0gQlBGX0xEIFx1MDAyNlx1MDAyNiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiAhYnBmX2lzX3JlZzY0KGluc24sIGRzdF9yZWcsIE5VTEwsIERTVF9PUCk7XG4rXHQvKiBDb25zZXJ2YXRpdmVseSByZXR1cm4gdHJ1ZSBhdCBkZWZhdWx0LiAqL1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJuIHRoZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5lZCBieSBJTlNOLCBvciAtMSBpZiBJTlNOIGRvZXMgbm90XG4rICogZXhwbGljaXRseSBkZWZpbmUgYSAzMi1iaXQgdmFsdWUuXG4rICovXG4raW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xuK1xuK1x0aWYgKGRzdF9yZWcgXHUwMDNjIDAgfHwgYnBmX2lzX3JlZzY0KGluc24pKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gZHN0X3JlZztcbiB9XG4gXG4gc3RhdGljIGludCBrZnVuY19kZXNjX2NtcF9ieV9pbW1fb2ZmKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5AQCAtMTY5LDcgKzIxNSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKiAoY250ID09IDEpIGlzIHRha2VuIG9yIG5vdC4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIElOU04gYXQgT0ZGIGlzIHRoZVxuIFx0ICogb3JpZ2luYWwgaW5zbiBhdCBvbGQgcHJvZy5cbiBcdCAqL1xuLVx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpO1xuK1x0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpIFx1MDAzZT0gMDtcbiBcbiBcdGlmIChjbnQgPT0gMSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE4MSw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpID0gb2ZmOyBpIFx1MDAzYyBvZmYgKyBjbnQgLSAxOyBpKyspIHtcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0ncyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqL1xuIFx0XHRkYXRhW2ldLnNlZW4gPSBvbGRfc2Vlbjtcbi1cdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBpKTtcbitcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKGluc24gKyBpKSBcdTAwM2U9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTYxNiwxMSArNjYyLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGlmIChsb2FkX3JlZyA9PSAtMSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qIE5PVEU6IGFyZyBcInJlZ1wiICh0aGUgZm91cnRoIG9uZSkgaXMgb25seSB1c2VkIGZvclxuLVx0XHRcdCAqICAgICAgIEJQRl9TVFggKyBTUkNfT1AsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyBOVUxMXG4tXHRcdFx0ICogICAgICAgaGVyZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoYnBmX2lzX3JlZzY0KFx1MDAyNmluc24sIGxvYWRfcmVnLCBOVUxMLCBEU1RfT1ApKSB7XG4rXHRcdFx0aWYgKGJwZl9pc19yZWc2NChcdTAwMjZpbnNuKSkge1xuIFx0XHRcdFx0aWYgKGNsYXNzID09IEJQRl9MRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICBCUEZfTU9ERShjb2RlKSA9PSBCUEZfSU1NKVxuIFx0XHRcdFx0XHRpKys7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5pbmRleCAwYWFkZmJhZTBhY2M1Li43ODM1MWU0YTZmMjVmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXG4rKysgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbkBAIC00OTcsNyArNDk3LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmlcbiBcdFx0cG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR2ZXJib3NlKGVudiwgXCIlM2Q6IFwiLCBpbnNuX2lkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpbnNuX2lkeF0pO1xuLVx0XHRicGZfdmxvZ19yZXNldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBlbnYtXHUwMDNlbG9nLmVuZF9wb3MgLSAxKTsgLyogcmVtb3ZlIFxcbiAqL1xuIFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbiBcdFx0dmVyYm9zZShlbnYsIFwiJSpjO1wiLCBicGZfdmxvZ19hbGlnbm1lbnQoaW5zbl9wb3MgLSBwb3MpLCAnICcpO1xuIFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG5AQCAtMTA0Myw3ICsxMDQyLDYgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGlcbiBcdFx0aWYgKCFwcmludGVkKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiJTNkOiBcIiwgaWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4tXHRcdFx0YnBmX3Zsb2dfcmVzZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gMSk7XG4gXHRcdFx0cHJpbnRlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0dmVyYm9zZShlbnYsIFwiXFx0ciVkOiBcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfaW5baV0pO1xuQEAgLTEwNTgsNyArMTA1Niw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdHNhJWQ6IFwiLCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pblthaV0pO1xuQEAgLTEwNzAsNyArMTA2Nyw2IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpXG4gXHRcdGlmICghcHJpbnRlZCkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xuLVx0XHRcdGJwZl92bG9nX3Jlc2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIGVudi1cdTAwM2Vsb2cuZW5kX3BvcyAtIDEpO1xuIFx0XHRcdHByaW50ZWQgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHZlcmJvc2UoZW52LCBcIlxcdGZwJStkOiBcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXSk7XG5AQCAtMTU0NSw2ICsxNTQxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdHZlcmJvc2UoZW52LCBcIiUzZDogXCIsIGlkeCk7XG4gXHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpZHhdKTtcbitcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFxuIFx0XHQvKiBDb2xsZWN0IHdoYXQgbmVlZHMgcHJpbnRpbmcgKi9cbiBcdFx0aWYgKGlzX2xkeF9zdHhfY2FsbCBcdTAwMjZcdTAwMjZcbkBAIC0yMDUwLDI5ICsyMDQ3LDM4IEBAIGludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiAvKiBFYWNoIGZpZWxkIGlzIGEgcmVnaXN0ZXIgYml0bWFzayAqL1xuIHN0cnVjdCBpbnNuX2xpdmVfcmVncyB7XG4tXHR1MTYgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbi1cdHUxNiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuLVx0dTE2IGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4tXHR1MTYgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4rXHR1MzIgdXNlO1x0LyogcmVnaXN0ZXJzIHJlYWQgYnkgaW5zdHJ1Y3Rpb24gKi9cbitcdHUzMiBkZWY7XHQvKiByZWdpc3RlcnMgd3JpdHRlbiBieSBpbnN0cnVjdGlvbiAqL1xuK1x0dTMyIGluO1x0XHQvKiByZWdpc3RlcnMgdGhhdCBtYXkgYmUgYWxpdmUgYmVmb3JlIGluc3RydWN0aW9uICovXG4rXHR1MzIgb3V0O1x0LyogcmVnaXN0ZXJzIHRoYXQgbWF5IGJlIGFsaXZlIGFmdGVyIGluc3RydWN0aW9uICovXG4gfTtcbiBcbiAvKiBCaXRtYXNrIHdpdGggMXMgZm9yIGFsbCBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBTExfQ0FMTEVSX1NBVkVEX1JFR1MgKCgxdSBcdTAwM2NcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1MpIC0gMSlcbiBcbitzdGF0aWMgaW5saW5lIHUzMiByZWczMl9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobik7IH1cbitzdGF0aWMgaW5saW5lIHUzMiByZWc2NF9tYXNrKHUzMiBuKSB7IHJldHVybiBCSVQobikgfCBCSVQobiArIDE2KTsgfVxuK3N0YXRpYyBpbmxpbmUgdTMyIG1hc2tfd2lkZW4odTMyIG0pIHsgcmV0dXJuIG0gfCAobSBcdTAwM2NcdTAwM2MgMTYpOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19sbyh1MzIgbSkgeyByZXR1cm4gKHUxNiltOyB9XG4rc3RhdGljIGlubGluZSB1MTYgbWFza19oaSh1MzIgbSkgeyByZXR1cm4gKHUxNikobSBcdTAwM2VcdTAwM2UgMTYpOyB9XG4rXG4gLyogQ29tcHV0ZSBpbmZvLVx1MDAzZXt1c2UsZGVmfSBmaWVsZHMgZm9yIHRoZSBpbnN0cnVjdGlvbiAqL1xuIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdCAgIHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgYnBmX2NhbGxfc3VtbWFyeSBjcztcbi1cdHU4IGNsYXNzID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSk7XG4tXHR1OCBjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4tXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbi1cdHUxNiBzcmMgPSBCSVQoaW5zbi1cdTAwM2VzcmNfcmVnKTtcbi1cdHUxNiBkc3QgPSBCSVQoaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbi1cdHUxNiByMCAgPSBCSVQoMCk7XG4tXHR1MTYgZGVmID0gMDtcbi1cdHUxNiB1c2UgPSAweGZmZmY7XG4rXHRjb25zdCB1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xuK1x0Y29uc3QgdTggY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuK1x0Y29uc3QgdTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG4rXHRjb25zdCB1OCBzaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdGNvbnN0IHUzMiBzcmMgPSByZWc2NF9tYXNrKGluc24tXHUwMDNlc3JjX3JlZyk7XG4rXHRjb25zdCB1MzIgZHN0ID0gcmVnNjRfbWFzayhpbnNuLVx1MDAzZWRzdF9yZWcpO1xuK1x0Y29uc3QgdTMyIHNyYzMyID0gbWFza19sbyhzcmMpO1xuK1x0Y29uc3QgdTMyIGRzdDMyID0gbWFza19sbyhkc3QpO1xuK1x0Y29uc3QgdTMyIHIwICA9IHJlZzY0X21hc2soMCk7XG4rXHR1MzIgZGVmID0gMDtcbitcdHUzMiB1c2UgPSBVMzJfTUFYO1xuIFxuIFx0c3dpdGNoIChjbGFzcykge1xuIFx0Y2FzZSBCUEZfTEQ6XG5AQCAtMjA4Myw4ICsyMDg5LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0dXNlID0gMDtcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0xEIHwgQlBGX0FCUzpcbi1cdFx0Y2FzZSBCUEZfTEQgfCBCUEZfSU5EOlxuK1x0XHRjYXNlIEJQRl9BQlM6XG4rXHRcdGNhc2UgQlBGX0lORDpcbiBcdFx0XHQvKiBzdGljayB3aXRoIGRlZmF1bHRzICovXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yMDkyLDcgKzIwOTgsMTUgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Y2FzZSBCUEZfTERYOlxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBCUEZfTUVNOlxuK1x0XHRcdC8qIGEgbmFycm93IGxvYWQgc3RpbGwgcmVkZWZpbmVzIHRoZSB3aG9sZSByZWdpc3RlciAqL1xuK1x0XHRcdGRlZiA9IGRzdDtcbitcdFx0XHR1c2UgPSBzcmM7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX01FTVNYOlxuK1x0XHRcdC8qXG4rXHRcdFx0ICogc2lnbiBleHRlbnNpb24gZGVmaW5lcyB0aGUgd2hvbGUgcmVnaXN0ZXI7XG4rXHRcdFx0ICogc3JjIGhvbGRzIGEgcG9pbnRlciwgaGVuY2UgaXMgdXNlZCBhcyA2NC1iaXQuXG4rXHRcdFx0ICovXG4gXHRcdFx0ZGVmID0gZHN0O1xuIFx0XHRcdHVzZSA9IHNyYztcbiBcdFx0XHRicmVhaztcbkBAIC0yMTEwLDEyICsyMTI0LDE5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0c3dpdGNoIChtb2RlKSB7XG4gXHRcdGNhc2UgQlBGX01FTTpcbiBcdFx0XHRkZWYgPSAwO1xuLVx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbitcdFx0XHR1c2UgPSBkc3QgfCAoc2l6ZSA9PSBCUEZfRFcgPyBzcmMgOiBzcmMzMik7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0FUT01JQzpcbitcdFx0Y2FzZSBCUEZfQVRPTUlDOiB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBkc3QgaG9sZHMgYSBwb2ludGVyIGFuZCBpcyBhbHdheXMgdXNlZCBhcyA2NC1iaXQ7XG4rXHRcdFx0ICogdGhlIHZhbHVlIG9wZXJhbmQgYW5kIHIwIGFyZSByZWFkIGFzIDMyLWJpdCBmb3IgQlBGX1cgYXRvbWljcy5cbitcdFx0XHQgKi9cbitcdFx0XHR1MzIgc3JjdiA9IHNpemUgPT0gQlBGX0RXID8gc3JjIDogc3JjMzI7XG4rXHRcdFx0dTMyIHIwdiAgPSBzaXplID09IEJQRl9EVyA/IHIwIDogbWFza19sbyhyMCk7XG4rXG4gXHRcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWltbSkge1xuIFx0XHRcdGNhc2UgQlBGX0NNUFhDSEc6XG4tXHRcdFx0XHR1c2UgPSByMCB8IGRzdCB8IHNyYztcbitcdFx0XHRcdHVzZSA9IHIwdiB8IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRkZWYgPSByMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgQlBGX0xPQURfQUNROlxuQEAgLTIxMjQsMTAgKzIxNDUsMTAgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBCUEZfU1RPUkVfUkVMOlxuIFx0XHRcdFx0ZGVmID0gMDtcbi1cdFx0XHRcdHVzZSA9IGRzdCB8IHNyYztcbitcdFx0XHRcdHVzZSA9IGRzdCB8IHNyY3Y7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRkZWZhdWx0OlxuLVx0XHRcdFx0dXNlID0gZHN0IHwgc3JjO1xuK1x0XHRcdFx0dXNlID0gZHN0IHwgc3JjdjtcbiBcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuIFx0XHRcdFx0XHRkZWYgPSBzcmM7XG4gXHRcdFx0XHRlbHNlXG5AQCAtMjEzNSw2ICsyMTU2LDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9pbnNuX2xpdmVfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfQUxVOlxuIFx0Y2FzZSBCUEZfQUxVNjQ6XG5AQCAtMjE0OCwxNCArMjE3MCwxNCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbiBcdFx0XHRcdHVzZSA9IDA7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0dXNlID0gc3JjO1xuK1x0XHRcdFx0dXNlID0gY2xhc3MgPT0gQlBGX0FMVTY0ID8gc3JjIDogc3JjMzI7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0ZGVmID0gZHN0O1xuIFx0XHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0spXG4tXHRcdFx0XHR1c2UgPSBkc3Q7XG4rXHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyBkc3QgOiBkc3QzMjtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0XHR1c2UgPSBjbGFzcyA9PSBCUEZfQUxVNjQgPyAoZHN0IHwgc3JjKSA6IChkc3QzMiB8IHNyYzMyKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0pNUDpcbkBAIC0yMTgxLDEzICsyMjAzLDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHR1c2UgPSBkZWYgXHUwMDI2IH5CSVQoQlBGX1JFR18wKTtcbiBcdFx0XHRpZiAoYnBmX2dldF9jYWxsX3N1bW1hcnkoZW52LCBpbnNuLCBcdTAwMjZjcykpXG4gXHRcdFx0XHR1c2UgPSBHRU5NQVNLKG1pbl90KHU4LCBjcy5udW1fcGFyYW1zLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpLCAxKTtcbitcdFx0XHRkZWYgPSBtYXNrX3dpZGVuKGRlZik7XG4rXHRcdFx0dXNlID0gbWFza193aWRlbih1c2UpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGRlZiA9IDA7XG4tXHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSylcbi1cdFx0XHRcdHVzZSA9IGRzdDtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHR1c2UgPSBkc3QgfCBzcmM7XG4rXHRcdFx0dXNlID0gY2xhc3MgPT0gQlBGX0pNUCA/IGRzdCA6IGRzdDMyO1xuK1x0XHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpXG4rXHRcdFx0XHR1c2UgfD0gY2xhc3MgPT0gQlBGX0pNUCA/IHNyYyA6IHNyYzMyO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTIyMDksNiArMjIzMiw3IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbiBcdHN0cnVjdCBpbnNuX2xpdmVfcmVncyAqc3RhdGU7XG4gXHRpbnQgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4rXHR1NjQgcG9zLCBpbnNuX3BvcztcbiBcdGludCBlcnIgPSAwLCBpLCBqO1xuIFx0Ym9vbCBjaGFuZ2VkO1xuIFxuQEAgLTIyNTIsOCArMjI3Niw4IEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGludCBpbnNuX2lkeCA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbaV07XG4gXHRcdFx0c3RydWN0IGluc25fbGl2ZV9yZWdzICpsaXZlID0gXHUwMDI2c3RhdGVbaW5zbl9pZHhdO1xuIFx0XHRcdHN0cnVjdCBicGZfaWFycmF5ICpzdWNjO1xuLVx0XHRcdHUxNiBuZXdfb3V0ID0gMDtcbi1cdFx0XHR1MTYgbmV3X2luID0gMDtcbitcdFx0XHR1MzIgbmV3X291dCA9IDA7XG4rXHRcdFx0dTMyIG5ld19pbiA9IDA7XG4gXG4gXHRcdFx0c3VjYyA9IGJwZl9pbnNuX3N1Y2Nlc3NvcnMoZW52LCBpbnNuX2lkeCk7XG4gXHRcdFx0Zm9yIChpbnQgcyA9IDA7IHMgXHUwMDNjIHN1Y2MtXHUwMDNlY250OyArK3MpXG5AQCAtMjI2Nyw4ICsyMjkxLDIwIEBAIGludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgKytpKVxuLVx0XHRpbnNuX2F1eFtpXS5saXZlX3JlZ3NfYmVmb3JlID0gc3RhdGVbaV0uaW47XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgKytpKSB7XG4rXHRcdGludCBkZWYzMiA9IGJwZl9pbnNuX2RlZjMyKFx1MDAyNmluc25zW2ldKTtcbitcdFx0dTMyIG91dCA9IHN0YXRlW2ldLm91dDtcbitcdFx0dTMyIGluID0gc3RhdGVbaV0uaW47XG4rXG4rXHRcdGluc25fYXV4W2ldLmxpdmVfcmVnc19iZWZvcmUgPSBtYXNrX2xvKGluKSB8IG1hc2tfaGkoaW4pO1xuK1x0XHQvKlxuK1x0XHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIDMyLWJpdCBvcGVyYXRpb25zIGRvIG5vdCByZXNldCB1cHBlciBoYWx2ZXNcbitcdFx0ICogb2YgdGhlIHJlZ2lzdGVycywgdGhlIHZlcmlmaWVyIG5lZWRzIHRvIHplcm8gZXh0ZW5kIGEgZGVzdGluYXRpb25cbitcdFx0ICogcmVnaXN0ZXIgaWYgYW4gaW5zdHJ1Y3Rpb24gZGVmaW5lcyBhIDMyLWJpdCBzdWJyZWdpc3RlciBhbmQgdGhlXG4rXHRcdCAqIHVwcGVyIGhhbGYgb2YgdGhhdCByZWdpc3RlciBpcyBhbGl2ZSBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuK1x0XHRpbnNuX2F1eFtpXS56ZXh0X2RzdCA9IGRlZjMyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgKG1hc2tfaGkob3V0KSBcdTAwMjYgQklUKGRlZjMyKSk7XG4rXHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTDIpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwiTGl2ZSByZWdzIGJlZm9yZSBpbnNuOlxcblwiKTtcbkBAIC0yMjg0LDcgKzIzMjAsMTIgQEAgaW50IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRlbHNlXG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIi5cIik7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiIFwiKTtcbitcdFx0XHRwb3MgPSBlbnYtXHUwMDNlbG9nLmVuZF9wb3M7XG4gXHRcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2ldKTtcbitcdFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3BvcztcbitcdFx0XHRpZiAoaW5zbl9hdXhbaV0uemV4dF9kc3QpXG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlKmM7IHpleHRcIiwgYnBmX3Zsb2dfYWxpZ25tZW50KGluc25fcG9zIC0gcG9zKSwgJyAnKTtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJcXG5cIik7XG4gXHRcdFx0aWYgKGJwZl9pc19sZGltbTY0KFx1MDAyNmluc25zW2ldKSlcbiBcdFx0XHRcdGkrKztcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTZmMzVmNGU3MTViNi4uNDVkNGMwYTAwYTVkYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjEyOSwxMiArMjEyOSw5IEBAIHN0YXRpYyBpbnQgcmVnX2JvdW5kc19zYW5pdHlfY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiAvKiBNYXJrIGEgcmVnaXN0ZXIgYXMgaGF2aW5nIGEgY29tcGxldGVseSB1bmtub3duIChzY2FsYXIpIHZhbHVlLiAqL1xuIHZvaWQgYnBmX21hcmtfcmVnX3Vua25vd25faW1wcmVjaXNlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4ge1xuLVx0czMyIHN1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbi1cbiBcdG1lbXNldChyZWcsIDAsIHNpemVvZigqcmVnKSk7XG4gXHRyZWctXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcbiBcdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV91bmtub3duO1xuLVx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBzdWJyZWdfZGVmO1xuIFx0X19tYXJrX3JlZ191bmJvdW5kZWQocmVnKTtcbiB9XG4gXG5AQCAtMjIxMCw3ICsyMjA3LDYgQEAgc3RhdGljIGludCBtYXJrX2J0Zl9sZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBERUZfTk9UX1NVQlJFR1x0KDApXG4gc3RhdGljIHZvaWQgaW5pdF9yZWdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKVxuIHtcbkBAIC0yMjE5LDcgKzIyMTUsNiBAQCBzdGF0aWMgdm9pZCBpbml0X3JlZ19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9SRUc7IGkrKykge1xuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2ldKTtcbi1cdFx0cmVnc1tpXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHR9XG4gXG4gXHQvKiBmcmFtZSBwb2ludGVyICovXG5AQCAtMzAzMiwxMjAgKzMwMjcsMTQgQEAgc3RhdGljIHZvaWQgbWFya19zdGFja19zbG90c19zY3JhdGNoZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xuIH1cbiBcbi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYnkgdGhlIGZvbGxvd2luZyAzMi1iaXQgb3B0aW1pemF0aW9uXG4tICogY29kZSBvbmx5LiBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiByZWdpc3RlciBvcGVyYXRlc1xuLSAqIG9uIDY0LWJpdCwgb3RoZXJ3aXNlIHJldHVybiBGQUxTRS5cbi0gKi9cbi1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tXHQgICAgICB1MzIgcmVnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuLXtcbi1cdHU4IGNvZGUsIGNsYXNzLCBvcDtcbi1cbi1cdGNvZGUgPSBpbnNuLVx1MDAzZWNvZGU7XG4tXHRjbGFzcyA9IEJQRl9DTEFTUyhjb2RlKTtcbi1cdG9wID0gQlBGX09QKGNvZGUpO1xuLVx0aWYgKGNsYXNzID09IEJQRl9KTVApIHtcbi1cdFx0LyogQlBGX0VYSVQgZm9yIFwibWFpblwiIHdpbGwgcmVhY2ggaGVyZS4gUmV0dXJuIFRSVUVcbi1cdFx0ICogY29uc2VydmF0aXZlbHkuXG4tXHRcdCAqL1xuLVx0XHRpZiAob3AgPT0gQlBGX0VYSVQpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChvcCA9PSBCUEZfQ0FMTCkge1xuLVx0XHRcdC8qIEJQRiB0byBCUEYgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBtYXJraW5nXG4tXHRcdFx0ICogY2FsbGVyIHNhdmVkIGNsb2JiZXIgd2l0aCBEU1RfT1BfTk9fTUFSSyBmb3Igd2hpY2ggd2Vcbi1cdFx0XHQgKiBkb24ndCBjYXJlIHRoZSByZWdpc3RlciBkZWYgYmVjYXVzZSB0aGV5IGFyZSBhbnl3YXlcbi1cdFx0XHQgKiBtYXJrZWQgYXMgTk9UX0lOSVQgYWxyZWFkeS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHQvKiBIZWxwZXIgY2FsbCB3aWxsIHJlYWNoIGhlcmUgYmVjYXVzZSBvZiBhcmcgdHlwZVxuLVx0XHRcdCAqIGNoZWNrLCBjb25zZXJ2YXRpdmVseSByZXR1cm4gVFJVRS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAodCA9PSBTUkNfT1ApXG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9FTkQgXHUwMDI2XHUwMDI2IChpbnNuLVx1MDAzZWltbSA9PSAxNiB8fCBpbnNuLVx1MDAzZWltbSA9PSAzMikpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgfHwgY2xhc3MgPT0gQlBGX0pNUCB8fFxuLVx0ICAgIChjbGFzcyA9PSBCUEZfQUxVIFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfRU5EIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSA2NCkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9BTFUgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuLVx0XHRpZiAodCAhPSBTUkNfT1ApXG4tXHRcdFx0cmV0dXJuIEJQRl9TSVpFKGNvZGUpID09IEJQRl9EVyB8fCBCUEZfTU9ERShjb2RlKSA9PSBCUEZfTUVNU1g7XG4tXHRcdC8qIExEWCBzb3VyY2UgbXVzdCBiZSBwdHIuICovXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuLVx0aWYgKGNsYXNzID09IEJQRl9TVFgpIHtcbi1cdFx0LyogQlBGX1NUWCAoaW5jbHVkaW5nIGF0b21pYyB2YXJpYW50cykgaGFzIG9uZSBvciBtb3JlIHNvdXJjZVxuLVx0XHQgKiBvcGVyYW5kcywgb25lIG9mIHdoaWNoIGlzIGEgcHRyLiBDaGVjayB3aGV0aGVyIHRoZSBjYWxsZXIgaXNcbi1cdFx0ICogYXNraW5nIGFib3V0IGl0LlxuLVx0XHQgKi9cbi1cdFx0aWYgKHQgPT0gU1JDX09QIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdHJldHVybiBCUEZfU0laRShjb2RlKSA9PSBCUEZfRFc7XG4tXHR9XG4tXG4tXHRpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4tXHRcdHU4IG1vZGUgPSBCUEZfTU9ERShjb2RlKTtcbi1cbi1cdFx0LyogTERfSU1NNjQgKi9cbi1cdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdFx0LyogQm90aCBMRF9JTkQgYW5kIExEX0FCUyByZXR1cm4gMzItYml0IGRhdGEuICovXG4tXHRcdGlmICh0ICE9IFNSQ19PUClcbi1cdFx0XHRyZXR1cm4gIGZhbHNlO1xuLVxuLVx0XHQvKiBJbXBsaWNpdCBjdHggcHRyLiAqL1xuLVx0XHRpZiAocmVnbm8gPT0gQlBGX1JFR182KVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVxuLVx0XHQvKiBFeHBsaWNpdCBzb3VyY2UgY291bGQgYmUgYW55IHdpZHRoLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbi1cdGlmIChjbGFzcyA9PSBCUEZfU1QpXG4tXHRcdC8qIFRoZSBvbmx5IHNvdXJjZSByZWdpc3RlciBmb3IgQlBGX1NUIGlzIGEgcHRyLiAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cbi1cdC8qIENvbnNlcnZhdGl2ZWx5IHJldHVybiB0cnVlIGF0IGRlZmF1bHQuICovXG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWFya19pbnNuX3pleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLXtcbi1cdHMzMiBkZWZfaWR4ID0gcmVnLVx1MDAzZXN1YnJlZ19kZWY7XG4tXG4tXHRpZiAoZGVmX2lkeCA9PSBERUZfTk9UX1NVQlJFRylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbZGVmX2lkeCAtIDFdLnpleHRfZHN0ID0gdHJ1ZTtcbi1cdC8qIFRoZSBkc3Qgd2lsbCBiZSB6ZXJvIGV4dGVuZGVkLCBzbyB3b24ndCBiZSBzdWItcmVnaXN0ZXIgYW55bW9yZS4gKi9cbi1cdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4tfVxuLVxuIHN0YXRpYyBpbnQgX19jaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgcmVnbm8sXG4gXHRcdFx0ICAgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXG4ge1xuLVx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpICsgZW52LVx1MDAzZWluc25faWR4O1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbi1cdGJvb2wgcnc2NDtcbiBcbiBcdG1hcmtfcmVnX3NjcmF0Y2hlZChlbnYsIHJlZ25vKTtcbiBcbiBcdHJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVx0cnc2NCA9IGJwZl9pc19yZWc2NChpbnNuLCByZWdubywgcmVnLCB0KTtcbiBcdGlmICh0ID09IFNSQ19PUCkge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgc291cmNlIG9wZXJhbmQgY2FuIGJlIHJlYWQgKi9cbiBcdFx0aWYgKHJlZy1cdTAwM2V0eXBlID09IE5PVF9JTklUKSB7XG5AQCAtMzE1Niw5ICszMDQ1LDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcbiBcdFx0aWYgKHJlZ25vID09IEJQRl9SRUdfRlApXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdGlmIChydzY0KVxuLVx0XHRcdG1hcmtfaW5zbl96ZXh0KGVudiwgcmVnKTtcbi1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBjaGVjayB3aGV0aGVyIHJlZ2lzdGVyIHVzZWQgYXMgZGVzdCBvcGVyYW5kIGNhbiBiZSB3cml0dGVuIHRvICovXG5AQCAtMzE2Niw3ICszMDUyLDYgQEAgc3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJmcmFtZSBwb2ludGVyIGlzIHJlYWQgb25seVxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuLVx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHJ3NjQgPyBERUZfTk9UX1NVQlJFRyA6IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4gXHRcdGlmICh0ID09IERTVF9PUClcbiBcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmVnbm8pO1xuIFx0fVxuQEAgLTM4MjIsMTEgKzM3MDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdFx0aWYgKHNpemUgXHUwMDNjPSBzcGlsbF9zaXplIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBicGZfc3RhY2tfbmFycm93X2FjY2Vzc19vayhvZmYsIHNpemUsIHNwaWxsX3NpemUpKSB7XG4tXHRcdFx0XHQvKiBUaGUgZWFybGllciBjaGVja19yZWdfYXJnKCkgaGFzIGRlY2lkZWQgdGhlXG4tXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzMzIgc3VicmVnX2RlZiA9IHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXS5zdWJyZWdfZGVmO1xuLVxuIFx0XHRcdFx0aWYgKGVudi1cdTAwM2VicGZfY2FwYWJsZSBcdTAwMjZcdTAwMjYgc2l6ZSA9PSA0IFx1MDAyNlx1MDAyNiBzcGlsbF9zaXplID09IDQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzYz0gMzIpXG4gXHRcdFx0XHRcdC8qIEVuc3VyZSBzdGFjayBzbG90IGhhcyBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uXG5AQCAtMzgzNCw3ICszNzE0LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0XHQgKi9cbiBcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbiBcdFx0XHRcdHN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSA9ICpyZWc7XG4tXHRcdFx0XHRzdGF0ZS1cdTAwM2VyZWdzW2RzdF9yZWdub10uc3VicmVnX2RlZiA9IHN1YnJlZ19kZWY7XG4gXG4gXHRcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgZmlsbC5cbiBcdFx0XHRcdCAqIGNvZXJjZV9yZWdfdG9fc2l6ZSB3aWxsIGFkanVzdCB0aGUgYm91bmRhcmllcy5cbkBAIC02MjcxLDEyICs2MTUwLDYgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsXG4gXHRcdFx0XHRcdFx0ICAgIHZhbHVlX3JlZ25vKTtcbi1cdFx0XHRcdC8qIEEgbG9hZCBvZiBjdHggZmllbGQgY291bGQgaGF2ZSBkaWZmZXJlbnRcbi1cdFx0XHRcdCAqIGFjdHVhbCBsb2FkIHNpemUgd2l0aCB0aGUgb25lIGVuY29kZWQgaW4gdGhlXG4tXHRcdFx0XHQgKiBpbnNuLiBXaGVuIHRoZSBkc3QgaXMgUFRSLCBpdCBpcyBmb3Igc3VyZSBub3Rcbi1cdFx0XHRcdCAqIGEgc3ViLXJlZ2lzdGVyLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5zdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdFx0XHRpZiAoYmFzZV90eXBlKGluZm8ucmVnX3R5cGUpID09IFBUUl9UT19CVEZfSUQpIHtcbiBcdFx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10uYnRmID0gaW5mby5idGY7XG4gXHRcdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dLmJ0Zl9pZCA9IGluZm8uYnRmX2lkO1xuQEAgLTczODAsMTAgKzcyNTMsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0XHRcdGlmIChzcGkgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gc3BpO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG4tXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi1cdFx0XHQgKi9cbiBcdFx0XHRtYXJrX3N0YWNrX3Nsb3RzX3NjcmF0Y2hlZChlbnYsIHNwaSwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XG4gXG4gXHRcdFx0cmVnID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbkBAIC05NDYzLDcgKzkzMzIsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdC8qIEFsbCBub24tdm9pZCBnbG9iYWwgZnVuY3Rpb25zIHJldHVybiBhIDY0LWJpdCBTQ0FMQVJfVkFMVUUuICovXG4gXHRcdGlmICghc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKSkge1xuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgQlBGX1JFR18wKTtcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLnN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xuQEAgLTEwNDgyLDkgKzEwMzUwLDYgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdH1cbiBcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpO1xuIFxuLVx0LyogaGVscGVyIGNhbGwgcmV0dXJucyA2NC1iaXQgdmFsdWUuICovXG4tXHRyZWdzW0JQRl9SRUdfMF0uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuLVxuIFx0LyogdXBkYXRlIHJldHVybiByZWdpc3RlciAoYWxyZWFkeSBtYXJrZWQgYXMgd3JpdHRlbiBhYm92ZSkgKi9cbiBcdHJldF90eXBlID0gZm4tXHUwMDNlcmV0X3R5cGU7XG4gXHRyZXRfZmxhZyA9IHR5cGVfZmxhZyhyZXRfdHlwZSk7XG5AQCAtMTA3MjIsMzAgKzEwNTg3LDYgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKCkgaXMgdXNlZCB3aGVuIHRoZSByZWcgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5XG4tICogdGhlIEJURiBmdW5jX3Byb3RvJ3MgcmV0dXJuIHZhbHVlIHNpemUgYW5kIGFyZ3VtZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIF9fbWFya19idGZfZnVuY19yZWdfc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyxcbi1cdFx0XHRcdCAgICAgdTMyIHJlZ25vLCBzaXplX3QgcmVnX3NpemUpXG4te1xuLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IFx1MDAyNnJlZ3NbcmVnbm9dO1xuLVxuLVx0aWYgKHJlZ25vID09IEJQRl9SRUdfMCkge1xuLVx0XHQvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgKi9cbi1cdFx0cmVnLVx1MDAzZXN1YnJlZ19kZWYgPSByZWdfc2l6ZSA9PSBzaXplb2YodTY0KSA/XG4tXHRcdFx0REVGX05PVF9TVUJSRUcgOiBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuLVx0fSBlbHNlIGlmIChyZWdfc2l6ZSA9PSBzaXplb2YodTY0KSkge1xuLVx0XHQvKiBGdW5jdGlvbiBhcmd1bWVudCAqL1xuLVx0XHRtYXJrX2luc25femV4dChlbnYsIHJlZyk7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHJlZ25vLFxuLVx0XHRcdFx0ICAgc2l6ZV90IHJlZ19zaXplKVxuLXtcbi1cdHJldHVybiBfX21hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCBjdXJfcmVncyhlbnYpLCByZWdubywgcmVnX3NpemUpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VrZnVuY19mbGFncyBcdTAwMjYgS0ZfQUNRVUlSRTtcbkBAIC0xMjk3NCw3ICsxMjgxNSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXg7XG4gXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xuLVx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcbiBcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQ7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbkBAIC0xMzAxOCw3ICsxMjg1OCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiZmFpbGVkIHRvIG1hcmsgczMyIHJhbmdlIGZvciByZXR2YWwgaW4gZm9ya2VkIHN0YXRlIGZvciBsb2NrXFxuXCIpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdFx0X19tYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVncywgQlBGX1JFR18wLCBzaXplb2YodTMyKSk7XG4gXHR9IGVsc2UgaWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX19fYnBmX3RyYXBdKSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcInVuZXhwZWN0ZWQgX19icGZfdHJhcCgpIGR1ZSB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlP1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtMTMxNjgsNyArMTMwMDcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4gXG4gXHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbcmVnbm9dKTtcbi1cdFx0cmVnc1tyZWdub10uc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xuIFx0fVxuIFx0aW52YWxpZGF0ZV9vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY3VyX2Z1bmMoZW52KSk7XG4gXG5AQCAtMTMxOTAsNyArMTMwMjgsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAobWV0YS5idGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxuIFx0XHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXG4gXHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgdC1cdTAwM2VzaXplKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4gXHRcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cHRyX3R5cGVfaWQpO1xuIFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG5AQCAtMTMyODEsNyArMTMxMTgsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXHRcdH1cbi1cdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIEJQRl9SRUdfMCwgc2l6ZW9mKHZvaWQgKikpO1xuIFx0XHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcdTAwMjZtZXRhKSkge1xuIFx0XHRcdGlkID0gYWNxdWlyZV9yZWZlcmVuY2UoZW52LCBpbnNuX2lkeCwgMCk7XG4gXHRcdFx0aWYgKGlkIFx1MDAzYyAwKVxuQEAgLTEzMzE4LDE4ICsxMzE1NCw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0Y2FsbGVyX2luZm8tXHUwMDNlc3RhY2tfYXJnX2NudCA9IHN0YWNrX2FyZ19jbnQ7XG4gXHR9XG4gXG4tXHRhcmdzID0gKGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKikobWV0YS5mdW5jX3Byb3RvICsgMSk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIG5hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcbi1cdFx0dTMyIHJlZ25vID0gaSArIDE7XG4tXG4tXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHNpemVvZih2b2lkICopKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdC8qIHNjYWxhci4gZW5zdXJlZCBieSBjaGVja19rZnVuY19hcmdzKCkgKi9cbi1cdFx0XHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXHUwMDNlc2l6ZSk7XG4tXHR9XG4tXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTE0ODIzLDE0ICsxNDY0NywxNCBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BKVxuIFx0XHRcdCpkc3RfcmVnID0gKnNyY19yZWc7XG4gXG4tXHRcdGRzdF9yZWctXHUwMDNlc3VicmVnX2RlZiA9IGVudi1cdTAwM2VpbnNuX2lkeCArIDE7XG4tXG4tXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpXG4rXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIDMyLWJpdCBvcGVyYXRpb25zIHplcm8gdXBwZXIgYml0cyBhdXRvbWF0aWNhbGx5LlxuIFx0XHRcdCAqIDY0LWJpdCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIDMyLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGF1eC1cdTAwM2VuZWVkc196ZXh0ID0gdHJ1ZTtcbitcdFx0XHRhdXgtXHUwMDNlemV4dF9kc3QgPSB0cnVlO1xuK1x0XHR9XG4gXG4gXHRcdC8qIEFueSBhcml0aG1ldGljIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb24gYXJlbmEgcG9pbnRlcnMgKi9cbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQ5NjksNiArMTQ3OTMsNyBAQCBzdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gLyogY2hlY2sgdmFsaWRpdHkgb2YgMzItYml0IGFuZCA2NC1iaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zICovXG4gc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIHtcbitcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4ID0gY3VyX2F1eChlbnYpO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuIFx0dTggb3Bjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4gXHRpbnQgZXJyO1xuQEAgLTE1MDI2LDE4ICsxNDg1MSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0pIHtcbiBcdFx0XHRcdFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cbiBcdFx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4tXHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xuK1x0XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gMSkgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4gXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gUFRSX1RPX0FSRU5BO1xuLVx0XHRcdFx0XHRcdC8qIFBUUl9UT19BUkVOQSBpcyAzMi1iaXQgKi9cbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggKyAxO1xuLVx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDApIHtcbiBcdFx0XHRcdFx0LyogY2FzZTogUjEgPSBSMlxuIFx0XHRcdFx0XHQgKiBjb3B5IHJlZ2lzdGVyIHN0YXRlIHRvIGRlc3QgcmVnXG4gXHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3YoZW52LCBzcmNfcmVnKTtcbiBcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbi1cdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xuIFx0XHRcdFx0XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbkBAIC0xNTA1NSw3ICsxNDg3Niw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4gXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbi1cdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cdTAwM2Vkc3RfcmVnKTtcbiBcdFx0XHRcdFx0fVxuQEAgLTE1MDgwLDcgKzE0OTAwLDYgQEAgc3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRcdFx0XHRcdCAqL1xuIFx0XHRcdFx0XHRcdGlmICghaXNfc3JjX3JlZ191MzIpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbiBcdFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0XHQvKiBjYXNlOiBXMSA9IChzOCwgczE2KVcyICovXG4gXHRcdFx0XHRcdFx0Ym9vbCBub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgXHUwMDNjICgxVUxMIFx1MDAzY1x1MDAzYyAoaW5zbi1cdTAwM2VvZmYgLSAxKSk7XG5AQCAtMTUwOTAsNyArMTQ5MDksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdFx0XHRcdFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcbiBcdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4gXHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG4tXHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbiBcdFx0XHRcdFx0XHRjb2VyY2Vfc3VicmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuQEAgLTE1OTU5LDEyICsxNTc3Nyw4IEBAIHN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICgoIShyZWctXHUwMDNlaWQgXHUwMDI2IEJQRl9BRERfQ09OU1QpIFx1MDAyNlx1MDAyNiAhKGtub3duX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVCkpIHx8XG4gXHRcdCAgICByZWctXHUwMDNlZGVsdGEgPT0ga25vd25fcmVnLVx1MDAzZWRlbHRhKSB7XG4tXHRcdFx0czMyIHNhdmVkX3N1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbi1cbiBcdFx0XHQqcmVnID0gKmtub3duX3JlZztcbi1cdFx0XHRyZWctXHUwMDNlc3VicmVnX2RlZiA9IHNhdmVkX3N1YnJlZ19kZWY7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0czMyIHNhdmVkX3N1YnJlZ19kZWYgPSByZWctXHUwMDNlc3VicmVnX2RlZjtcbiBcdFx0XHRzMzIgc2F2ZWRfb2ZmID0gcmVnLVx1MDAzZWRlbHRhO1xuIFx0XHRcdHUzMiBzYXZlZF9pZCA9IHJlZy1cdTAwM2VpZDtcbiBcbkBAIC0xNTk3NCwxMiArMTU3ODgsMTEgQEAgc3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3NcbiBcdFx0XHQvKiByZWcgPSBrbm93bl9yZWc7IHJlZyArPSBkZWx0YSAqL1xuIFx0XHRcdCpyZWcgPSAqa25vd25fcmVnO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogTXVzdCBwcmVzZXJ2ZSBvZmYsIGlkIGFuZCBzdWJyZWdfZGVmIGZsYWcsXG4tXHRcdFx0ICogb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpIHdpbGwgYmUgaW5jb3JyZWN0LlxuK1x0XHRcdCAqIE11c3QgcHJlc2VydmUgb2ZmIGFuZCBpZCwgb3RoZXJ3aXNlIGFub3RoZXIgc3luY19saW5rZWRfcmVncygpXG4rXHRcdFx0ICogd2lsbCBiZSBpbmNvcnJlY3QuXG4gXHRcdFx0ICovXG4gXHRcdFx0cmVnLVx1MDAzZWRlbHRhID0gc2F2ZWRfb2ZmO1xuIFx0XHRcdHJlZy1cdTAwM2VpZCA9IHNhdmVkX2lkO1xuLVx0XHRcdHJlZy1cdTAwM2VzdWJyZWdfZGVmID0gc2F2ZWRfc3VicmVnX2RlZjtcbiBcbiBcdFx0XHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiBcdFx0XHRzY2FsYXJfbWluX21heF9hZGQocmVnLCBcdTAwMjZmYWtlX3JlZyk7XG5AQCAtMTY0MTQsOCArMTYyMjcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgKiBBbHJlYWR5IG1hcmtlZCBhcyB3cml0dGVuIGFib3ZlLlxuIFx0ICovXG4gXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi1cdC8qIGxkX2FicyBsb2FkIHVwIHRvIDMyLWJpdCBza2IgZGF0YS4gKi9cbi1cdHJlZ3NbQlBGX1JFR18wXS5zdWJyZWdfZGVmID0gZW52LVx1MDAzZWluc25faWR4ICsgMTtcbiBcdC8qXG4gXHQgKiBTZWUgYnBmX2dlbl9sZF9hYnMoKSB3aGljaCBlbWl0cyBhIGhpZGRlbiBCUEZfRVhJVCB3aXRoIHIwPTBcbiBcdCAqIHdoaWNoIG11c3QgYmUgZXhwbG9yZWQgYnkgdGhlIHZlcmlmaWVyIHdoZW4gaW4gYSBzdWJwcm9nLlxuQEAgLTE2NzMwLDcgKzE2NTQxLDYgQEAgYm9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXG4gXHRpbnQgaTtcbiBcbiBcdGlmIChicGZfaGVscGVyX2NhbGwoY2FsbCkpIHtcbi1cbiBcdFx0aWYgKGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgY2FsbC1cdTAwM2VpbW0sIFx1MDAyNmZuKSBcdTAwM2MgMClcbiBcdFx0XHQvKiBlcnJvciB3b3VsZCBiZSByZXBvcnRlZCBsYXRlciAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNzQ3NSw2ICsxNzI4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiVkOiBcIiwgZW52LVx1MDAzZWluc25faWR4KTtcbiBcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFx0XHRcdGVudi1cdTAwM2VwcmV2X2luc25fcHJpbnRfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zIC0gZW52LVx1MDAzZXByZXZfbG9nX3BvcztcbiBcdFx0XHRlbnYtXHUwMDNlcHJldl9sb2dfcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jIGIvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXG5pbmRleCA1ZTdjYjhiMzZmZWYyLi41NTc5MTczYTYxZTNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmNcbkBAIC0xMDcsMTQgKzEwNyw3IEBAIHByaW50X2luc25fZm9yX2dyYXBoKHZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gXG4gXHRwID0gYnVmO1xuIFx0d2hpbGUgKCpwICE9ICdcXDAnKSB7XG4tXHRcdGlmICgqcCA9PSAnXFxuJykge1xuLVx0XHRcdG1lbW1vdmUocCArIDMsIHAsIHN0cmxlbihidWYpICsgMSAtIChwIC0gYnVmKSk7XG4tXHRcdFx0LyogQWxpZ24gZWFjaCBpbnN0cnVjdGlvbiBkdW1wIHJvdyBsZWZ0LiAqL1xuLVx0XHRcdCpwKysgPSAnXFxcXCc7XG4tXHRcdFx0KnArKyA9ICdsJztcbi1cdFx0XHQvKiBPdXRwdXQgbXVsdGlsaW5lIGNvbmNhdGVuYXRpb24uICovXG4tXHRcdFx0KnArKyA9ICdcXFxcJztcbi1cdFx0fSBlbHNlIGlmICgqcCA9PSAnXHUwMDNjJyB8fCAqcCA9PSAnXHUwMDNlJyB8fCAqcCA9PSAnfCcgfHwgKnAgPT0gJ1x1MDAyNicpIHtcbitcdFx0aWYgKCpwID09ICdcdTAwM2MnIHx8ICpwID09ICdcdTAwM2UnIHx8ICpwID09ICd8JyB8fCAqcCA9PSAnXHUwMDI2Jykge1xuIFx0XHRcdG1lbW1vdmUocCArIDEsIHAsIHN0cmxlbihidWYpICsgMSAtIChwIC0gYnVmKSk7XG4gXHRcdFx0LyogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyLiAqL1xuIFx0XHRcdCpwKysgPSAnXFxcXCc7XG5AQCAtMTI5LDE2ICsxMjIsMTAgQEAgcHJpbnRfaW5zbl9mb3JfZ3JhcGgodm9pZCAqcHJpdmF0ZV9kYXRhLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBzdGF0aWMgdm9pZCBfX3ByaW50ZigyLCAzKVxuIHByaW50X2luc25fanNvbih2b2lkICpwcml2YXRlX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsID0gc3RybGVuKGZtdCk7XG4tXHRjaGFyIGNob21wZWRfZm10W2xdO1xuIFx0dmFfbGlzdCBhcmdzO1xuIFxuIFx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdGlmIChsIFx1MDAzZSAwKSB7XG4tXHRcdHN0cm5jcHkoY2hvbXBlZF9mbXQsIGZtdCwgbCAtIDEpO1xuLVx0XHRjaG9tcGVkX2ZtdFtsIC0gMV0gPSAnXFwwJztcbi1cdH1cbi1cdGpzb253X3ZwcmludGZfZW5xdW90ZShqc29uX3d0ciwgY2hvbXBlZF9mbXQsIGFyZ3MpO1xuK1x0anNvbndfdnByaW50Zl9lbnF1b3RlKGpzb25fd3RyLCBmbXQsIGFyZ3MpO1xuIFx0dmFfZW5kKGFyZ3MpO1xuIH1cbiBcbkBAIC0zNTEsNiArMzM4LDcgQEAgdm9pZCBkdW1wX3hsYXRlZF9wbGFpbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxuIFxuIFx0XHRwcmludGYoXCIlNHU6IFwiLCBpKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICsgaSwgdHJ1ZSk7XG4rXHRcdHByaW50ZihcIlxcblwiKTtcbiBcbiBcdFx0aWYgKG9wY29kZXMpIHtcbiBcdFx0XHRwcmludGYoXCIgICAgICAgXCIpO1xuQEAgLTQxNyw2ICs0MDUsNyBAQCB2b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxuIFxuIFx0XHRwcmludGYoXCIldTogXCIsIGluc25fb2ZmKTtcbiBcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBjdXIsIHRydWUpO1xuK1x0XHRwcmludGYoXCJcXFxcbFxcXFxcXG5cIik7XG4gXG4gXHRcdGlmIChvcGNvZGVzKSB7XG4gXHRcdFx0cHJpbnRmKFwiXFxcXCBcXFxcIFxcXFwgXFxcXCBcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuaW5kZXggZjUyOWYxYzhjMTcxZC4uMzAyMjEzNTI1NjhkNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuY1xuQEAgLTU1LDEwICs1NSw5IEBAIHN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4gXHQgKiBmb3IgZWFjaCBpbnN0cnVjdGlvbiAoRkYgc3RhbmRzIGZvciBpbnN0cnVjdGlvbiBgY29kZWAgYnl0ZSkuXG4gXHQgKiBSZW1vdmUgdGhlIHByZWZpeCBpbnBsYWNlLCBhbmQgYWxzbyBzaW1wbGlmeSBjYWxsIGluc3RydWN0aW9ucy5cbiBcdCAqIEUuZy46IFwiKDg1KSBjYWxsIGZvbyMxMFwiIC1cdTAwM2UgXCJjYWxsIGZvb1wiLlxuLVx0ICogQWxzbyByZW1vdmUgbmV3bGluZSBpbiB0aGUgZW5kICh0aGUgJ21heChzdHJsZW4oYnVmKSAtIDEsIDApJyB0aGluZykuXG4gXHQgKi9cbiBcdHBmeF9lbmQgPSBidWYgKyA1O1xuLVx0c2Z4X3N0YXJ0ID0gYnVmICsgbWF4KChpbnQpc3RybGVuKGJ1ZikgLSAxLCAwKTtcbitcdHNmeF9zdGFydCA9IGJ1ZiArIChpbnQpc3RybGVuKGJ1Zik7XG4gXHRpZiAoc3RybmNtcChwZnhfZW5kLCBcImNhbGwgXCIsIDUpID09IDAgXHUwMDI2XHUwMDI2ICh0bXAgPSBzdHJyY2hyKGJ1ZiwgJyMnKSkpXG4gXHRcdHNmeF9zdGFydCA9IHRtcDtcbiBcdGxlbiA9IHNmeF9zdGFydCAtIHBmeF9lbmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IGJlOTdmNjg4N2YwZTcuLmZiYTU2MmM4MTk2OTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMTI0LDYgKzEyNCw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9qaXRfaW5saW5lLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJpcnEuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2N0eF9wdHJfcGFyYW0uc2tlbC5oXCJcbisjaW5jbHVkZSBcInZlcmlmaWVyX3pleHQuc2tlbC5oXCJcbiBcbiAjZGVmaW5lIE1BWF9FTlRSSUVTIDExXG4gXG5AQCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgdGVzdF9pcnEodm9pZClcdFx0XHQgICAgICB7IFJVTihpcnEpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKVx0XHQgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jdHhfcHRyX3BhcmFtKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2N0eF9wdHJfcGFyYW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XG4gXG4gc3RhdGljIGludCBpbml0X3Rlc3RfdmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjaGFyICptYXBfbmFtZSlcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3pleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl96ZXh0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGQzZWE2NjFiNzc4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfemV4dC5jXG5AQCAtMCwwICsxLDM4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2V4dGVybiBsb25nIGJwZl9rZnVuY19jYWxsX3Rlc3Q0KHNpZ25lZCBjaGFyIGEsIHNob3J0IGIsIGludCBjLCBsb25nIGQpIF9fa3N5bTtcbitcbisvKiB0byByZXRhaW4gZGVidWcgaW5mbyBmb3IgQlRGIGdlbmVyYXRpb24gKi9cbit2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcbit7XG4rXHRicGZfa2Z1bmNfY2FsbF90ZXN0NCgwLCAwLCAwLCAwKTtcbitcdGJwZl9hcmVuYV9hbGxvY19wYWdlcygwLCAwLCAwLCAwLCAwKTtcbitcdGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX2ZsYWcoQlBGX0ZfVEVTVF9STkRfSEkzMilcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIHZvaWQgemV4dF9sb3N0X2Fjcm9zc19jaGVja3BvaW50KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2t0aW1lX2dldF9uc107XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjggPSByMDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cjYgPSAweGRlYWRiZWVmY2FmZWJhYmUgbGw7XHQvKiBpbmplY3Qgc29tZSB2YWx1ZSBmb3IgcjYncyB1cHBlciBoYWxmICovXHRcXFxuK1x0aWYgcjggIT0gMCBnb3RvIDFmO1x0XHQvKiBmYWxsLXRocm91Z2ggY2FjaGVkIGZpcnN0LCBicmFuY2ggcHJ1bmVkICovXHRcXFxuK1x0cjYgPSAzMjtcdFx0XHQvKiBmdWxsIDY0LWJpdCBkZWYgKi9cdFx0XHRcdFxcXG4rXHRnb3RvIDJmO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rMTpcdHc2ID0gMzI7XHRcdFx0LyogMzItYml0IGRlZiwgemV4dCBtYXJrIGxvc3QgKi9cdFx0XFxcbisyOlx0cjAgPSByNjtcdFx0XHQvKiBidWdneSB2ZXJpZmllciBiZWxpZXZlZCB1cHBlciAzMiBiaXRzIGFyZSAwICovIFxcXG4rXHRcdFx0XHRcdC8qIGFuZCB0aHVzIGRpZCBub3QgemVybyBleHRlbmRlZCB3NiA9IDMyLiAqL1x0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9rdGltZV9nZXRfbnMpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgQUxVIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gdzB7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9hbHUzMl9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogMzItYml0IEFMVSByZXN1bHQgcmVhZCBvbmx5IGFzIDMyLWJpdCAtXHUwMDNlIG5vIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCI7IHpleHRcIilcbitfX25ha2VkIHZvaWQgbm9femV4dF9hbHUzMl9oaV91bnVzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHcxID0gdzA7XHRcdC8qIE1PViAqL1x0XHRcXFxuK1x0dzIgPSB3MTtcdFx0XHRcdFx0XFxcbitcdHcyICs9IHcxO1x0XHQvKiBBTFUzMiwgQlBGX1ggKi9cdFxcXG4rXHR3MiArPSAxO1x0XHQvKiBBTFUzMiwgQlBGX0sgKi9cdFxcXG4rXHR3MiA9IHcyO1x0XHQvKiBrZWVwIHcyIGFsaXZlIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbiAqLyBcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIDY0LWJpdCBkZWZpbml0aW9uIGlzIG5ldmVyIHplcm8gZXh0ZW5kZWQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCJyMSA9IHIwe3suKn19OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIG5vX3pleHRfbW92NjQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHIxID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBOYXJyb3cgbG9hZCByZXN1bHQgcmVhZCBhcyA2NC1iaXQgLVx1MDAzZSB6ZXh0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJyMSA9ICoodTMyICopKHIxMCAtOCl7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9uYXJyb3dfbG9hZF9oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1x0XHRcdFx0XFxcbitcdHIxID0gKih1MzIgKikocjEwIC0gOCk7XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgYXRvbWljIGZldGNoIHJlc3VsdCByZWFkIGFzIDY0LWJpdCAtXHUwMDNlIHpleHQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInIxID0gYXRvbWljX2ZldGNoX2FkZCgodTMyICopKHIxMCAtOCksIHIxKXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2F0b21pY19mZXRjaDMyX2hpX3VzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gcjE7XHRcdFx0XHRcXFxuK1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHQuOGJ5dGUgJVtmZXRjaF9hZGQzMl07XHRcdFx0XHRcXFxuK1x0cjAgPSByMTtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9pbnNuKGZldGNoX2FkZDMyLFxuK1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX1csIEJQRl9BREQgfCBCUEZfRkVUQ0gsIEJQRl9SRUdfMTAsIEJQRl9SRUdfMSwgLTgpKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogMzItYml0IGF0b21pYyBjbXB4Y2hnIHJlc3VsdCAocjApIHJlYWQgYXMgNjQtYml0IC1cdTAwM2UgemV4dCAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwicjAgPSBhdG9taWNfY21weGNoZygodTMyICopKHIxMCAtOCksIHIwLCByMSl7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgemV4dF9jbXB4Y2hnMzJfaGlfdXNlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSByMTtcdFx0XHRcdFxcXG4rXHR3MCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHcxID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0LjhieXRlICVbY21weGNoZzMyXTtcdFx0XHRcdFxcXG4rXHRyMiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByMjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9pbnNuKGNtcHhjaGczMixcbitcdFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9XLCBCUEZfQ01QWENIRywgQlBGX1JFR18xMCwgQlBGX1JFR18xLCAtOCkpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiAzMi1iaXQgZGVmIGJlZm9yZSBhIGJyYW5jaCwgdXBwZXIgaGFsZiB1c2VkIG9uIG9uZSBicmFuY2ggLVx1MDAzZSB6ZXh0ICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3NiA9IDMye3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIHpleHRfY2ZnX2hpX3VzZWRfb25lX2JyYW5jaCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzYgPSAzMjtcdFx0XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLyogcjEncyB1cHBlciBoYWxmIGlzIGRlYWQsIHNvICd3MSA9IDEnIG11c3QgTk9UIGJlIG1hcmtlZCBmb3IgemVybyBleHRlbnNpb24uICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19ub3RfbXNnKFwidzEgPSAxe3suKn19OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIG5vX3pleHRfb3RoZXJfcmVnX2hpX3VzZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyNiBcdTAwM2NcdTAwM2M9IDMyO1x0XHRcdFx0XHRcXFxuK1x0dzEgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRyMCA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBMRF9BQlMgZGVmaW5lcyByMDsgd2hlbiByMCBpcyByZWFkIGFzIDY0LWJpdCBpdCBtdXN0IGJlIHplcm8gZXh0ZW5kZWQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcInIwID0gKih1OCAqKXNrYlswXXt7Lip9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCB6ZXh0X2xkX2Fic19oaV91c2VkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjYgPSByMTtcdFx0XHRcdFx0XFxcbitcdHIwID0gKih1OCAqKXNrYlswXTtcdFx0XHRcdFxcXG4rXHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjAgPSByNztcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBIZWxwZXIgcGFyYW1ldGVycyBhcmUgcmVhZCBhcyA2NC1iaXQgKGNhbGxfdXNlX21hc2soKSBmYWxsYmFjaykgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncyID0gMXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBoZWxwZXJfcGFyYW1fcmVhZF9hc182NGJpdCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjEgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHR3MiA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfdHJhY2VfcHJpbnRrXTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX3RyYWNlX3ByaW50aylcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK3N0YXRpYyBfX3VzZWQgX19uYWtlZCBpbnQgc3VicHJvZ19yZWFkc19hcmdfYXNfNjRiaXQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IHIxO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIHN1YnByb2dyYW0gcGFyYW1ldGVycyBhcmUgY29uc2VydmF0aXZlbHkgcmVhZCBhcyA2NC1iaXQgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gdzB7eyArfX07IHpleHRcIilcbitfX25ha2VkIHZvaWQgc3VicHJvZ19wYXJhbV9yZWFkX2FzXzY0Yml0KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHR3MSA9IHcwO1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCBzdWJwcm9nX3JlYWRzX2FyZ19hc182NGJpdDtcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBrZnVuYyBwYXJhbWV0ZXJzIGFyZSB6ZXJvIGV4dGVuZGVkICovXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIncxID0gMXt7ICt9fTsgemV4dFwiKVxuK19fbXNnKFwidzIgPSAxe3sgK319OyB6ZXh0XCIpXG4rX19tc2coXCJ3MyA9IDF7eyArfX07IHpleHRcIilcbitfX21zZyhcInc0ID0gMXt7ICt9fTsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBrZnVuY19wYXJhbV9yZWFkX3Blcl9idGYodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHR3MSA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdHcyID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0dzMgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHR3NCA9IDE7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgYnBmX2tmdW5jX2NhbGxfdGVzdDQ7XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbm90X21zZyhcIjsgemV4dFwiKVxuK19fbmFrZWQgdm9pZCBhbHUzMl9hbmRfMzJiaXRfY29uZGl0aW9uYWwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdHcxID0gdzA7XHRcdFx0XHRcdFxcXG4rXHRpZiB3MSBcdTAwM2UgNDIgZ290byAxZjtcdFx0LyogQlBGX0sgKi9cdFxcXG4rXHR3MiA9IDI4O1x0XHRcdFx0XHRcXFxuK1x0aWYgdzIgXHUwMDNlIHcxIGdvdG8gMWY7XHRcdC8qIEJQRl9YICovXHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rMTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJ3MSA9IHcwe3sgK319OyB6ZXh0XCIpXG4rX19uYWtlZCB2b2lkIGFsdTMyX2FuZF82NGJpdF9jb25kaXRpb25hbCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0dzEgPSB3MDtcdFx0XHRcdFx0XFxcbitcdGlmIHIxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbitcdHIyID0gMjg7XHRcdFx0XHRcdFxcXG4rXHRpZiByMiBcdTAwM2UgcjEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX25vdF9tc2coXCI7IHpleHRcIilcbitfX25ha2VkIHZvaWQgYWx1NjRfYW5kX2NvbmRpdGlvbmFscyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcdFx0XHRcXFxuK1x0cjEgPSByMDtcdFx0XHRcdFx0XFxcbitcdGlmIHcxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbitcdGlmIHIxIFx1MDAzZSA0MiBnb3RvIDFmO1x0XHQvKiBCUEZfSyAqL1x0XFxcbitcdHIyID0gMjg7XHRcdFx0XHRcdFxcXG4rXHRpZiB3MiBcdTAwM2UgdzEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4rXHRpZiByMiBcdTAwM2UgcjEgZ290byAxZjtcdFx0LyogQlBGX1ggKi9cdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbisxOlx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1RcbitcbitTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4rX19hcmNoX3MzOTB4XG4rX194bGF0ZWQoXCI3OiB3MSA9IHcwXCIpXG4rX194bGF0ZWQoXCI4OiB3MSA9IHcxXCIpXG4rX194bGF0ZWQoXCI5OiB3MSArPSA4XCIpXG4rX194bGF0ZWQoXCIxMDogdzEgPSB3MVwiKVxuK19fbmFrZWQgdm9pZCBhcmVuYV9wdHIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVbYXJlbmFdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjMgPSAxO1x0XHRcdFx0XHRcdFxcXG4rXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHI1ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9hcmVuYV9hbGxvY19wYWdlc107XHRcdFx0XFxcbitcdHIxID0gYWRkcl9zcGFjZV9jYXN0KHIwLCAwLCAxKTtcdC8qIG5lZWRzIHpleHQgKi9cXFxuK1x0cjEgKz0gODtcdFx0XHQvKiBuZWVkcyB6ZXh0ICovXFxcbitcdCoodTY0ICopKHIxICswKSA9IDQyO1x0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9hcmVuYV9hbGxvY19wYWdlcyksXG4rXHQgIF9faW1tX2FkZHIoYXJlbmEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisjZW5kaWZcbitcbisvKiBDaGVjayBpZiBwcm9iZSBtZW0gbG9hZHMga2VlcCB0aGVpciB6ZXJvIGV4dGVuc2lvbi4gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX2FyY2hfczM5MHhcbitfX3hsYXRlZChcIjM6IHIxID0gKih1NjQgKikocjAgKzApXCIpXG4rX194bGF0ZWQoXCI0OiByMiA9ICoodTMyICopKHIwICswKVwiKVxuK19feGxhdGVkKFwiNTogdzIgPSB3MlwiKVxuK19feGxhdGVkKFwiNjogcjMgPSAqKHUxNiAqKShyMCArMClcIilcbitfX3hsYXRlZChcIjc6IHczID0gdzNcIilcbitfX3hsYXRlZChcIjg6IHI0ID0gKih1OCAqKShyMCArMClcIilcbitfX3hsYXRlZChcIjk6IHc0ID0gdzRcIilcbitfX25ha2VkIHZvaWQgcHJvYmVfbWVtKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjEgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRyMiA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfcmRvbmx5X2Nhc3RdO1x0XHRcdFxcXG4rXHRyMSA9ICoodTY0ICopKHIwICsgMCk7XHQvKiBCUEZfUFJPQkVfTUVNICovXHRcXFxuK1x0cjIgPSAqKHUzMiAqKShyMCArIDApO1x0LyogQlBGX1BST0JFX01FTSAqL1x0XFxcbitcdHIzID0gKih1MTYgKikocjAgKyAwKTtcdC8qIEJQRl9QUk9CRV9NRU0gKi9cdFxcXG4rXHRyNCA9ICoodTggKikocjAgKyAwKTtcdC8qIEJQRl9QUk9CRV9NRU0gKi9cdFxcXG4rXHRyMCA9IHIxO1x0XHQvKiBtYWtlIHRoZSByZWdpc3RlcnMgdXNlZCAqLyBcXFxuK1x0cjAgKz0gcjI7XHRcdFx0XHRcdFxcXG4rXHRyMCArPSByMztcdFx0XHRcdFx0XFxcbitcdHIwICs9IHI0O1x0XHRcdFx0XHRcXFxuKzE6XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX3Jkb25seV9jYXN0KVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTE6MzAuMTI5Mjg0NTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNzQ4MjkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGFuZCB0cmFja3MgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMsIG9yIGB6ZXh0YC4gVGhleSdyZSBtb3ZpbmcgYXdheSBmcm9tIHN0b3JpbmcgYHN1YnJlZ19kZWZgIHdpdGhpbiB0aGUgYGJwZl9yZWdfc3RhdGVgIHN0cnVjdC4gSW5zdGVhZCwgdGhleSdyZSBjYWxjdWxhdGluZyBgemV4dF9kc3RgIGR5bmFtaWNhbGx5IHVzaW5nIGxpdmVuZXNzIGFuYWx5c2lzIHRocm91Z2ggYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYC4gVGhhdCdzIGEgcHJldHR5IHN1YnN0YW50aWFsIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIGNhbiBzZWUgdGhpcyBpbXBhY3RpbmcgaG93IEJQRiBwcm9ncmFtcyBhcmUgdmVyaWZpZWQsIGFuZCBzdWJzZXF1ZW50bHksIGhvdyB0aGV5J3JlIEpJVGVkLCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgMzItYml0IG9wZXJhdGlvbnMgZG9uJ3QgYXV0b21hdGljYWxseSB6ZXJvLWV4dGVuZCB0byA2NC1iaXQ7IGFyY2hpdGVjdHVyZXMgbGlrZSBzMzkweC5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0LiBJIHNlZSB0aGV5J3ZlIGludHJvZHVjZWQgYGJwZl9pbnNuX2RlZjMyYCwgYW5kIHRoZXkndmUgbW92ZWQgYW5kIG1vZGlmaWVkIGBicGZfaXNfcmVnNjRgLiBDcnVjaWFsbHksIGJvdGggYGNvbXB1dGVfaW5zbl9saXZlX3JlZ3NgIGFuZCBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIHdpdGhpbiBga2VybmVsL2JwZi9saXZlbmVzcy5jYCBoYXZlIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBhc3BlY3QuICBUaGV5J3ZlIGFsc28gdG91Y2hlZCBgY2hlY2tfYWx1X29wYCwgYGNoZWNrX2hlbHBlcl9jYWxsYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGFuZCBgc3luY19saW5rZWRfcmVnc2Agd2l0aGluIHRoZSB2ZXJpZmllciBpdHNlbGYgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgKS4gVGhpcyBjaGFuZ2UgbGlzdCBnaXZlcyBtZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoaXMgaXMgcXVpdGUgYSBjb21wbGV4IGNoYW5nZSB0aGF0IGlzIGxpa2VseSB0byBiZSBleHBvc2VkIHRvIGZ1emluZyBhdHRhY2tzLlxuXG5UaGlzIGhhcyBmdXp6aW5nIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIEdpdmVuIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZXMgdG8gdGhlIGNvcmUgdmVyaWZpZXIgbG9naWMsIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gVGhlIGZ1bmN0aW9ucyBJJ20gbW9zdCBpbnRlcmVzdGVkIGluIGZ1enppbmcgYXJlIGBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc2AsIGBjb21wdXRlX2luc25fbGl2ZV9yZWdzYCwgYW5kIGBicGZfaW5zbl9kZWYzMmAuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGJwZl9pc19yZWc2NGAuIEFoLCBpdCBsb29rcyBsaWtlIHRoYXQncyBzdGF0aWMgbm93IHdpdGhpbiBgZml4dXBzLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBgYnBmX2luc25fZGVmMzJgIGlzICpub3QqIHN0YXRpYywgYW5kIHRoYXQncyBjcml0aWNhbC4gYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIEZyb20gbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSdtIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllcjsgdGhhdCdzIGBicGZfY2hlY2tgLiBgYnBmX2luc25fZGVmMzJgIGFuZCBgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNgIGFyZSBkZWZpbml0ZWx5IG15IGZvY3VzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBjb3JyZWN0LiBJIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaW1lIHRvIHVzZSB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgZnVuY3Rpb24gbmFtZXMgZXhhY3RseSByaWdodC4gVGhpcyB3aWxsIGJlIGFuIGV4dGVuc2l2ZSB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjUxOjQyLjMwNDExNzU4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgxNzY0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbClcXFxccyticGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE1Njg9Ym9vbCBicGZfc3RhY2tfc2xvdF9hbGl2ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnJhbWVubywgdTMyIHNwaSk7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNTY5OmludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE1NzAtXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA2Nj1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyOC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjIyOTppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIzMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjUxOjQ0Ljg4NTg4NjUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMzQ2NzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfaW5zbl9kZWYzMmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgYnBmX2luc25fZGVmMzJgLiBXZSd2ZSBjb3ZlcmVkIGEgbG90IG9mIGdyb3VuZCBhbHJlYWR5LCBhbmQgSSB0aGluayBpdCdzIHRpbWUgdG8gZHJpbGwgZG93biBvbiB0aGUgc3BlY2lmaWNzLiBJJ20gc3RhcnRpbmcgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBwcm9wZXIgdW5kZXJzdGFuZGluZyBkZW1hbmRzIGEgZGVlcCBkaXZlIGludG8gdGhlc2UgaW5kaXZpZHVhbCBjb21wb25lbnRzLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgdGhpcyBpcyBtb3N0IGxpa2VseSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBhIDMyLWJpdCBCUEYgaW5zdHJ1Y3Rpb24uIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGRlZmluaW5nIGhvdyB0aGUgaW5zdHJ1Y3Rpb24gaXMgZW5jb2RlZCBvciBkZWNvZGVkLCBwZXJoYXBzIGFsb25nc2lkZSBvdGhlciBzdHJ1Y3R1cmVzIGZvciBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb24gbGVuZ3Rocy4gSSdtIGtlZW4gdG8gZXhhbWluZSB0aGUgZmllbGRzIHdpdGhpbiBhbmQgaG93IHRoZXkgbWFwIHRvIHRoZSBvcGNvZGVzLCBzb3VyY2UvZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBhbmQgaW1tZWRpYXRlIHZhbHVlcyB3ZSdyZSBmYW1pbGlhciB3aXRoIGluIEJQRi4gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIG9yIHBlcmhhcHMgdW5pb25zIGludm9sdmVkIGluIGRlZmluaW5nIHRoZSBpbnN0cnVjdGlvbidzIGNvbnN0aXR1ZW50IHBhcnRzPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgdW5sb2NrIGhvdyB0aGUgcHJvZ3JhbSBhY3R1YWxseSAqZG9lcyogdGhlIGpvYi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjcyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTE6NDkuNTE5MzU3MTM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODgzOTU0ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludFxcXFxzK2JwZl9pbnNuX2RlZjMyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTY1MT1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY1MjppbnQgYnBmX2luc25fZGVmMzIoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NTMtXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTUyPXN0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkzLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTQ6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTE6NTEuOTA3NzU4MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM2Mzc0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYSBwcmV0dHkgZnVuZGFtZW50YWwgYXJlYTogdGhlIEJQRiB2ZXJpZmllci4gU3BlY2lmaWNhbGx5LCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcywgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyAoemV4dHMpLiBUaGF0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgQlBGIHByb2dyYW1zIGFyZSBzYWZlIGFuZCBhbHNvIGhvdyB0aGV5IGdldCB0cmFuc2xhdGVkIGludG8gb3B0aW1pemVkIG1hY2hpbmUgY29kZSBieSB0aGUgSklULiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLiBBbnkgY2hhbmdlIHRoYXQgdG91Y2hlcyB0aGUgdmVyaWZpZXIncyBjb3JlIGxvZ2ljIGlzIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBXZSBuZWVkIHRvIHRocm93IGV2ZXJ5dGhpbmcgd2UgY2FuIGF0IHRoaXMgdG8gZXhwb3NlIGFueSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzYCBmdW5jdGlvbiwgYXMgdGhhdOKAmXMgdGhlIGhlYXJ0IG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIGBicGZfaW5zbl9kZWYzMmAgZnVuY3Rpb24gd2lsbCBiZSBhbm90aGVyIGtleSBzeW1ib2wgdG8gcmV2aWV3LCBzaW5jZSB0aGlzIGlzIGNsZWFybHkgY29ubmVjdGVkIHdpdGggaG93IHRoZSBzdWJyZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgdHJhY2tlZC5cblxuSSBzZWUgaXQgdG91Y2hlcyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgb3B0aW9uLCB3aGljaCBtZWFucyB3ZSBtaWdodCBuZWVkIHRvIGFkanVzdCBvdXIgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8gdGVzdCB0aGlzIGVmZmVjdGl2ZWx5LiBMZXQncyBtYWtlIHN1cmUgd2UgZXhhbWluZSB0aGUgZGVwZW5kZW5jeSBsYW5kc2NhcGUgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE2NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MjowMC44NDQxMzY2NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTE0NzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1MjowMi4zODMyODg5NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ4MzUxNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQ29uc2lkZXJpbmcgdGhlIEVCUEYgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0IHNlZW1zIGxpa2UgdGhlIGNsZWFuZXN0IGFuZCBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBoZXJlIHdvdWxkIGJlIHRvIGxldmVyYWdlIGBCUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgZ28tdG8gZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgc3lzdGVtIGNhbGwgaW50ZXJjZXB0aW9uLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncyB3aXRoIG90aGVyIGFwcHJvYWNoZXMgaWYgdGhpcyBmaXRzIHRoZSBiaWxsLiBOb3csIHRoaW5raW5nIHByYWN0aWNhbGx5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUsIHdvdWxkIGJlIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBpcyBjb2xsZWN0ZWQgZ2V0cyByZXR1cm5lZCBjb3JyZWN0bHksIHNvIHRoYXQgYHNldC1yZXN1bHRzYCBpcyB0aGUgbmV4dCBtYWpvciBtZXRob2QgdGhhdCBpcyB1c2VkLiBUaGF0IHNob3VsZCBoYW5kbGUgdGhlIGRhdGEgY29sbGVjdGlvbiBhbmQgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NjUsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTI6MDcuNTMxNjQ0MzgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MDI1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnNcIixcbiAgICBcImJwZl9pbnNuX2RlZjMyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxpdmVuZXNzIGFuYWx5c2lzIGFuZCBpbnN0cnVjdGlvbiBmaXh1cHMgdG8gdHJhY2sgMzItYml0IHN1YnJlZ2lzdGVyIGRlZmluaXRpb25zIGFuZCB6ZXJvLWV4dGVuc2lvbnMgZHluYW1pY2FsbHksIHJlbW92aW5nIHRoZSBgc3VicmVnX2RlZmAgZmllbGQgZnJvbSBgYnBmX3JlZ19zdGF0ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzIG9yIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVyc1wiLFxuICAgIFwiYnBmX2luc25fZGVmMzJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbGl2ZW5lc3MgYW5hbHlzaXMgYW5kIGluc3RydWN0aW9uIGZpeHVwcyB0byB0cmFjayAzMi1iaXQgc3VicmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIHplcm8tZXh0ZW5zaW9ucyBkeW5hbWljYWxseSwgcmVtb3ZpbmcgdGhlIGBzdWJyZWdfZGVmYCBmaWVsZCBmcm9tIGBicGZfcmVnX3N0YXRlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSB2ZXJpZmljYXRpb24gYnlwYXNzZXMgb3IgaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow6pc9c[1] Phase: Succeeded StartedAt: 2026-08-03 00:52:19 +0000 UTC FinishedAt: 2026-08-03 00:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 00:52:19 +0000 UTC FinishedAt: 2026-08-03 00:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2] Phase: Succeeded StartedAt: 2026-08-03 00:52:19 +0000 UTC FinishedAt: 2026-08-03 04:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 00:52:19 +0000 UTC FinishedAt: 2026-08-03 04:37:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 00:52:19 +0000 UTC FinishedAt: 2026-08-03 00:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 00:52:19 +0000 UTC FinishedAt: 2026-08-03 00:52:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6pc9c/series-workflow6pc9c-convert-artifact-1715202214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 00:52:29 +0000 UTC FinishedAt: 2026-08-03 01:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 00:52:29 +0000 UTC FinishedAt: 2026-08-03 01:10:36 +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:*ad4564ee-9f46-4423-90e2-20c0bee0f955,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-workflow6pc9c/series-workflow6pc9c-convert-artifact-1715202214/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": "8be40c61-6e49-48dd-abaf-2ffa1da44c73", "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-workflow6pc9c/series-workflow6pc9c-build-action-2550270268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 00:52:29 +0000 UTC FinishedAt: 2026-08-03 01:10:26 +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:*ad4564ee-9f46-4423-90e2-20c0bee0f955,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-workflow6pc9c/series-workflow6pc9c-convert-artifact-1715202214/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": "8be40c61-6e49-48dd-abaf-2ffa1da44c73", "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-workflow6pc9c/series-workflow6pc9c-build-action-2550270268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 01:10:36 +0000 UTC FinishedAt: 2026-08-03 01:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 01:10:36 +0000 UTC FinishedAt: 2026-08-03 01:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 01:10:36 +0000 UTC FinishedAt: 2026-08-03 01:10:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 01:10:36 +0000 UTC FinishedAt: 2026-08-03 01:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6pc9c/series-workflow6pc9c-convert-artifact-3502562553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 01:10:47 +0000 UTC FinishedAt: 2026-08-03 01:12:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 01:10:47 +0000 UTC FinishedAt: 2026-08-03 01:12:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8be40c61-6e49-48dd-abaf-2ffa1da44c73,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-workflow6pc9c/series-workflow6pc9c-build-action-2550270268/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-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 01:12:39 +0000 UTC FinishedAt: 2026-08-03 01:12:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 01:12:39 +0000 UTC FinishedAt: 2026-08-03 01:12:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 01:12:39 +0000 UTC FinishedAt: 2026-08-03 01:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 01:12:39 +0000 UTC FinishedAt: 2026-08-03 01:33:40 +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:*ad4564ee-9f46-4423-90e2-20c0bee0f955,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-workflow6pc9c/series-workflow6pc9c-convert-artifact-3502562553/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": "39242896-a55a-48ad-abc3-0fb3de0adb64", "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-workflow6pc9c/series-workflow6pc9c-build-action-2485165781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 01:12:39 +0000 UTC FinishedAt: 2026-08-03 01:33:30 +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:*ad4564ee-9f46-4423-90e2-20c0bee0f955,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-workflow6pc9c/series-workflow6pc9c-convert-artifact-3502562553/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": "39242896-a55a-48ad-abc3-0fb3de0adb64", "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-workflow6pc9c/series-workflow6pc9c-build-action-2485165781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 01:33:40 +0000 UTC FinishedAt: 2026-08-03 01:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 01:33:40 +0000 UTC FinishedAt: 2026-08-03 01:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 01:33:40 +0000 UTC FinishedAt: 2026-08-03 01:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 01:33:40 +0000 UTC FinishedAt: 2026-08-03 01:35:32 +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:*39242896-a55a-48ad-abc3-0fb3de0adb64,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-workflow6pc9c/series-workflow6pc9c-build-action-2485165781/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-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 04:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 04:37:06 +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_compute_live_registers","bpf_insn_def32"],"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:*8be40c61-6e49-48dd-abaf-2ffa1da44c73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39242896-a55a-48ad-abc3-0fb3de0adb64,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-workflow6pc9c/series-workflow6pc9c-build-action-2550270268/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-workflow6pc9c/series-workflow6pc9c-build-action-2485165781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 01:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 01:35:47 +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_compute_live_registers","bpf_insn_def32"],"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-workflow6pc9c/series-workflow6pc9c-convert-artifact-514899054/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 01:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 01:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 01:35:42 +0000 UTC FinishedAt: 2026-08-03 01:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 01:35:52 +0000 UTC FinishedAt: 2026-08-03 04:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pc9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_compute_live_registers","bpf_insn_def32"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a18aa255-06fc-44b6-849d-2e8e20e2263d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 01:35:52 +0000 UTC FinishedAt: 2026-08-03 04:36:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8be40c61-6e49-48dd-abaf-2ffa1da44c73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39242896-a55a-48ad-abc3-0fb3de0adb64,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-workflow6pc9c/series-workflow6pc9c-build-action-2550270268/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-workflow6pc9c/series-workflow6pc9c-build-action-2485165781/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-workflow6pc9c/series-workflow6pc9c-convert-artifact-514899054/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,}